CodeBlock* getSomeBaselineCodeBlockForFunction(JSValue theFunctionValue) { FunctionExecutable* executable = getExecutableForFunction(theFunctionValue); if (!executable) return 0; CodeBlock* baselineCodeBlock = executable->baselineCodeBlockFor(CodeForCall); if (!baselineCodeBlock) baselineCodeBlock = executable->baselineCodeBlockFor(CodeForConstruct); return baselineCodeBlock; }
void prepareCodeOriginForOSRExit(ExecState* exec, CodeOrigin codeOrigin) { VM& vm = exec->vm(); DeferGC deferGC(vm.heap); for (; codeOrigin.inlineCallFrame; codeOrigin = codeOrigin.inlineCallFrame->caller) { FunctionExecutable* executable = static_cast<FunctionExecutable*>(codeOrigin.inlineCallFrame->executable.get()); CodeBlock* codeBlock = executable->baselineCodeBlockFor( codeOrigin.inlineCallFrame->specializationKind()); if (codeBlock->jitType() == JSC::JITCode::BaselineJIT) continue; ASSERT(codeBlock->jitType() == JSC::JITCode::InterpreterThunk); JIT::compile(&vm, codeBlock, JITCompilationMustSucceed); codeBlock->install(); } }