Changeset 47412 in webkit for trunk/JavaScriptCore/parser/Nodes.cpp
- Timestamp:
- Aug 17, 2009, 10:34:52 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Nodes.cpp
r47304 r47412 1825 1825 } 1826 1826 1827 void ScopeNodeData::markAggregate(MarkStack& markStack)1828 {1829 FunctionStack::iterator end = m_functionStack.end();1830 for (FunctionStack::iterator ptr = m_functionStack.begin(); ptr != end; ++ptr) {1831 FunctionBodyNode* body = *ptr;1832 if (!body->isGenerated())1833 continue;1834 body->generatedBytecode().markAggregate(markStack);1835 }1836 }1837 1838 1827 // ------------------------------ ScopeNode ----------------------------- 1839 1828 … … 1893 1882 } 1894 1883 1895 void ProgramNode::generateBytecode(ScopeChainNode* scopeChainNode)1896 {1897 ScopeChain scopeChain(scopeChainNode);1898 JSGlobalObject* globalObject = scopeChain.globalObject();1899 1900 m_code.set(new ProgramCodeBlock(this, GlobalCode, globalObject, source().provider()));1901 1902 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get()));1903 generator->generate();1904 1905 destroyData();1906 }1907 1908 #if ENABLE(JIT)1909 void ProgramNode::generateJITCode(ScopeChainNode* scopeChainNode)1910 {1911 bytecode(scopeChainNode);1912 ASSERT(m_code);1913 ASSERT(!m_jitCode);1914 JIT::compile(scopeChainNode->globalData, m_code.get());1915 ASSERT(m_jitCode);1916 }1917 #endif1918 1919 1884 // ------------------------------ EvalNode ----------------------------- 1920 1885 … … 1947 1912 return 0; 1948 1913 } 1949 1950 void EvalNode::generateBytecode(ScopeChainNode* scopeChainNode)1951 {1952 ScopeChain scopeChain(scopeChainNode);1953 JSGlobalObject* globalObject = scopeChain.globalObject();1954 1955 m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth()));1956 1957 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));1958 generator->generate();1959 1960 // Eval code needs to hang on to its declaration stacks to keep declaration info alive until Interpreter::execute time,1961 // so the entire ScopeNodeData cannot be destoyed.1962 children().clear();1963 }1964 1965 EvalCodeBlock& EvalNode::bytecodeForExceptionInfoReparse(ScopeChainNode* scopeChainNode, CodeBlock* codeBlockBeingRegeneratedFrom)1966 {1967 ASSERT(!m_code);1968 1969 ScopeChain scopeChain(scopeChainNode);1970 JSGlobalObject* globalObject = scopeChain.globalObject();1971 1972 m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth()));1973 1974 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));1975 generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);1976 generator->generate();1977 1978 return *m_code;1979 }1980 1981 void EvalNode::markAggregate(MarkStack& markStack)1982 {1983 // We don't need to mark our own CodeBlock as the JSGlobalObject takes care of that1984 data()->markAggregate(markStack);1985 }1986 1987 #if ENABLE(JIT)1988 void EvalNode::generateJITCode(ScopeChainNode* scopeChainNode)1989 {1990 bytecode(scopeChainNode);1991 ASSERT(m_code);1992 ASSERT(!m_jitCode);1993 JIT::compile(scopeChainNode->globalData, m_code.get());1994 ASSERT(m_jitCode);1995 }1996 #endif1997 1914 1998 1915 // ------------------------------ FunctionBodyNode ----------------------------- … … 2038 1955 } 2039 1956 2040 void FunctionBodyNode::markAggregate(MarkStack& markStack)2041 {2042 if (m_code)2043 m_code->markAggregate(markStack);2044 }2045 2046 #if ENABLE(JIT)2047 PassRefPtr<FunctionBodyNode> FunctionBodyNode::createNativeThunk(JSGlobalData* globalData)2048 {2049 RefPtr<FunctionBodyNode> body = new FunctionBodyNode(globalData);2050 globalData->parser->arena().reset();2051 body->m_code.set(new NativeCodeBlock(body.get()));2052 body->m_jitCode = JITCode(JITCode::HostFunction(globalData->jitStubs.ctiNativeCallThunk()));2053 return body.release();2054 }2055 #endif2056 2057 bool FunctionBodyNode::isHostFunction() const2058 {2059 return m_code && m_code->codeType() == NativeCode;2060 }2061 2062 1957 FunctionBodyNode* FunctionBodyNode::create(JSGlobalData* globalData) 2063 1958 { … … 2076 1971 } 2077 1972 2078 void FunctionBodyNode:: generateBytecode(ScopeChainNode* scopeChainNode)1973 void FunctionBodyNode::reparseDataIfNecessary(ScopeChainNode* scopeChainNode) 2079 1974 { 2080 1975 // This branch is only necessary since you can still create a non-stub FunctionBodyNode by … … 2083 1978 scopeChainNode->globalData->parser->reparseInPlace(scopeChainNode->globalData, this); 2084 1979 ASSERT(data()); 2085 2086 ScopeChain scopeChain(scopeChainNode);2087 JSGlobalObject* globalObject = scopeChain.globalObject();2088 2089 m_code.set(new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset()));2090 2091 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));2092 generator->generate();2093 2094 destroyData();2095 }2096 2097 #if ENABLE(JIT)2098 void FunctionBodyNode::generateJITCode(ScopeChainNode* scopeChainNode)2099 {2100 bytecode(scopeChainNode);2101 ASSERT(m_code);2102 ASSERT(!m_jitCode);2103 JIT::compile(scopeChainNode->globalData, m_code.get());2104 ASSERT(m_jitCode);2105 }2106 #endif2107 2108 CodeBlock& FunctionBodyNode::bytecodeForExceptionInfoReparse(ScopeChainNode* scopeChainNode, CodeBlock* codeBlockBeingRegeneratedFrom)2109 {2110 ASSERT(!m_code);2111 2112 ScopeChain scopeChain(scopeChainNode);2113 JSGlobalObject* globalObject = scopeChain.globalObject();2114 2115 m_code.set(new FunctionCodeBlock(this, FunctionCode, source().provider(), source().startOffset()));2116 2117 OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));2118 generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);2119 generator->generate();2120 2121 return *m_code;2122 1980 } 2123 1981 … … 2157 2015 } 2158 2016 2159 JSFunction* FunctionBodyNode::make(ExecState* exec, ScopeChainNode* scopeChain)2160 {2161 return new (exec) JSFunction(exec, m_ident, this, scopeChain);2162 }2163 2164 2017 // ------------------------------ FuncDeclNode --------------------------------- 2165 2018
Note:
See TracChangeset
for help on using the changeset viewer.