void WebAssemblyExecutable::prepareForExecution(ExecState* exec) { if (hasJITCodeForCall()) return; VM& vm = exec->vm(); DeferGC deferGC(vm.heap); WebAssemblyCodeBlock* codeBlock = WebAssemblyCodeBlock::create(&vm, this, exec->lexicalGlobalObject()); WASMFunctionParser::compile(vm, codeBlock, m_module.get(), m_source, m_functionIndex); m_jitCodeForCall = codeBlock->jitCode(); m_jitCodeForCallWithArityCheck = MacroAssemblerCodePtr(); m_numParametersForCall = codeBlock->numParameters(); m_codeBlockForCall.set(vm, this, codeBlock); Heap::heap(this)->writeBarrier(this); }
void WebAssemblyExecutable::prepareForExecution(ExecState* exec) { if (hasJITCodeForCall()) return; VM& vm = exec->vm(); DeferGC deferGC(vm.heap); RefPtr<WebAssemblyCodeBlock> codeBlock = adoptRef(new WebAssemblyCodeBlock( this, vm, exec->lexicalGlobalObject())); WASMFunctionParser::compile(vm, codeBlock.get(), m_module.get(), m_source, m_functionIndex); m_jitCodeForCall = codeBlock->jitCode(); m_jitCodeForCallWithArityCheck = MacroAssemblerCodePtr(); m_jitCodeForCallWithArityCheckAndPreserveRegs = MacroAssemblerCodePtr(); m_numParametersForCall = codeBlock->numParameters(); m_codeBlockForCall = codeBlock; Heap::heap(this)->writeBarrier(this); }