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; }