Changeset 45066 in webkit for trunk/JavaScriptCore
- Timestamp:
- Jun 24, 2009, 12:26:58 AM (16 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r45039 r45066 1 2009-06-24 Norbert Leser <[email protected]> 2 3 Reviewed by Maciej Stachoviak. 4 5 The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance 6 (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.). 7 Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode), 8 the stack overflows immediately on Symbian hardware (max. 80 kB). 9 Proposed change allocates generator objects on heap. 10 Performance impact (if any) should be negligible and change is proposed as general fix, 11 rather than ifdef'd for SYMBIAN. 12 13 * parser/Nodes.cpp: 14 (JSC::ProgramNode::generateBytecode): 15 (JSC::EvalNode::generateBytecode): 16 (JSC::EvalNode::bytecodeForExceptionInfoReparse): 17 (JSC::FunctionBodyNode::generateBytecode): 18 (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): 19 1 20 2009-06-23 Oliver Hunt <[email protected]> 2 21 -
trunk/JavaScriptCore/parser/Nodes.cpp
r44844 r45066 1890 1890 m_code.set(new ProgramCodeBlock(this, GlobalCode, globalObject, source().provider())); 1891 1891 1892 BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get());1893 generator .generate();1892 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get())); 1893 generator->generate(); 1894 1894 1895 1895 destroyData(); … … 1945 1945 m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())); 1946 1946 1947 BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());1948 generator .generate();1947 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); 1948 generator->generate(); 1949 1949 1950 1950 // Eval code needs to hang on to its declaration stacks to keep declaration info alive until Interpreter::execute time, … … 1962 1962 m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())); 1963 1963 1964 BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());1965 generator .setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);1966 generator .generate();1964 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); 1965 generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); 1966 generator->generate(); 1967 1967 1968 1968 return *m_code; … … 2078 2078 m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset())); 2079 2079 2080 BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());2081 generator .generate();2080 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); 2081 generator->generate(); 2082 2082 2083 2083 destroyData(); … … 2104 2104 m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset())); 2105 2105 2106 BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());2107 generator .setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);2108 generator .generate();2106 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); 2107 generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); 2108 generator->generate(); 2109 2109 2110 2110 return *m_code;
Note:
See TracChangeset
for help on using the changeset viewer.