Changeset 51882 in webkit for trunk/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Dec 8, 2009, 5:29:52 PM (15 years ago)
- File:
-
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r51875 r51882 106 106 { 107 107 return emitThrowError(generator, type, messageTemplate, label.ustring()); 108 }109 110 // ------------------------------ StatementNode --------------------------------111 112 void StatementNode::setLoc(int firstLine, int lastLine)113 {114 m_line = firstLine;115 m_lastLine = lastLine;116 }117 118 // ------------------------------ SourceElements --------------------------------119 120 void SourceElements::append(StatementNode* statement)121 {122 if (statement->isEmptyStatement())123 return;124 m_statements.append(statement);125 }126 127 inline StatementNode* SourceElements::singleStatement() const128 {129 size_t size = m_statements.size();130 return size == 1 ? m_statements[0] : 0;131 }132 133 inline StatementNode* SourceElements::lastStatement() const134 {135 size_t size = m_statements.size();136 return size ? m_statements[size - 1] : 0;137 108 } 138 109 … … 1327 1298 // ------------------------------ SourceElements ------------------------------- 1328 1299 1300 1301 inline StatementNode* SourceElements::lastStatement() const 1302 { 1303 size_t size = m_statements.size(); 1304 return size ? m_statements[size - 1] : 0; 1305 } 1306 1329 1307 inline void SourceElements::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1330 1308 { … … 1949 1927 } 1950 1928 1951 // -----------------------------ScopeNodeData ---------------------------1952 1953 ScopeNodeData::ScopeNodeData(ParserArena& arena, SourceElements* statements, VarStack* varStack, FunctionStack* funcStack, int numConstants)1954 : m_numConstants(numConstants)1955 , m_statements(statements)1956 {1957 m_arena.swap(arena);1958 if (varStack)1959 m_varStack.swap(*varStack);1960 if (funcStack)1961 m_functionStack.swap(*funcStack);1962 }1963 1964 1929 // ------------------------------ ScopeNode ----------------------------- 1965 1966 ScopeNode::ScopeNode(JSGlobalData* globalData)1967 : StatementNode(globalData)1968 , ParserArenaRefCounted(globalData)1969 , m_features(NoFeatures)1970 {1971 }1972 1973 ScopeNode::ScopeNode(JSGlobalData* globalData, const SourceCode& source, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, CodeFeatures features, int numConstants)1974 : StatementNode(globalData)1975 , ParserArenaRefCounted(globalData)1976 , m_data(new ScopeNodeData(globalData->parser->arena(), children, varStack, funcStack, numConstants))1977 , m_features(features)1978 , m_source(source)1979 {1980 }1981 1930 1982 1931 inline void ScopeNode::emitStatementsBytecode(BytecodeGenerator& generator, RegisterID* dst) … … 1986 1935 } 1987 1936 1988 StatementNode* ScopeNode::singleStatement() const1989 {1990 return m_data->m_statements ? m_data->m_statements->singleStatement() : 0;1991 }1992 1993 1937 // ------------------------------ ProgramNode ----------------------------- 1994 1995 inline ProgramNode::ProgramNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& source, CodeFeatures features, int numConstants)1996 : ScopeNode(globalData, source, children, varStack, funcStack, features, numConstants)1997 {1998 }1999 2000 PassRefPtr<ProgramNode> ProgramNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& source, CodeFeatures features, int numConstants)2001 {2002 RefPtr<ProgramNode> node = new ProgramNode(globalData, children, varStack, funcStack, source, features, numConstants);2003 2004 ASSERT(node->data()->m_arena.last() == node);2005 node->data()->m_arena.removeLast();2006 ASSERT(!node->data()->m_arena.contains(node.get()));2007 2008 return node.release();2009 }2010 1938 2011 1939 RegisterID* ProgramNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) … … 2024 1952 // ------------------------------ EvalNode ----------------------------- 2025 1953 2026 inline EvalNode::EvalNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& source, CodeFeatures features, int numConstants)2027 : ScopeNode(globalData, source, children, varStack, funcStack, features, numConstants)2028 {2029 }2030 2031 PassRefPtr<EvalNode> EvalNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& source, CodeFeatures features, int numConstants)2032 {2033 RefPtr<EvalNode> node = new EvalNode(globalData, children, varStack, funcStack, source, features, numConstants);2034 2035 ASSERT(node->data()->m_arena.last() == node);2036 node->data()->m_arena.removeLast();2037 ASSERT(!node->data()->m_arena.contains(node.get()));2038 2039 return node.release();2040 }2041 2042 1954 RegisterID* EvalNode::emitBytecode(BytecodeGenerator& generator, RegisterID*) 2043 1955 { … … 2054 1966 2055 1967 // ------------------------------ FunctionBodyNode ----------------------------- 2056 2057 FunctionParameters::FunctionParameters(ParameterNode* firstParameter)2058 {2059 for (ParameterNode* parameter = firstParameter; parameter; parameter = parameter->nextParam())2060 append(parameter->ident());2061 }2062 2063 inline FunctionBodyNode::FunctionBodyNode(JSGlobalData* globalData)2064 : ScopeNode(globalData)2065 {2066 }2067 2068 inline FunctionBodyNode::FunctionBodyNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& sourceCode, CodeFeatures features, int numConstants)2069 : ScopeNode(globalData, sourceCode, children, varStack, funcStack, features, numConstants)2070 {2071 }2072 2073 void FunctionBodyNode::finishParsing(const SourceCode& source, ParameterNode* firstParameter, const Identifier& ident)2074 {2075 setSource(source);2076 finishParsing(FunctionParameters::create(firstParameter), ident);2077 }2078 2079 void FunctionBodyNode::finishParsing(PassRefPtr<FunctionParameters> parameters, const Identifier& ident)2080 {2081 ASSERT(!source().isNull());2082 m_parameters = parameters;2083 m_ident = ident;2084 }2085 2086 FunctionBodyNode* FunctionBodyNode::create(JSGlobalData* globalData)2087 {2088 return new FunctionBodyNode(globalData);2089 }2090 2091 PassRefPtr<FunctionBodyNode> FunctionBodyNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, const SourceCode& sourceCode, CodeFeatures features, int numConstants)2092 {2093 RefPtr<FunctionBodyNode> node = new FunctionBodyNode(globalData, children, varStack, funcStack, sourceCode, features, numConstants);2094 2095 ASSERT(node->data()->m_arena.last() == node);2096 node->data()->m_arena.removeLast();2097 ASSERT(!node->data()->m_arena.contains(node.get()));2098 2099 return node.release();2100 }2101 1968 2102 1969 RegisterID* FunctionBodyNode::emitBytecode(BytecodeGenerator& generator, RegisterID*)
Note:
See TracChangeset
for help on using the changeset viewer.