JS_GetFrameAnnotation(JSContext *cx, JSStackFrame *fpArg) { StackFrame *fp = Valueify(fpArg); if (fp->annotation() && fp->scopeChain()->compartment()->principals) { /* * Give out an annotation only if privileges have not been revoked * or disabled globally. */ return fp->annotation(); } return NULL; }
JS_GetFrameAnnotation(JSContext *cx, JSStackFrame *fpArg) { StackFrame *fp = Valueify(fpArg); if (fp->annotation() && fp->isScriptFrame()) { JSPrincipals *principals = fp->scopeChain().principals(cx); if (principals && principals->globalPrivilegesEnabled(cx, principals)) { /* * Give out an annotation only if privileges have not been revoked * or disabled globally. */ return fp->annotation(); } } return NULL; }
JS_SetTopFrameAnnotation(JSContext *cx, void *annotation) { StackFrame *fp = cx->fp(); JS_ASSERT_IF(fp->beginsIonActivation(), !fp->annotation()); // Note that if this frame is running in Ion, the actual calling frame // could be inlined or a callee and thus we won't have a correct |fp|. // To account for this, ion::InvalidationBailout will transfer an // annotation from the old cx->fp() to the new top frame. This works // because we will never EnterIon on a frame with an annotation. fp->setAnnotation(annotation); JSScript *script = fp->script(); ReleaseAllJITCode(cx->runtime->defaultFreeOp()); // Ensure that we'll never try to compile this again. JS_ASSERT(!script->hasIonScript()); script->ion = ION_DISABLED_SCRIPT; }