ExceptionInfo* EvalExecutable::reparseExceptionInfo(AJGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock) { RefPtr<EvalNode> newEvalBody = globalData->parser->parse<EvalNode>(globalData, 0, 0, m_source); ScopeChain scopeChain(scopeChainNode); AJGlobalObject* globalObject = scopeChain.globalObject(); OwnPtr<EvalCodeBlock> newCodeBlock(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())); OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(newEvalBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get())); generator->setRegeneratingForExceptionInfo(static_cast<EvalCodeBlock*>(codeBlock)); generator->generate(); ASSERT(newCodeBlock->instructionCount() == codeBlock->instructionCount()); #if ENABLE(JIT) #if ENABLE(INTERPRETER) if (globalData->canUseJIT()) #endif { JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get(), generatedJITCode().start()); ASSERT(newJITCode.size() == generatedJITCode().size()); } #endif return newCodeBlock->extractExceptionInfo(); }
ExceptionInfo* FunctionExecutable::reparseExceptionInfo(AJGlobalData* globalData, ScopeChainNode* scopeChainNode, CodeBlock* codeBlock) { RefPtr<FunctionBodyNode> newFunctionBody = globalData->parser->parse<FunctionBodyNode>(globalData, 0, 0, m_source); if (m_forceUsesArguments) newFunctionBody->setUsesArguments(); newFunctionBody->finishParsing(m_parameters, m_name); ScopeChain scopeChain(scopeChainNode); AJGlobalObject* globalObject = scopeChain.globalObject(); OwnPtr<CodeBlock> newCodeBlock(new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset())); globalData->functionCodeBlockBeingReparsed = newCodeBlock.get(); OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(newFunctionBody.get(), globalObject->debugger(), scopeChain, newCodeBlock->symbolTable(), newCodeBlock.get())); generator->setRegeneratingForExceptionInfo(static_cast<FunctionCodeBlock*>(codeBlock)); generator->generate(); ASSERT(newCodeBlock->instructionCount() == codeBlock->instructionCount()); #if ENABLE(JIT) #if ENABLE(INTERPRETER) if (globalData->canUseJIT()) #endif { JITCode newJITCode = JIT::compile(globalData, newCodeBlock.get(), generatedJITCode().start()); ASSERT(newJITCode.size() == generatedJITCode().size()); } #endif globalData->functionCodeBlockBeingReparsed = 0; return newCodeBlock->extractExceptionInfo(); }