Changeset 31072 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Mar 14, 2008, 6:05:55 PM (17 years ago)
- Location:
- trunk/JavaScriptCore/kjs
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/NodeInfo.h
r29663 r31072 26 26 namespace KJS { 27 27 28 template <typename T> struct NodeInfo { 29 T m_node; 30 ParserRefCountedData<DeclarationStacks::VarStack>* m_varDeclarations; 31 ParserRefCountedData<DeclarationStacks::FunctionStack>* m_funcDeclarations; 32 }; 28 typedef unsigned int FeatureInfo; 33 29 34 typedef NodeInfo<StatementNode*> StatementNodeInfo; 35 typedef NodeInfo<CaseBlockNode*> CaseBlockNodeInfo; 36 typedef NodeInfo<CaseClauseNode*> CaseClauseNodeInfo; 37 typedef NodeInfo<SourceElements*> SourceElementsInfo; 38 typedef NodeInfo<ClauseList> ClauseListInfo; 39 typedef NodeInfo<ExpressionNode*> VarDeclListInfo; 40 typedef NodeInfo<ConstDeclList> ConstDeclListInfo; 30 const FeatureInfo NoFeatures = 0; 31 const FeatureInfo EvalFeature = 1 << 0; 32 const FeatureInfo ClosureFeature = 1 << 1; 33 34 template <typename T> struct NodeFeatureInfo { 35 T m_node; 36 FeatureInfo m_featureInfo; 37 }; 38 39 typedef NodeFeatureInfo<FuncExprNode*> FuncExprNodeInfo; 40 typedef NodeFeatureInfo<ExpressionNode*> ExpressionNodeInfo; 41 typedef NodeFeatureInfo<ArgumentsNode*> ArgumentsNodeInfo; 42 typedef NodeFeatureInfo<ConstDeclNode*> ConstDeclNodeInfo; 43 typedef NodeFeatureInfo<PropertyNode*> PropertyNodeInfo; 44 typedef NodeFeatureInfo<PropertyList> PropertyListInfo; 45 typedef NodeFeatureInfo<ElementList> ElementListInfo; 46 typedef NodeFeatureInfo<ArgumentList> ArgumentListInfo; 47 48 template <typename T> struct NodeDeclarationInfo { 49 T m_node; 50 ParserRefCountedData<DeclarationStacks::VarStack>* m_varDeclarations; 51 ParserRefCountedData<DeclarationStacks::FunctionStack>* m_funcDeclarations; 52 FeatureInfo m_featureInfo; 53 }; 54 55 typedef NodeDeclarationInfo<StatementNode*> StatementNodeInfo; 56 typedef NodeDeclarationInfo<CaseBlockNode*> CaseBlockNodeInfo; 57 typedef NodeDeclarationInfo<CaseClauseNode*> CaseClauseNodeInfo; 58 typedef NodeDeclarationInfo<SourceElements*> SourceElementsInfo; 59 typedef NodeDeclarationInfo<ClauseList> ClauseListInfo; 60 typedef NodeDeclarationInfo<ExpressionNode*> VarDeclListInfo; 61 typedef NodeDeclarationInfo<ConstDeclList> ConstDeclListInfo; 41 62 42 63 } // namespace KJS -
trunk/JavaScriptCore/kjs/Parser.cpp
r28937 r31072 73 73 74 74 void Parser::didFinishParsing(SourceElements* sourceElements, ParserRefCountedData<DeclarationStacks::VarStack>* varStack, 75 ParserRefCountedData<DeclarationStacks::FunctionStack>* funcStack, int lastLine)75 ParserRefCountedData<DeclarationStacks::FunctionStack>* funcStack, bool usesEval, bool needsClosure, int lastLine) 76 76 { 77 77 m_sourceElements = sourceElements ? sourceElements : new SourceElements; 78 78 m_varDeclarations = varStack; 79 79 m_funcDeclarations = funcStack; 80 m_usesEval = usesEval; 81 m_needsClosure = needsClosure; 80 82 m_lastLine = lastLine; 81 83 } -
trunk/JavaScriptCore/kjs/Parser.h
r30942 r31072 53 53 54 54 void didFinishParsing(SourceElements*, ParserRefCountedData<DeclarationStacks::VarStack>*, 55 ParserRefCountedData<DeclarationStacks::FunctionStack>*, int lastLine);55 ParserRefCountedData<DeclarationStacks::FunctionStack>*, bool usesEval, bool needsClosure, int lastLine); 56 56 57 57 private: … … 67 67 RefPtr<ParserRefCountedData<DeclarationStacks::VarStack> > m_varDeclarations; 68 68 RefPtr<ParserRefCountedData<DeclarationStacks::FunctionStack> > m_funcDeclarations; 69 bool m_usesEval; 70 bool m_needsClosure; 69 71 int m_lastLine; 70 72 }; … … 85 87 RefPtr<ParsedNode> node = ParsedNode::create(m_sourceElements.release().get(), 86 88 m_varDeclarations ? &m_varDeclarations->data : 0, 87 m_funcDeclarations ? &m_funcDeclarations->data : 0); 89 m_funcDeclarations ? &m_funcDeclarations->data : 0, 90 m_usesEval, 91 m_needsClosure); 88 92 m_varDeclarations = 0; 89 93 m_funcDeclarations = 0; -
trunk/JavaScriptCore/kjs/grammar.y
r30871 r31072 67 67 static ExpressionNode* makePostfixNode(ExpressionNode* expr, Operator); 68 68 static PropertyNode* makeGetterOrSetterPropertyNode(const Identifier &getOrSet, const Identifier& name, ParameterNode*, FunctionBodyNode*); 69 static ExpressionNode * makeFunctionCallNode(ExpressionNode* func, ArgumentsNode*);69 static ExpressionNodeInfo makeFunctionCallNode(ExpressionNodeInfo func, ArgumentsNodeInfo); 70 70 static ExpressionNode* makeTypeOfNode(ExpressionNode*); 71 71 static ExpressionNode* makeDeleteNode(ExpressionNode*); … … 90 90 #endif 91 91 92 template <typename T> NodeInfo<T> createNodeInfo(T node, ParserRefCountedData<DeclarationStacks::VarStack>* varDecls, 93 ParserRefCountedData<DeclarationStacks::FunctionStack>* funcDecls) 94 { 95 NodeInfo<T> result = {node, varDecls, funcDecls}; 92 template <typename T> NodeDeclarationInfo<T> createNodeDeclarationInfo(T node, ParserRefCountedData<DeclarationStacks::VarStack>* varDecls, 93 ParserRefCountedData<DeclarationStacks::FunctionStack>* funcDecls, 94 FeatureInfo info) 95 { 96 ASSERT((info & ~(EvalFeature | ClosureFeature)) == 0); 97 NodeDeclarationInfo<T> result = {node, varDecls, funcDecls, info}; 98 return result; 99 } 100 101 template <typename T> NodeFeatureInfo<T> createNodeFeatureInfo(T node, FeatureInfo info) 102 { 103 ASSERT((info & ~(EvalFeature | ClosureFeature)) == 0); 104 NodeFeatureInfo<T> result = {node, info}; 96 105 return result; 97 106 } … … 142 151 143 152 // expression subtrees 144 ExpressionNode *expressionNode;153 ExpressionNodeInfo expressionNode; 145 154 FuncDeclNode* funcDeclNode; 146 PropertyNode *propertyNode;147 ArgumentsNode *argumentsNode;148 ConstDeclNode *constDeclNode;155 PropertyNodeInfo propertyNode; 156 ArgumentsNodeInfo argumentsNode; 157 ConstDeclNodeInfo constDeclNode; 149 158 CaseBlockNodeInfo caseBlockNode; 150 159 CaseClauseNodeInfo caseClauseNode; 151 FuncExprNode *funcExprNode;160 FuncExprNodeInfo funcExprNode; 152 161 153 162 // statement nodes … … 157 166 158 167 SourceElementsInfo sourceElements; 159 PropertyList 160 ArgumentList 168 PropertyListInfo propertyList; 169 ArgumentListInfo argumentList; 161 170 VarDeclListInfo varDeclList; 162 171 ConstDeclListInfo constDeclList; 163 172 ClauseListInfo clauseList; 164 ElementList 173 ElementListInfo elementList; 165 174 ParameterList parameterList; 166 175 … … 265 274 266 275 Literal: 267 NULLTOKEN { $$ = new NullNode; }268 | TRUETOKEN { $$ = new TrueNode; }269 | FALSETOKEN { $$ = new FalseNode; }270 | NUMBER { $$ = makeNumberNode($1); }271 | STRING { $$ = new StringNode($1); }276 NULLTOKEN { $$ = createNodeFeatureInfo<ExpressionNode*>(new NullNode, 0); } 277 | TRUETOKEN { $$ = createNodeFeatureInfo<ExpressionNode*>(new TrueNode, 0); } 278 | FALSETOKEN { $$ = createNodeFeatureInfo<ExpressionNode*>(new FalseNode, 0); } 279 | NUMBER { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNumberNode($1), 0); } 280 | STRING { $$ = createNodeFeatureInfo<ExpressionNode*>(new StringNode($1), 0); } 272 281 | '/' /* regexp */ { 273 282 Lexer& l = lexer(); 274 283 if (!l.scanRegExp()) 275 284 YYABORT; 276 $$ = new RegExpNode(l.pattern(), l.flags());285 $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode(l.pattern(), l.flags()), 0); 277 286 } 278 287 | DIVEQUAL /* regexp with /= */ { … … 280 289 if (!l.scanRegExp()) 281 290 YYABORT; 282 $$ = new RegExpNode("=" + l.pattern(), l.flags());291 $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode("=" + l.pattern(), l.flags()), 0); 283 292 } 284 293 ; 285 294 286 295 Property: 287 IDENT ':' AssignmentExpr { $$ = new PropertyNode(*$1, $3, PropertyNode::Constant); }288 | STRING ':' AssignmentExpr { $$ = new PropertyNode(Identifier(*$1), $3, PropertyNode::Constant); }289 | NUMBER ':' AssignmentExpr { $$ = new PropertyNode(Identifier(UString::from($1)), $3, PropertyNode::Constant); }290 | IDENT IDENT '(' ')' '{' FunctionBody '}' { $$ = makeGetterOrSetterPropertyNode(*$1, *$2, 0, $6); DBG($6, @5, @7); if (!$$) YYABORT; }296 IDENT ':' AssignmentExpr { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(*$1, $3.m_node, PropertyNode::Constant), $3.m_featureInfo); } 297 | STRING ':' AssignmentExpr { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(Identifier(*$1), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); } 298 | NUMBER ':' AssignmentExpr { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(Identifier(UString::from($1)), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); } 299 | IDENT IDENT '(' ')' '{' FunctionBody '}' { $$ = createNodeFeatureInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(*$1, *$2, 0, $6), ClosureFeature); DBG($6, @5, @7); if (!$$.m_node) YYABORT; } 291 300 | IDENT IDENT '(' FormalParameterList ')' '{' FunctionBody '}' 292 { $$ = makeGetterOrSetterPropertyNode(*$1, *$2, $4.head, $7); DBG($7, @6, @8); if (!$$) YYABORT; }301 { $$ = createNodeFeatureInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(*$1, *$2, $4.head, $7), ClosureFeature); DBG($7, @6, @8); if (!$$.m_node) YYABORT; } 293 302 ; 294 303 295 304 PropertyList: 296 Property { $$.head = new PropertyListNode($1); 297 $$.tail = $$.head; } 298 | PropertyList ',' Property { $$.head = $1.head; 299 $$.tail = new PropertyListNode($3, $1.tail); } 305 Property { $$.m_node.head = new PropertyListNode($1.m_node); 306 $$.m_node.tail = $$.m_node.head; 307 $$.m_featureInfo = $1.m_featureInfo; } 308 | PropertyList ',' Property { $$.m_node.head = $1.m_node.head; 309 $$.m_node.tail = new PropertyListNode($3.m_node, $1.m_node.tail); 310 $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo; } 300 311 ; 301 312 302 313 PrimaryExpr: 303 314 PrimaryExprNoBrace 304 | '{' '}' { $$ = new ObjectLiteralNode(); }305 | '{' PropertyList '}' { $$ = new ObjectLiteralNode($2.head); }315 | '{' '}' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode(), 0); } 316 | '{' PropertyList '}' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode($2.m_node.head), $2.m_featureInfo); } 306 317 /* allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939 */ 307 | '{' PropertyList ',' '}' { $$ = new ObjectLiteralNode($2.head); }318 | '{' PropertyList ',' '}' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode($2.m_node.head), $2.m_featureInfo); } 308 319 ; 309 320 310 321 PrimaryExprNoBrace: 311 THISTOKEN { $$ = new ThisNode(); }322 THISTOKEN { $$ = createNodeFeatureInfo<ExpressionNode*>(new ThisNode(), 0); } 312 323 | Literal 313 324 | ArrayLiteral 314 | IDENT { $$ = new ResolveNode(*$1); }325 | IDENT { $$ = createNodeFeatureInfo<ExpressionNode*>(new ResolveNode(*$1), 0); } 315 326 | '(' Expr ')' { $$ = $2; } 316 327 ; 317 328 318 329 ArrayLiteral: 319 '[' ElisionOpt ']' { $$ = new ArrayNode($2); }320 | '[' ElementList ']' { $$ = new ArrayNode($2.head); }321 | '[' ElementList ',' ElisionOpt ']' { $$ = new ArrayNode($4, $2.head); }330 '[' ElisionOpt ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($2), 0); } 331 | '[' ElementList ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($2.m_node.head), $2.m_featureInfo); } 332 | '[' ElementList ',' ElisionOpt ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($4, $2.m_node.head), $2.m_featureInfo); } 322 333 ; 323 334 324 335 ElementList: 325 ElisionOpt AssignmentExpr { $$.head = new ElementNode($1, $2); 326 $$.tail = $$.head; } 336 ElisionOpt AssignmentExpr { $$.m_node.head = new ElementNode($1, $2.m_node); 337 $$.m_node.tail = $$.m_node.head; 338 $$.m_featureInfo = $2.m_featureInfo; } 327 339 | ElementList ',' ElisionOpt AssignmentExpr 328 { $$.head = $1.head; 329 $$.tail = new ElementNode($1.tail, $3, $4); } 340 { $$.m_node.head = $1.m_node.head; 341 $$.m_node.tail = new ElementNode($1.m_node.tail, $3, $4.m_node); 342 $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo; } 330 343 ; 331 344 … … 342 355 MemberExpr: 343 356 PrimaryExpr 344 | FunctionExpr { $$ = $1; }345 | MemberExpr '[' Expr ']' { $$ = new BracketAccessorNode($1, $3); }346 | MemberExpr '.' IDENT { $$ = new DotAccessorNode($1, *$3); }347 | NEW MemberExpr Arguments { $$ = new NewExprNode($2, $3); }357 | FunctionExpr { $$ = createNodeFeatureInfo<ExpressionNode*>($1.m_node, $1.m_featureInfo); } 358 | MemberExpr '[' Expr ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 359 | MemberExpr '.' IDENT { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); } 360 | NEW MemberExpr Arguments { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); } 348 361 ; 349 362 350 363 MemberExprNoBF: 351 364 PrimaryExprNoBrace 352 | MemberExprNoBF '[' Expr ']' { $$ = new BracketAccessorNode($1, $3); }353 | MemberExprNoBF '.' IDENT { $$ = new DotAccessorNode($1, *$3); }354 | NEW MemberExpr Arguments { $$ = new NewExprNode($2, $3); }365 | MemberExprNoBF '[' Expr ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 366 | MemberExprNoBF '.' IDENT { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); } 367 | NEW MemberExpr Arguments { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); } 355 368 ; 356 369 357 370 NewExpr: 358 371 MemberExpr 359 | NEW NewExpr { $$ = new NewExprNode($2); }372 | NEW NewExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node), $2.m_featureInfo); } 360 373 ; 361 374 362 375 NewExprNoBF: 363 376 MemberExprNoBF 364 | NEW NewExpr { $$ = new NewExprNode($2); }377 | NEW NewExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node), $2.m_featureInfo); } 365 378 ; 366 379 … … 368 381 MemberExpr Arguments { $$ = makeFunctionCallNode($1, $2); } 369 382 | CallExpr Arguments { $$ = makeFunctionCallNode($1, $2); } 370 | CallExpr '[' Expr ']' { $$ = new BracketAccessorNode($1, $3); }371 | CallExpr '.' IDENT { $$ = new DotAccessorNode($1, *$3); }383 | CallExpr '[' Expr ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 384 | CallExpr '.' IDENT { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); } 372 385 ; 373 386 … … 375 388 MemberExprNoBF Arguments { $$ = makeFunctionCallNode($1, $2); } 376 389 | CallExprNoBF Arguments { $$ = makeFunctionCallNode($1, $2); } 377 | CallExprNoBF '[' Expr ']' { $$ = new BracketAccessorNode($1, $3); }378 | CallExprNoBF '.' IDENT { $$ = new DotAccessorNode($1, *$3); }390 | CallExprNoBF '[' Expr ']' { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 391 | CallExprNoBF '.' IDENT { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); } 379 392 ; 380 393 381 394 Arguments: 382 '(' ')' { $$ = new ArgumentsNode(); }383 | '(' ArgumentList ')' { $$ = new ArgumentsNode($2.head); }395 '(' ')' { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode(), 0); } 396 | '(' ArgumentList ')' { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode($2.m_node.head), $2.m_featureInfo); } 384 397 ; 385 398 386 399 ArgumentList: 387 AssignmentExpr { $$.head = new ArgumentListNode($1); 388 $$.tail = $$.head; } 389 | ArgumentList ',' AssignmentExpr { $$.head = $1.head; 390 $$.tail = new ArgumentListNode($1.tail, $3); } 400 AssignmentExpr { $$.m_node.head = new ArgumentListNode($1.m_node); 401 $$.m_node.tail = $$.m_node.head; 402 $$.m_featureInfo = $1.m_featureInfo; } 403 | ArgumentList ',' AssignmentExpr { $$.m_node.head = $1.m_node.head; 404 $$.m_node.tail = new ArgumentListNode($1.m_node.tail, $3.m_node); 405 $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo; } 391 406 ; 392 407 … … 403 418 PostfixExpr: 404 419 LeftHandSideExpr 405 | LeftHandSideExpr PLUSPLUS { $$ = makePostfixNode($1, OpPlusPlus); }406 | LeftHandSideExpr MINUSMINUS { $$ = makePostfixNode($1, OpMinusMinus); }420 | LeftHandSideExpr PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo); } 421 | LeftHandSideExpr MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo); } 407 422 ; 408 423 409 424 PostfixExprNoBF: 410 425 LeftHandSideExprNoBF 411 | LeftHandSideExprNoBF PLUSPLUS { $$ = makePostfixNode($1, OpPlusPlus); }412 | LeftHandSideExprNoBF MINUSMINUS { $$ = makePostfixNode($1, OpMinusMinus); }426 | LeftHandSideExprNoBF PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo); } 427 | LeftHandSideExprNoBF MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo); } 413 428 ; 414 429 415 430 UnaryExprCommon: 416 DELETETOKEN UnaryExpr { $$ = makeDeleteNode($2); }417 | VOIDTOKEN UnaryExpr { $$ = new VoidNode($2); }418 | TYPEOF UnaryExpr { $$ = makeTypeOfNode($2); }419 | PLUSPLUS UnaryExpr { $$ = makePrefixNode($2, OpPlusPlus); }420 | AUTOPLUSPLUS UnaryExpr { $$ = makePrefixNode($2, OpPlusPlus); }421 | MINUSMINUS UnaryExpr { $$ = makePrefixNode($2, OpMinusMinus); }422 | AUTOMINUSMINUS UnaryExpr { $$ = makePrefixNode($2, OpMinusMinus); }423 | '+' UnaryExpr { $$ = new UnaryPlusNode($2); }424 | '-' UnaryExpr { $$ = makeNegateNode($2); }425 | '~' UnaryExpr { $$ = new BitwiseNotNode($2); }426 | '!' UnaryExpr { $$ = new LogicalNotNode($2); }431 DELETETOKEN UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeDeleteNode($2.m_node), $2.m_featureInfo); } 432 | VOIDTOKEN UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new VoidNode($2.m_node), $2.m_featureInfo); } 433 | TYPEOF UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeTypeOfNode($2.m_node), $2.m_featureInfo); } 434 | PLUSPLUS UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpPlusPlus), $2.m_featureInfo); } 435 | AUTOPLUSPLUS UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpPlusPlus), $2.m_featureInfo); } 436 | MINUSMINUS UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpMinusMinus), $2.m_featureInfo); } 437 | AUTOMINUSMINUS UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpMinusMinus), $2.m_featureInfo); } 438 | '+' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnaryPlusNode($2.m_node), $2.m_featureInfo); } 439 | '-' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNegateNode($2.m_node), $2.m_featureInfo); } 440 | '~' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitwiseNotNode($2.m_node), $2.m_featureInfo); } 441 | '!' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalNotNode($2.m_node), $2.m_featureInfo); } 427 442 428 443 UnaryExpr: … … 438 453 MultiplicativeExpr: 439 454 UnaryExpr 440 | MultiplicativeExpr '*' UnaryExpr { $$ = new MultNode($1, $3); }441 | MultiplicativeExpr '/' UnaryExpr { $$ = new DivNode($1, $3); }442 | MultiplicativeExpr '%' UnaryExpr { $$ = new ModNode($1, $3); }455 | MultiplicativeExpr '*' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 456 | MultiplicativeExpr '/' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 457 | MultiplicativeExpr '%' UnaryExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 443 458 ; 444 459 … … 446 461 UnaryExprNoBF 447 462 | MultiplicativeExprNoBF '*' UnaryExpr 448 { $$ = new MultNode($1, $3); }463 { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 449 464 | MultiplicativeExprNoBF '/' UnaryExpr 450 { $$ = new DivNode($1, $3); }465 { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 451 466 | MultiplicativeExprNoBF '%' UnaryExpr 452 { $$ = new ModNode($1, $3); }467 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 453 468 ; 454 469 455 470 AdditiveExpr: 456 471 MultiplicativeExpr 457 | AdditiveExpr '+' MultiplicativeExpr { $$ = makeAddNode($1, $3); }458 | AdditiveExpr '-' MultiplicativeExpr { $$ = new SubNode($1, $3); }472 | AdditiveExpr '+' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAddNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 473 | AdditiveExpr '-' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 459 474 ; 460 475 … … 462 477 MultiplicativeExprNoBF 463 478 | AdditiveExprNoBF '+' MultiplicativeExpr 464 { $$ = makeAddNode($1, $3); }479 { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAddNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 465 480 | AdditiveExprNoBF '-' MultiplicativeExpr 466 { $$ = new SubNode($1, $3); }481 { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 467 482 ; 468 483 469 484 ShiftExpr: 470 485 AdditiveExpr 471 | ShiftExpr LSHIFT AdditiveExpr { $$ = new LeftShiftNode($1, $3); }472 | ShiftExpr RSHIFT AdditiveExpr { $$ = new RightShiftNode($1, $3); }473 | ShiftExpr URSHIFT AdditiveExpr { $$ = new UnsignedRightShiftNode($1, $3); }486 | ShiftExpr LSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 487 | ShiftExpr RSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 488 | ShiftExpr URSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 474 489 ; 475 490 476 491 ShiftExprNoBF: 477 492 AdditiveExprNoBF 478 | ShiftExprNoBF LSHIFT AdditiveExpr { $$ = new LeftShiftNode($1, $3); }479 | ShiftExprNoBF RSHIFT AdditiveExpr { $$ = new RightShiftNode($1, $3); }480 | ShiftExprNoBF URSHIFT AdditiveExpr { $$ = new UnsignedRightShiftNode($1, $3); }493 | ShiftExprNoBF LSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 494 | ShiftExprNoBF RSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 495 | ShiftExprNoBF URSHIFT AdditiveExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 481 496 ; 482 497 483 498 RelationalExpr: 484 499 ShiftExpr 485 | RelationalExpr '<' ShiftExpr { $$ = makeLessNode($1, $3); }486 | RelationalExpr '>' ShiftExpr { $$ = new GreaterNode($1, $3); }487 | RelationalExpr LE ShiftExpr { $$ = new LessEqNode($1, $3); }488 | RelationalExpr GE ShiftExpr { $$ = new GreaterEqNode($1, $3); }489 | RelationalExpr INSTANCEOF ShiftExpr { $$ = new InstanceOfNode($1, $3); }490 | RelationalExpr INTOKEN ShiftExpr { $$ = new InNode($1, $3); }500 | RelationalExpr '<' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeLessNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 501 | RelationalExpr '>' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 502 | RelationalExpr LE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 503 | RelationalExpr GE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 504 | RelationalExpr INSTANCEOF ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 505 | RelationalExpr INTOKEN ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 491 506 ; 492 507 493 508 RelationalExprNoIn: 494 509 ShiftExpr 495 | RelationalExprNoIn '<' ShiftExpr { $$ = makeLessNode($1, $3); }496 | RelationalExprNoIn '>' ShiftExpr { $$ = new GreaterNode($1, $3); }497 | RelationalExprNoIn LE ShiftExpr { $$ = new LessEqNode($1, $3); }498 | RelationalExprNoIn GE ShiftExpr { $$ = new GreaterEqNode($1, $3); }510 | RelationalExprNoIn '<' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeLessNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 511 | RelationalExprNoIn '>' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 512 | RelationalExprNoIn LE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 513 | RelationalExprNoIn GE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 499 514 | RelationalExprNoIn INSTANCEOF ShiftExpr 500 { $$ = new InstanceOfNode($1, $3); }515 { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 501 516 ; 502 517 503 518 RelationalExprNoBF: 504 519 ShiftExprNoBF 505 | RelationalExprNoBF '<' ShiftExpr { $$ = makeLessNode($1, $3); }506 | RelationalExprNoBF '>' ShiftExpr { $$ = new GreaterNode($1, $3); }507 | RelationalExprNoBF LE ShiftExpr { $$ = new LessEqNode($1, $3); }508 | RelationalExprNoBF GE ShiftExpr { $$ = new GreaterEqNode($1, $3); }520 | RelationalExprNoBF '<' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(makeLessNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 521 | RelationalExprNoBF '>' ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 522 | RelationalExprNoBF LE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 523 | RelationalExprNoBF GE ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 509 524 | RelationalExprNoBF INSTANCEOF ShiftExpr 510 { $$ = new InstanceOfNode($1, $3); }511 | RelationalExprNoBF INTOKEN ShiftExpr { $$ = new InNode($1, $3); }525 { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 526 | RelationalExprNoBF INTOKEN ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 512 527 ; 513 528 514 529 EqualityExpr: 515 530 RelationalExpr 516 | EqualityExpr EQEQ RelationalExpr { $$ = new EqualNode($1, $3); }517 | EqualityExpr NE RelationalExpr { $$ = new NotEqualNode($1, $3); }518 | EqualityExpr STREQ RelationalExpr { $$ = new StrictEqualNode($1, $3); }519 | EqualityExpr STRNEQ RelationalExpr { $$ = new NotStrictEqualNode($1, $3); }531 | EqualityExpr EQEQ RelationalExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 532 | EqualityExpr NE RelationalExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 533 | EqualityExpr STREQ RelationalExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 534 | EqualityExpr STRNEQ RelationalExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 520 535 ; 521 536 … … 523 538 RelationalExprNoIn 524 539 | EqualityExprNoIn EQEQ RelationalExprNoIn 525 { $$ = new EqualNode($1, $3); }540 { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 526 541 | EqualityExprNoIn NE RelationalExprNoIn 527 { $$ = new NotEqualNode($1, $3); }542 { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 528 543 | EqualityExprNoIn STREQ RelationalExprNoIn 529 { $$ = new StrictEqualNode($1, $3); }544 { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 530 545 | EqualityExprNoIn STRNEQ RelationalExprNoIn 531 { $$ = new NotStrictEqualNode($1, $3); }546 { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 532 547 ; 533 548 … … 535 550 RelationalExprNoBF 536 551 | EqualityExprNoBF EQEQ RelationalExpr 537 { $$ = new EqualNode($1, $3); }538 | EqualityExprNoBF NE RelationalExpr { $$ = new NotEqualNode($1, $3); }552 { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 553 | EqualityExprNoBF NE RelationalExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 539 554 | EqualityExprNoBF STREQ RelationalExpr 540 { $$ = new StrictEqualNode($1, $3); }555 { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 541 556 | EqualityExprNoBF STRNEQ RelationalExpr 542 { $$ = new NotStrictEqualNode($1, $3); }557 { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 543 558 ; 544 559 545 560 BitwiseANDExpr: 546 561 EqualityExpr 547 | BitwiseANDExpr '&' EqualityExpr { $$ = new BitAndNode($1, $3); }562 | BitwiseANDExpr '&' EqualityExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 548 563 ; 549 564 … … 551 566 EqualityExprNoIn 552 567 | BitwiseANDExprNoIn '&' EqualityExprNoIn 553 { $$ = new BitAndNode($1, $3); }568 { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 554 569 ; 555 570 556 571 BitwiseANDExprNoBF: 557 572 EqualityExprNoBF 558 | BitwiseANDExprNoBF '&' EqualityExpr { $$ = new BitAndNode($1, $3); }573 | BitwiseANDExprNoBF '&' EqualityExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 559 574 ; 560 575 561 576 BitwiseXORExpr: 562 577 BitwiseANDExpr 563 | BitwiseXORExpr '^' BitwiseANDExpr { $$ = new BitXOrNode($1, $3); }578 | BitwiseXORExpr '^' BitwiseANDExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 564 579 ; 565 580 … … 567 582 BitwiseANDExprNoIn 568 583 | BitwiseXORExprNoIn '^' BitwiseANDExprNoIn 569 { $$ = new BitXOrNode($1, $3); }584 { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 570 585 ; 571 586 … … 573 588 BitwiseANDExprNoBF 574 589 | BitwiseXORExprNoBF '^' BitwiseANDExpr 575 { $$ = new BitXOrNode($1, $3); }590 { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 576 591 ; 577 592 578 593 BitwiseORExpr: 579 594 BitwiseXORExpr 580 | BitwiseORExpr '|' BitwiseXORExpr { $$ = new BitOrNode($1, $3); }595 | BitwiseORExpr '|' BitwiseXORExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 581 596 ; 582 597 … … 584 599 BitwiseXORExprNoIn 585 600 | BitwiseORExprNoIn '|' BitwiseXORExprNoIn 586 { $$ = new BitOrNode($1, $3); }601 { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 587 602 ; 588 603 … … 590 605 BitwiseXORExprNoBF 591 606 | BitwiseORExprNoBF '|' BitwiseXORExpr 592 { $$ = new BitOrNode($1, $3); }607 { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 593 608 ; 594 609 595 610 LogicalANDExpr: 596 611 BitwiseORExpr 597 | LogicalANDExpr AND BitwiseORExpr { $$ = new LogicalAndNode($1, $3); }612 | LogicalANDExpr AND BitwiseORExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 598 613 ; 599 614 … … 601 616 BitwiseORExprNoIn 602 617 | LogicalANDExprNoIn AND BitwiseORExprNoIn 603 { $$ = new LogicalAndNode($1, $3); }618 { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 604 619 ; 605 620 … … 607 622 BitwiseORExprNoBF 608 623 | LogicalANDExprNoBF AND BitwiseORExpr 609 { $$ = new LogicalAndNode($1, $3); }624 { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 610 625 ; 611 626 612 627 LogicalORExpr: 613 628 LogicalANDExpr 614 | LogicalORExpr OR LogicalANDExpr { $$ = new LogicalOrNode($1, $3); }629 | LogicalORExpr OR LogicalANDExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 615 630 ; 616 631 … … 618 633 LogicalANDExprNoIn 619 634 | LogicalORExprNoIn OR LogicalANDExprNoIn 620 { $$ = new LogicalOrNode($1, $3); }635 { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 621 636 ; 622 637 623 638 LogicalORExprNoBF: 624 639 LogicalANDExprNoBF 625 | LogicalORExprNoBF OR LogicalANDExpr { $$ = new LogicalOrNode($1, $3); }640 | LogicalORExprNoBF OR LogicalANDExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 626 641 ; 627 642 … … 629 644 LogicalORExpr 630 645 | LogicalORExpr '?' AssignmentExpr ':' AssignmentExpr 631 { $$ = new ConditionalNode($1, $3, $5); }646 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); } 632 647 ; 633 648 … … 635 650 LogicalORExprNoIn 636 651 | LogicalORExprNoIn '?' AssignmentExprNoIn ':' AssignmentExprNoIn 637 { $$ = new ConditionalNode($1, $3, $5); }652 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); } 638 653 ; 639 654 … … 641 656 LogicalORExprNoBF 642 657 | LogicalORExprNoBF '?' AssignmentExpr ':' AssignmentExpr 643 { $$ = new ConditionalNode($1, $3, $5); }658 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); } 644 659 ; 645 660 … … 647 662 ConditionalExpr 648 663 | LeftHandSideExpr AssignmentOperator AssignmentExpr 649 { $$ = makeAssignNode($1, $2, $3); }664 { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 650 665 ; 651 666 … … 653 668 ConditionalExprNoIn 654 669 | LeftHandSideExpr AssignmentOperator AssignmentExprNoIn 655 { $$ = makeAssignNode($1, $2, $3); }670 { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 656 671 ; 657 672 … … 659 674 ConditionalExprNoBF 660 675 | LeftHandSideExprNoBF AssignmentOperator AssignmentExpr 661 { $$ = makeAssignNode($1, $2, $3); }676 { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 662 677 ; 663 678 … … 679 694 Expr: 680 695 AssignmentExpr 681 | Expr ',' AssignmentExpr { $$ = new CommaNode($1, $3); }696 | Expr ',' AssignmentExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 682 697 ; 683 698 684 699 ExprNoIn: 685 700 AssignmentExprNoIn 686 | ExprNoIn ',' AssignmentExprNoIn { $$ = new CommaNode($1, $3); }701 | ExprNoIn ',' AssignmentExprNoIn { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 687 702 ; 688 703 689 704 ExprNoBF: 690 705 AssignmentExprNoBF 691 | ExprNoBF ',' AssignmentExpr { $$ = new CommaNode($1, $3); }706 | ExprNoBF ',' AssignmentExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); } 692 707 ; 693 708 … … 712 727 713 728 Block: 714 '{' '}' { $$ = createNode Info<StatementNode*>(new BlockNode(0), 0, 0);729 '{' '}' { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode(0), 0, 0, 0); 715 730 DBG($$.m_node, @1, @2); } 716 | '{' SourceElements '}' { $$ = createNode Info<StatementNode*>(new BlockNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations);731 | '{' SourceElements '}' { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); 717 732 DBG($$.m_node, @1, @3); } 718 733 ; 719 734 720 735 VariableStatement: 721 VAR VariableDeclarationList ';' { $$ = createNode Info<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations);736 VAR VariableDeclarationList ';' { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); 722 737 DBG($$.m_node, @1, @3); } 723 | VAR VariableDeclarationList error { $$ = createNode Info<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations);738 | VAR VariableDeclarationList error { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); 724 739 DBG($$.m_node, @1, @2); 725 740 AUTO_SEMICOLON; } … … 731 746 appendToVarDeclarationList($$.m_varDeclarations, *$1, 0); 732 747 $$.m_funcDeclarations = 0; 733 } 734 | IDENT Initializer { $$.m_node = new AssignResolveNode(*$1, $2); 748 $$.m_featureInfo = 0; 749 } 750 | IDENT Initializer { $$.m_node = new AssignResolveNode(*$1, $2.m_node); 735 751 $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>; 736 752 appendToVarDeclarationList($$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer); 737 753 $$.m_funcDeclarations = 0; 754 $$.m_featureInfo = $2.m_featureInfo; 738 755 } 739 756 | VariableDeclarationList ',' IDENT … … 742 759 appendToVarDeclarationList($$.m_varDeclarations, *$3, 0); 743 760 $$.m_funcDeclarations = 0; 761 $$.m_featureInfo = $1.m_featureInfo; 744 762 } 745 763 | VariableDeclarationList ',' IDENT Initializer 746 { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4 ));764 { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4.m_node)); 747 765 $$.m_varDeclarations = $1.m_varDeclarations; 748 766 appendToVarDeclarationList($$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer); 749 767 $$.m_funcDeclarations = 0; 768 $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo; 750 769 } 751 770 ; … … 756 775 appendToVarDeclarationList($$.m_varDeclarations, *$1, 0); 757 776 $$.m_funcDeclarations = 0; 758 } 759 | IDENT InitializerNoIn { $$.m_node = new AssignResolveNode(*$1, $2); 777 $$.m_featureInfo = 0; 778 } 779 | IDENT InitializerNoIn { $$.m_node = new AssignResolveNode(*$1, $2.m_node); 760 780 $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>; 761 781 appendToVarDeclarationList($$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer); 762 782 $$.m_funcDeclarations = 0; 783 $$.m_featureInfo = $2.m_featureInfo; 763 784 } 764 785 | VariableDeclarationListNoIn ',' IDENT … … 767 788 appendToVarDeclarationList($$.m_varDeclarations, *$3, 0); 768 789 $$.m_funcDeclarations = 0; 790 $$.m_featureInfo = $1.m_featureInfo; 769 791 } 770 792 | VariableDeclarationListNoIn ',' IDENT InitializerNoIn 771 { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4 ));793 { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4.m_node)); 772 794 $$.m_varDeclarations = $1.m_varDeclarations; 773 795 appendToVarDeclarationList($$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer); 774 796 $$.m_funcDeclarations = 0; 797 $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo; 775 798 } 776 799 ; 777 800 778 801 ConstStatement: 779 CONSTTOKEN ConstDeclarationList ';' { $$ = createNode Info<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations);802 CONSTTOKEN ConstDeclarationList ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); 780 803 DBG($$.m_node, @1, @3); } 781 804 | CONSTTOKEN ConstDeclarationList error 782 { $$ = createNode Info<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations);805 { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); 783 806 DBG($$.m_node, @1, @2); AUTO_SEMICOLON; } 784 807 ; 785 808 786 809 ConstDeclarationList: 787 ConstDeclaration { $$.m_node.head = $1 ;810 ConstDeclaration { $$.m_node.head = $1.m_node; 788 811 $$.m_node.tail = $$.m_node.head; 789 812 $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>; 790 appendToVarDeclarationList($$.m_varDeclarations, $1); 791 $$.m_funcDeclarations = 0; } 813 appendToVarDeclarationList($$.m_varDeclarations, $1.m_node); 814 $$.m_funcDeclarations = 0; 815 $$.m_featureInfo = $1.m_featureInfo; 816 } 792 817 | ConstDeclarationList ',' ConstDeclaration 793 818 { $$.m_node.head = $1.m_node.head; 794 $1.m_node.tail->m_next = $3 ;795 $$.m_node.tail = $3 ;819 $1.m_node.tail->m_next = $3.m_node; 820 $$.m_node.tail = $3.m_node; 796 821 $$.m_varDeclarations = $1.m_varDeclarations; 797 appendToVarDeclarationList($$.m_varDeclarations, $3); 798 $$.m_funcDeclarations = 0; } 822 appendToVarDeclarationList($$.m_varDeclarations, $3.m_node); 823 $$.m_funcDeclarations = 0; 824 $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo;} 799 825 ; 800 826 801 827 ConstDeclaration: 802 IDENT { $$ = new ConstDeclNode(*$1, 0); }803 | IDENT Initializer { $$ = new ConstDeclNode(*$1, $2); }828 IDENT { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(*$1, 0), 0); } 829 | IDENT Initializer { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(*$1, $2.m_node), $2.m_featureInfo); } 804 830 ; 805 831 … … 813 839 814 840 EmptyStatement: 815 ';' { $$ = createNode Info<StatementNode*>(new EmptyStatementNode(), 0, 0); }841 ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0); } 816 842 ; 817 843 818 844 ExprStatement: 819 ExprNoBF ';' { $$ = createNode Info<StatementNode*>(new ExprStatementNode($1), 0, 0);845 ExprNoBF ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode($1.m_node), 0, 0, $1.m_featureInfo); 820 846 DBG($$.m_node, @1, @2); } 821 | ExprNoBF error { $$ = createNode Info<StatementNode*>(new ExprStatementNode($1), 0, 0);847 | ExprNoBF error { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode($1.m_node), 0, 0, $1.m_featureInfo); 822 848 DBG($$.m_node, @1, @1); AUTO_SEMICOLON; } 823 849 ; … … 825 851 IfStatement: 826 852 IF '(' Expr ')' Statement %prec IF_WITHOUT_ELSE 827 { $$ = createNode Info<StatementNode*>(new IfNode($3, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations);853 { $$ = createNodeDeclarationInfo<StatementNode*>(new IfNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, $3.m_featureInfo | $5.m_featureInfo); 828 854 DBG($$.m_node, @1, @4); } 829 855 | IF '(' Expr ')' Statement ELSE Statement 830 { $$ = createNodeInfo<StatementNode*>(new IfElseNode($3, $5.m_node, $7.m_node), mergeDeclarationLists($5.m_varDeclarations, $7.m_varDeclarations), mergeDeclarationLists($5.m_funcDeclarations, $7.m_funcDeclarations)); 856 { $$ = createNodeDeclarationInfo<StatementNode*>(new IfElseNode($3.m_node, $5.m_node, $7.m_node), 857 mergeDeclarationLists($5.m_varDeclarations, $7.m_varDeclarations), mergeDeclarationLists($5.m_funcDeclarations, $7.m_funcDeclarations), 858 $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo); 831 859 DBG($$.m_node, @1, @4); } 832 860 ; 833 861 834 862 IterationStatement: 835 DO Statement WHILE '(' Expr ')' ';' { $$ = createNode Info<StatementNode*>(new DoWhileNode($2.m_node, $5), $2.m_varDeclarations, $2.m_funcDeclarations);863 DO Statement WHILE '(' Expr ')' ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new DoWhileNode($2.m_node, $5.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo | $5.m_featureInfo); 836 864 DBG($$.m_node, @1, @3); } 837 | DO Statement WHILE '(' Expr ')' error { $$ = createNode Info<StatementNode*>(new DoWhileNode($2.m_node, $5), $2.m_varDeclarations, $2.m_funcDeclarations);865 | DO Statement WHILE '(' Expr ')' error { $$ = createNodeDeclarationInfo<StatementNode*>(new DoWhileNode($2.m_node, $5.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo | $5.m_featureInfo); 838 866 DBG($$.m_node, @1, @3); } // Always performs automatic semicolon insertion. 839 | WHILE '(' Expr ')' Statement { $$ = createNode Info<StatementNode*>(new WhileNode($3, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations);867 | WHILE '(' Expr ')' Statement { $$ = createNodeDeclarationInfo<StatementNode*>(new WhileNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, $3.m_featureInfo | $5.m_featureInfo); 840 868 DBG($$.m_node, @1, @4); } 841 869 | FOR '(' ExprNoInOpt ';' ExprOpt ';' ExprOpt ')' Statement 842 { $$ = createNodeInfo<StatementNode*>(new ForNode($3, $5, $7, $9.m_node, false), $9.m_varDeclarations, $9.m_funcDeclarations); 870 { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode($3.m_node, $5.m_node, $7.m_node, $9.m_node, false), $9.m_varDeclarations, $9.m_funcDeclarations, 871 $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo | $9.m_featureInfo); 843 872 DBG($$.m_node, @1, @8); 844 873 } 845 874 | FOR '(' VAR VariableDeclarationListNoIn ';' ExprOpt ';' ExprOpt ')' Statement 846 { $$ = createNodeInfo<StatementNode*>(new ForNode($4.m_node, $6, $8, $10.m_node, true), 847 mergeDeclarationLists($4.m_varDeclarations, $10.m_varDeclarations), 848 mergeDeclarationLists($4.m_funcDeclarations, $10.m_funcDeclarations)); 875 { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode($4.m_node, $6.m_node, $8.m_node, $10.m_node, true), 876 mergeDeclarationLists($4.m_varDeclarations, $10.m_varDeclarations), 877 mergeDeclarationLists($4.m_funcDeclarations, $10.m_funcDeclarations), 878 $4.m_featureInfo | $6.m_featureInfo | $8.m_featureInfo | $10.m_featureInfo); 849 879 DBG($$.m_node, @1, @9); } 850 880 | FOR '(' LeftHandSideExpr INTOKEN Expr ')' Statement 851 881 { 852 ExpressionNode* n = $3 ;882 ExpressionNode* n = $3.m_node; 853 883 if (!n->isLocation()) 854 884 YYABORT; 855 $$ = createNodeInfo<StatementNode*>(new ForInNode(n, $5, $7.m_node), $7.m_varDeclarations, $7.m_funcDeclarations); 885 $$ = createNodeDeclarationInfo<StatementNode*>(new ForInNode($3.m_node, $5.m_node, $7.m_node), $7.m_varDeclarations, $7.m_funcDeclarations, 886 $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo); 856 887 DBG($$.m_node, @1, @6); 857 888 } 858 889 | FOR '(' VAR IDENT INTOKEN Expr ')' Statement 859 { ForInNode *forIn = new ForInNode(*$4, 0, $6 , $8.m_node);890 { ForInNode *forIn = new ForInNode(*$4, 0, $6.m_node, $8.m_node); 860 891 appendToVarDeclarationList($8.m_varDeclarations, *$4, DeclarationStacks::HasInitializer); 861 $$ = createNode Info<StatementNode*>(forIn, $8.m_varDeclarations, $8.m_funcDeclarations);892 $$ = createNodeDeclarationInfo<StatementNode*>(forIn, $8.m_varDeclarations, $8.m_funcDeclarations, $6.m_featureInfo | $8.m_featureInfo); 862 893 DBG($$.m_node, @1, @7); } 863 894 | FOR '(' VAR IDENT InitializerNoIn INTOKEN Expr ')' Statement 864 { ForInNode *forIn = new ForInNode(*$4, $5 , $7, $9.m_node);895 { ForInNode *forIn = new ForInNode(*$4, $5.m_node, $7.m_node, $9.m_node); 865 896 appendToVarDeclarationList($9.m_varDeclarations, *$4, DeclarationStacks::HasInitializer); 866 $$ = createNodeInfo<StatementNode*>(forIn, $9.m_varDeclarations, $9.m_funcDeclarations); 897 $$ = createNodeDeclarationInfo<StatementNode*>(forIn, $9.m_varDeclarations, $9.m_funcDeclarations, 898 $5.m_featureInfo | $7.m_featureInfo | $9.m_featureInfo); 867 899 DBG($$.m_node, @1, @8); } 868 900 ; 869 901 870 902 ExprOpt: 871 /* nothing */ { $$ = 0; }903 /* nothing */ { $$ = createNodeFeatureInfo<ExpressionNode*>(0, 0); } 872 904 | Expr 873 905 ; 874 906 875 907 ExprNoInOpt: 876 /* nothing */ { $$ = 0; }908 /* nothing */ { $$ = createNodeFeatureInfo<ExpressionNode*>(0, 0); } 877 909 | ExprNoIn 878 910 ; 879 911 880 912 ContinueStatement: 881 CONTINUE ';' { $$ = createNode Info<StatementNode*>(new ContinueNode(), 0, 0);913 CONTINUE ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(), 0, 0, 0); 882 914 DBG($$.m_node, @1, @2); } 883 | CONTINUE error { $$ = createNode Info<StatementNode*>(new ContinueNode(), 0, 0);915 | CONTINUE error { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(), 0, 0, 0); 884 916 DBG($$.m_node, @1, @1); AUTO_SEMICOLON; } 885 | CONTINUE IDENT ';' { $$ = createNode Info<StatementNode*>(new ContinueNode(*$2), 0, 0);917 | CONTINUE IDENT ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(*$2), 0, 0, 0); 886 918 DBG($$.m_node, @1, @3); } 887 | CONTINUE IDENT error { $$ = createNode Info<StatementNode*>(new ContinueNode(*$2), 0, 0);919 | CONTINUE IDENT error { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(*$2), 0, 0, 0); 888 920 DBG($$.m_node, @1, @2); AUTO_SEMICOLON; } 889 921 ; 890 922 891 923 BreakStatement: 892 BREAK ';' { $$ = createNode Info<StatementNode*>(new BreakNode(), 0, 0); DBG($$.m_node, @1, @2); }893 | BREAK error { $$ = createNode Info<StatementNode*>(new BreakNode(), 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }894 | BREAK IDENT ';' { $$ = createNode Info<StatementNode*>(new BreakNode(*$2), 0, 0); DBG($$.m_node, @1, @3); }895 | BREAK IDENT error { $$ = createNode Info<StatementNode*>(new BreakNode(*$2), 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }924 BREAK ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(), 0, 0, 0); DBG($$.m_node, @1, @2); } 925 | BREAK error { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; } 926 | BREAK IDENT ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(*$2), 0, 0, 0); DBG($$.m_node, @1, @3); } 927 | BREAK IDENT error { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(*$2), 0, 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; } 896 928 ; 897 929 898 930 ReturnStatement: 899 RETURN ';' { $$ = createNode Info<StatementNode*>(new ReturnNode(0), 0, 0); DBG($$.m_node, @1, @2); }900 | RETURN error { $$ = createNode Info<StatementNode*>(new ReturnNode(0), 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }901 | RETURN Expr ';' { $$ = createNode Info<StatementNode*>(new ReturnNode($2), 0, 0); DBG($$.m_node, @1, @3); }902 | RETURN Expr error { $$ = createNode Info<StatementNode*>(new ReturnNode($2), 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }931 RETURN ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(0), 0, 0, 0); DBG($$.m_node, @1, @2); } 932 | RETURN error { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(0), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; } 933 | RETURN Expr ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); } 934 | RETURN Expr error { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; } 903 935 ; 904 936 905 937 WithStatement: 906 WITH '(' Expr ')' Statement { $$ = createNodeInfo<StatementNode*>(new WithNode($3, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations); 938 WITH '(' Expr ')' Statement { $$ = createNodeDeclarationInfo<StatementNode*>(new WithNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, 939 $3.m_featureInfo | $5.m_featureInfo); 907 940 DBG($$.m_node, @1, @4); } 908 941 ; 909 942 910 943 SwitchStatement: 911 SWITCH '(' Expr ')' CaseBlock { $$ = createNodeInfo<StatementNode*>(new SwitchNode($3, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations); 944 SWITCH '(' Expr ')' CaseBlock { $$ = createNodeDeclarationInfo<StatementNode*>(new SwitchNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, 945 $3.m_featureInfo | $5.m_featureInfo); 912 946 DBG($$.m_node, @1, @4); } 913 947 ; 914 948 915 949 CaseBlock: 916 '{' CaseClausesOpt '}' { $$ = createNode Info<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, 0, 0), $2.m_varDeclarations, $2.m_funcDeclarations); }950 '{' CaseClausesOpt '}' { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, 0, 0), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); } 917 951 | '{' CaseClausesOpt DefaultClause CaseClausesOpt '}' 918 { $$ = createNodeInfo<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, $3.m_node, $4.m_node.head), 919 mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $3.m_varDeclarations), $4.m_varDeclarations), 920 mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $3.m_funcDeclarations), $4.m_funcDeclarations)); } 952 { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, $3.m_node, $4.m_node.head), 953 mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $3.m_varDeclarations), $4.m_varDeclarations), 954 mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $3.m_funcDeclarations), $4.m_funcDeclarations), 955 $2.m_featureInfo | $3.m_featureInfo | $4.m_featureInfo); } 921 956 ; 922 957 923 958 CaseClausesOpt: 924 /* nothing */ { $$.m_node.head = 0; $$.m_node.tail = 0; $$.m_varDeclarations = 0; $$.m_funcDeclarations= 0; }959 /* nothing */ { $$.m_node.head = 0; $$.m_node.tail = 0; $$.m_varDeclarations = 0; $$.m_funcDeclarations = 0; $$.m_featureInfo = 0; } 925 960 | CaseClauses 926 961 ; … … 930 965 $$.m_node.tail = $$.m_node.head; 931 966 $$.m_varDeclarations = $1.m_varDeclarations; 932 $$.m_funcDeclarations = $1.m_funcDeclarations; } 967 $$.m_funcDeclarations = $1.m_funcDeclarations; 968 $$.m_featureInfo = $1.m_featureInfo; } 933 969 | CaseClauses CaseClause { $$.m_node.head = $1.m_node.head; 934 970 $$.m_node.tail = new ClauseListNode($1.m_node.tail, $2.m_node); 935 971 $$.m_varDeclarations = mergeDeclarationLists($1.m_varDeclarations, $2.m_varDeclarations); 936 972 $$.m_funcDeclarations = mergeDeclarationLists($1.m_funcDeclarations, $2.m_funcDeclarations); 973 $$.m_featureInfo = $1.m_featureInfo | $2.m_featureInfo; 937 974 } 938 975 ; 939 976 940 977 CaseClause: 941 CASE Expr ':' { $$ = createNode Info<CaseClauseNode*>(new CaseClauseNode($2), 0, 0); }942 | CASE Expr ':' SourceElements { $$ = createNode Info<CaseClauseNode*>(new CaseClauseNode($2, $4.m_node), $4.m_varDeclarations, $4.m_funcDeclarations); }978 CASE Expr ':' { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode($2.m_node), 0, 0, $2.m_featureInfo); } 979 | CASE Expr ':' SourceElements { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode($2.m_node, $4.m_node), $4.m_varDeclarations, $4.m_funcDeclarations, $2.m_featureInfo | $4.m_featureInfo); } 943 980 ; 944 981 945 982 DefaultClause: 946 DEFAULT ':' { $$ = createNode Info<CaseClauseNode*>(new CaseClauseNode(0), 0, 0); }947 | DEFAULT ':' SourceElements { $$ = createNode Info<CaseClauseNode*>(new CaseClauseNode(0, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations); }983 DEFAULT ':' { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(0), 0, 0, 0); } 984 | DEFAULT ':' SourceElements { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(0, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); } 948 985 ; 949 986 950 987 LabelledStatement: 951 988 IDENT ':' Statement { $3.m_node->pushLabel(*$1); 952 $$ = createNode Info<StatementNode*>(new LabelNode(*$1, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations); }989 $$ = createNodeDeclarationInfo<StatementNode*>(new LabelNode(*$1, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); } 953 990 ; 954 991 955 992 ThrowStatement: 956 THROW Expr ';' { $$ = createNode Info<StatementNode*>(new ThrowNode($2), 0, 0); DBG($$.m_node, @1, @3); }957 | THROW Expr error { $$ = createNode Info<StatementNode*>(new ThrowNode($2), 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }993 THROW Expr ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); } 994 | THROW Expr error { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; } 958 995 ; 959 996 960 997 TryStatement: 961 TRY Block FINALLY Block { $$ = createNodeInfo<StatementNode*>(new TryNode($2.m_node, CommonIdentifiers::shared()->nullIdentifier, 0, $4.m_node), 962 mergeDeclarationLists($2.m_varDeclarations, $4.m_varDeclarations), 963 mergeDeclarationLists($2.m_funcDeclarations, $4.m_funcDeclarations)); 998 TRY Block FINALLY Block { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, CommonIdentifiers::shared()->nullIdentifier, 0, $4.m_node), 999 mergeDeclarationLists($2.m_varDeclarations, $4.m_varDeclarations), 1000 mergeDeclarationLists($2.m_funcDeclarations, $4.m_funcDeclarations), 1001 $2.m_featureInfo | $4.m_featureInfo); 964 1002 DBG($$.m_node, @1, @2); } 965 | TRY Block CATCH '(' IDENT ')' Block { $$ = createNodeInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, 0), 966 mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations), 967 mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations)); 1003 | TRY Block CATCH '(' IDENT ')' Block { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, 0), 1004 mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations), 1005 mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations), 1006 $2.m_featureInfo | $7.m_featureInfo); 968 1007 DBG($$.m_node, @1, @2); } 969 1008 | TRY Block CATCH '(' IDENT ')' Block FINALLY Block 970 { $$ = createNodeInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, $9.m_node), 971 mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations), $9.m_varDeclarations), 972 mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations), $9.m_funcDeclarations)); 1009 { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, $9.m_node), 1010 mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations), $9.m_varDeclarations), 1011 mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations), $9.m_funcDeclarations), 1012 $2.m_featureInfo | $7.m_featureInfo | $9.m_featureInfo); 973 1013 DBG($$.m_node, @1, @2); } 974 1014 ; 975 1015 976 1016 DebuggerStatement: 977 DEBUGGER ';' { $$ = createNode Info<StatementNode*>(new EmptyStatementNode(), 0, 0);1017 DEBUGGER ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0); 978 1018 DBG($$.m_node, @1, @2); } 979 | DEBUGGER error { $$ = createNode Info<StatementNode*>(new EmptyStatementNode(), 0, 0);1019 | DEBUGGER error { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0); 980 1020 DBG($$.m_node, @1, @1); AUTO_SEMICOLON; } 981 1021 ; … … 988 1028 989 1029 FunctionExpr: 990 FUNCTION '(' ')' '{' FunctionBody '}' { $$ = new FuncExprNode(CommonIdentifiers::shared()->nullIdentifier, $5); DBG($5, @4, @6); }991 | FUNCTION '(' FormalParameterList ')' '{' FunctionBody '}' { $$ = new FuncExprNode(CommonIdentifiers::shared()->nullIdentifier, $6, $3.head); DBG($6, @5, @7); }992 | FUNCTION IDENT '(' ')' '{' FunctionBody '}' { $$ = new FuncExprNode(*$2, $6); DBG($6, @5, @7); }993 | FUNCTION IDENT '(' FormalParameterList ')' '{' FunctionBody '}' { $$ = new FuncExprNode(*$2, $7, $4.head); DBG($7, @6, @8); }1030 FUNCTION '(' ')' '{' FunctionBody '}' { $$ = createNodeFeatureInfo(new FuncExprNode(CommonIdentifiers::shared()->nullIdentifier, $5), ClosureFeature); DBG($5, @4, @6); } 1031 | FUNCTION '(' FormalParameterList ')' '{' FunctionBody '}' { $$ = createNodeFeatureInfo(new FuncExprNode(CommonIdentifiers::shared()->nullIdentifier, $6, $3.head), ClosureFeature); DBG($6, @5, @7); } 1032 | FUNCTION IDENT '(' ')' '{' FunctionBody '}' { $$ = createNodeFeatureInfo(new FuncExprNode(*$2, $6), ClosureFeature); DBG($6, @5, @7); } 1033 | FUNCTION IDENT '(' FormalParameterList ')' '{' FunctionBody '}' { $$ = createNodeFeatureInfo(new FuncExprNode(*$2, $7, $4.head), ClosureFeature); DBG($7, @6, @8); } 994 1034 ; 995 1035 … … 1002 1042 1003 1043 FunctionBody: 1004 /* not in spec */ { $$ = FunctionBodyNode::create(0, 0, 0 ); }1044 /* not in spec */ { $$ = FunctionBodyNode::create(0, 0, 0, false, false); } 1005 1045 | SourceElements { $$ = FunctionBodyNode::create($1.m_node, $1.m_varDeclarations ? &$1.m_varDeclarations->data : 0, 1006 $1.m_funcDeclarations ? &$1.m_funcDeclarations->data : 0); 1046 $1.m_funcDeclarations ? &$1.m_funcDeclarations->data : 0, 1047 ($1.m_featureInfo & EvalFeature) != 0, ($1.m_featureInfo & ClosureFeature) != 0); 1007 1048 // As in mergeDeclarationLists() we have to ref/deref to safely get rid of 1008 1049 // the declaration lists. … … 1019 1060 1020 1061 Program: 1021 /* not in spec */ { parser().didFinishParsing(0, 0, 0, @0.last_line); } 1022 | SourceElements { parser().didFinishParsing($1.m_node, $1.m_varDeclarations, $1.m_funcDeclarations, @1.last_line); } 1062 /* not in spec */ { parser().didFinishParsing(0, 0, 0, false, false, @0.last_line); } 1063 | SourceElements { parser().didFinishParsing($1.m_node, $1.m_varDeclarations, $1.m_funcDeclarations, 1064 ($1.m_featureInfo & EvalFeature) != 0, ($1.m_featureInfo & ClosureFeature) != 0, 1065 @1.last_line); } 1023 1066 ; 1024 1067 … … 1028 1071 $$.m_varDeclarations = $1.m_varDeclarations; 1029 1072 $$.m_funcDeclarations = $1.m_funcDeclarations; 1073 $$.m_featureInfo = $1.m_featureInfo; 1030 1074 } 1031 1075 | SourceElements SourceElement { $$.m_node->append($2.m_node); 1032 1076 $$.m_varDeclarations = mergeDeclarationLists($1.m_varDeclarations, $2.m_varDeclarations); 1033 1077 $$.m_funcDeclarations = mergeDeclarationLists($1.m_funcDeclarations, $2.m_funcDeclarations); 1078 $$.m_featureInfo = $1.m_featureInfo | $2.m_featureInfo; 1034 1079 } 1035 1080 ; 1036 1081 1037 1082 SourceElement: 1038 FunctionDeclaration { $$ = createNode Info<StatementNode*>($1, 0, new ParserRefCountedData<DeclarationStacks::FunctionStack>); $$.m_funcDeclarations->data.append($1); }1083 FunctionDeclaration { $$ = createNodeDeclarationInfo<StatementNode*>($1, 0, new ParserRefCountedData<DeclarationStacks::FunctionStack>, ClosureFeature); $$.m_funcDeclarations->data.append($1); } 1039 1084 | Statement { $$ = $1; } 1040 1085 ; … … 1154 1199 } 1155 1200 1156 static ExpressionNode* makeFunctionCallNode(ExpressionNode* func, ArgumentsNode* args) 1157 { 1158 if (!func->isLocation()) 1159 return new FunctionCallValueNode(func, args); 1160 if (func->isResolveNode()) { 1161 ResolveNode* resolve = static_cast<ResolveNode*>(func); 1201 static ExpressionNodeInfo makeFunctionCallNode(ExpressionNodeInfo func, ArgumentsNodeInfo args) 1202 { 1203 FeatureInfo features = func.m_featureInfo | args.m_featureInfo; 1204 if (!func.m_node->isLocation()) 1205 return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallValueNode(func.m_node, args.m_node), features); 1206 if (func.m_node->isResolveNode()) { 1207 ResolveNode* resolve = static_cast<ResolveNode*>(func.m_node); 1162 1208 const Identifier& identifier = resolve->identifier(); 1163 1209 if (identifier == CommonIdentifiers::shared()->eval) 1164 return new EvalFunctionCallNode(args);1165 return new FunctionCallResolveNode(identifier, args);1210 return createNodeFeatureInfo<ExpressionNode*>(new EvalFunctionCallNode(args.m_node), EvalFeature | features); 1211 return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallResolveNode(identifier, args.m_node), features); 1166 1212 } 1167 if (func ->isBracketAccessorNode()) {1168 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(func );1169 return new FunctionCallBracketNode(bracket->base(), bracket->subscript(), args);1213 if (func.m_node->isBracketAccessorNode()) { 1214 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(func.m_node); 1215 return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallBracketNode(bracket->base(), bracket->subscript(), args.m_node), features); 1170 1216 } 1171 ASSERT(func ->isDotAccessorNode());1172 DotAccessorNode* dot = static_cast<DotAccessorNode*>(func );1173 return new FunctionCallDotNode(dot->base(), dot->identifier(), args);1217 ASSERT(func.m_node->isDotAccessorNode()); 1218 DotAccessorNode* dot = static_cast<DotAccessorNode*>(func.m_node); 1219 return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallDotNode(dot->base(), dot->identifier(), args.m_node), features); 1174 1220 } 1175 1221 -
trunk/JavaScriptCore/kjs/nodes.cpp
r30871 r31072 47 47 class FunctionBodyNodeWithDebuggerHooks : public FunctionBodyNode { 48 48 public: 49 FunctionBodyNodeWithDebuggerHooks(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;49 FunctionBodyNodeWithDebuggerHooks(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 50 50 virtual JSValue* execute(ExecState*) KJS_FAST_CALL; 51 51 }; … … 4346 4346 // ------------------------------ FunctionBodyNode ----------------------------- 4347 4347 4348 ScopeNode::ScopeNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4348 ScopeNode::ScopeNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4349 4349 : BlockNode(children) 4350 4350 , m_sourceURL(parser().sourceURL()) 4351 4351 , m_sourceId(parser().sourceId()) 4352 , m_usesEval(usesEval) 4353 , m_needsClosure(needsClosure) 4352 4354 { 4353 4355 if (varStack) … … 4359 4361 // ------------------------------ ProgramNode ----------------------------- 4360 4362 4361 ProgramNode::ProgramNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4362 : ScopeNode(children, varStack, funcStack )4363 { 4364 } 4365 4366 ProgramNode* ProgramNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4367 { 4368 return new ProgramNode(children, varStack, funcStack );4363 ProgramNode::ProgramNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4364 : ScopeNode(children, varStack, funcStack, usesEval, needsClosure) 4365 { 4366 } 4367 4368 ProgramNode* ProgramNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4369 { 4370 return new ProgramNode(children, varStack, funcStack, usesEval, needsClosure); 4369 4371 } 4370 4372 4371 4373 // ------------------------------ EvalNode ----------------------------- 4372 4374 4373 EvalNode::EvalNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4374 : ScopeNode(children, varStack, funcStack )4375 { 4376 } 4377 4378 EvalNode* EvalNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4379 { 4380 return new EvalNode(children, varStack, funcStack );4375 EvalNode::EvalNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4376 : ScopeNode(children, varStack, funcStack, usesEval, needsClosure) 4377 { 4378 } 4379 4380 EvalNode* EvalNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4381 { 4382 return new EvalNode(children, varStack, funcStack, usesEval, needsClosure); 4381 4383 } 4382 4384 4383 4385 // ------------------------------ FunctionBodyNode ----------------------------- 4384 4386 4385 FunctionBodyNode::FunctionBodyNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4386 : ScopeNode(children, varStack, funcStack )4387 FunctionBodyNode::FunctionBodyNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4388 : ScopeNode(children, varStack, funcStack, usesEval, needsClosure) 4387 4389 , m_initialized(false) 4388 4390 { 4389 4391 } 4390 4392 4391 FunctionBodyNode* FunctionBodyNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack )4393 FunctionBodyNode* FunctionBodyNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure) 4392 4394 { 4393 4395 if (Debugger::debuggersPresent) 4394 return new FunctionBodyNodeWithDebuggerHooks(children, varStack, funcStack );4395 return new FunctionBodyNode(children, varStack, funcStack );4396 return new FunctionBodyNodeWithDebuggerHooks(children, varStack, funcStack, usesEval, needsClosure); 4397 return new FunctionBodyNode(children, varStack, funcStack, usesEval, needsClosure); 4396 4398 } 4397 4399 … … 4648 4650 // ------------------------------ FunctionBodyNodeWithDebuggerHooks --------------------------------- 4649 4651 4650 FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks(SourceElements* children, DeclarationStacks::VarStack* varStack, DeclarationStacks::FunctionStack* funcStack )4651 : FunctionBodyNode(children, varStack, funcStack )4652 FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks(SourceElements* children, DeclarationStacks::VarStack* varStack, DeclarationStacks::FunctionStack* funcStack, bool usesEval, bool needsClosure) 4653 : FunctionBodyNode(children, varStack, funcStack, usesEval, needsClosure) 4652 4654 { 4653 4655 } -
trunk/JavaScriptCore/kjs/nodes.h
r30871 r31072 2675 2675 class ScopeNode : public BlockNode { 2676 2676 public: 2677 ScopeNode(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2677 ScopeNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2678 2678 2679 2679 int sourceId() const KJS_FAST_CALL { return m_sourceId; } 2680 2680 const UString& sourceURL() const KJS_FAST_CALL { return m_sourceURL; } 2681 2681 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 2682 2682 2683 bool usesEval() const { return m_usesEval; } 2684 bool needsClosure() const { return m_needsClosure; } 2685 2683 2686 protected: 2684 2687 void optimizeVariableAccess(ExecState*) KJS_FAST_CALL; … … 2686 2689 VarStack m_varStack; 2687 2690 FunctionStack m_functionStack; 2688 2689 2691 private: 2690 2692 UString m_sourceURL; 2691 2693 int m_sourceId; 2694 bool m_usesEval; 2695 bool m_needsClosure; 2692 2696 }; 2693 2697 2694 2698 class ProgramNode : public ScopeNode { 2695 2699 public: 2696 static ProgramNode* create(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2700 static ProgramNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2697 2701 2698 2702 virtual JSValue* execute(ExecState*) KJS_FAST_CALL; 2699 2703 2700 2704 private: 2701 ProgramNode(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2705 ProgramNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2702 2706 2703 2707 void initializeSymbolTable(ExecState*) KJS_FAST_CALL; … … 2710 2714 class EvalNode : public ScopeNode { 2711 2715 public: 2712 static EvalNode* create(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2716 static EvalNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2713 2717 2714 2718 virtual JSValue* execute(ExecState*) KJS_FAST_CALL; 2715 2719 2716 2720 private: 2717 EvalNode(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2721 EvalNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2718 2722 2719 2723 ALWAYS_INLINE void processDeclarations(ExecState*) KJS_FAST_CALL; … … 2722 2726 class FunctionBodyNode : public ScopeNode { 2723 2727 public: 2724 static FunctionBodyNode* create(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2728 static FunctionBodyNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2725 2729 2726 2730 virtual JSValue* execute(ExecState*) KJS_FAST_CALL; … … 2732 2736 2733 2737 protected: 2734 FunctionBodyNode(SourceElements*, VarStack*, FunctionStack* ) KJS_FAST_CALL;2738 FunctionBodyNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL; 2735 2739 2736 2740 private:
Note:
See TracChangeset
for help on using the changeset viewer.