Changeset 38635 in webkit for trunk/JavaScriptCore/parser/Nodes.h
- Timestamp:
- Nov 20, 2008, 3:23:59 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Nodes.h
r38473 r38635 171 171 virtual bool isBracketAccessorNode() const JSC_FAST_CALL { return false; } 172 172 virtual bool isDotAccessorNode() const JSC_FAST_CALL { return false; } 173 virtual bool isFuncExprNode() const JSC_FAST_CALL { return false; } 173 174 174 175 virtual ExpressionNode* stripUnaryPlus() { return this; } … … 192 193 virtual bool isEmptyStatement() const JSC_FAST_CALL { return false; } 193 194 virtual bool isReturnNode() const JSC_FAST_CALL { return false; } 195 virtual bool isExprStatement() const JSC_FAST_CALL { return false; } 194 196 195 197 virtual bool isBlock() const JSC_FAST_CALL { return false; } … … 1743 1745 } 1744 1746 1745 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; 1747 virtual bool isExprStatement() const JSC_FAST_CALL { return true; } 1748 1749 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL; 1750 1751 ExpressionNode* expr() const { return m_expr.get(); } 1746 1752 1747 1753 private: … … 2057 2063 }; 2058 2064 2059 class ScopeNode : public BlockNode { 2060 public: 2065 struct ScopeNodeData { 2061 2066 typedef DeclarationStacks::VarStack VarStack; 2062 2067 typedef DeclarationStacks::FunctionStack FunctionStack; 2063 2068 2069 ScopeNodeData(SourceElements*, VarStack*, FunctionStack*, int numConstants); 2070 2071 VarStack m_varStack; 2072 FunctionStack m_functionStack; 2073 int m_numConstants; 2074 StatementVector m_children; 2075 }; 2076 2077 class ScopeNode : public StatementNode { 2078 public: 2079 typedef DeclarationStacks::VarStack VarStack; 2080 typedef DeclarationStacks::FunctionStack FunctionStack; 2081 2082 ScopeNode(JSGlobalData*) JSC_FAST_CALL; 2064 2083 ScopeNode(JSGlobalData*, const SourceCode&, SourceElements*, VarStack*, FunctionStack*, CodeFeatures, int numConstants) JSC_FAST_CALL; 2084 virtual ~ScopeNode(); 2085 virtual void releaseNodes(NodeReleaser&); 2086 2087 void adoptData(std::auto_ptr<ScopeNodeData> data) { m_data.adopt(data); } 2088 ScopeNodeData* data() const { return m_data.get(); } 2089 void destroyData() { m_data.clear(); } 2065 2090 2066 2091 const SourceCode& source() const { return m_source; } … … 2068 2093 intptr_t sourceID() const { return m_source.provider()->asID(); } 2069 2094 2095 void setFeatures(CodeFeatures features) { m_features = features; } 2070 2096 bool usesEval() const { return m_features & EvalFeature; } 2071 2097 bool usesArguments() const { return m_features & ArgumentsFeature; } … … 2074 2100 bool needsActivation() const { return m_features & (EvalFeature | ClosureFeature | WithFeature | CatchFeature); } 2075 2101 2076 VarStack& varStack() { return m_varStack; } 2077 FunctionStack& functionStack() { return m_functionStack; } 2102 VarStack& varStack() { ASSERT(m_data); return m_data->m_varStack; } 2103 FunctionStack& functionStack() { ASSERT(m_data); return m_data->m_functionStack; } 2104 2105 StatementVector& children() { ASSERT(m_data); return m_data->m_children; } 2078 2106 2079 2107 int neededConstants() 2080 2108 { 2109 ASSERT(m_data); 2081 2110 // We may need 2 more constants than the count given by the parser, 2082 2111 // because of the various uses of jsUndefined() and jsNull(). 2083 return m_ numConstants + 2;2112 return m_data->m_numConstants + 2; 2084 2113 } 2085 2114 … … 2087 2116 void setSource(const SourceCode& source) { m_source = source; } 2088 2117 2089 VarStack m_varStack; 2090 FunctionStack m_functionStack; 2091 2092 private: 2118 private: 2119 OwnPtr<ScopeNodeData> m_data; 2120 CodeFeatures m_features; 2093 2121 SourceCode m_source; 2094 CodeFeatures m_features;2095 int m_numConstants;2096 2122 }; 2097 2123 … … 2142 2168 friend class JIT; 2143 2169 public: 2170 static FunctionBodyNode* create(JSGlobalData*) JSC_FAST_CALL; 2144 2171 static FunctionBodyNode* create(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants) JSC_FAST_CALL; 2145 static FunctionBodyNode* create(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, CodeFeatures, int numConstants) JSC_FAST_CALL; 2146 ~FunctionBodyNode(); 2172 virtual ~FunctionBodyNode(); 2147 2173 2148 2174 const Identifier* parameters() const JSC_FAST_CALL { return m_parameters; } … … 2194 2220 2195 2221 private: 2222 FunctionBodyNode(JSGlobalData*) JSC_FAST_CALL; 2196 2223 FunctionBodyNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants) JSC_FAST_CALL; 2197 2224 … … 2217 2244 virtual ~FuncExprNode(); 2218 2245 virtual void releaseNodes(NodeReleaser&); 2246 2247 virtual bool isFuncExprNode() const JSC_FAST_CALL { return true; } 2219 2248 2220 2249 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
Note:
See TracChangeset
for help on using the changeset viewer.