Changeset 45106 in webkit for trunk/JavaScriptCore/parser
- Timestamp:
- Jun 24, 2009, 3:01:34 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/parser
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Grammar.y
r44224 r45106 81 81 static ExpressionNode* makeRightShiftNode(void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments); 82 82 static StatementNode* makeVarStatementNode(void*, ExpressionNode*); 83 static ExpressionNode* combine VarInitializers(void*, ExpressionNode* list, AssignResolveNode* init);83 static ExpressionNode* combineCommaNodes(void*, ExpressionNode* list, ExpressionNode* init); 84 84 85 85 #if COMPILER(MSVC) … … 779 779 Expr: 780 780 AssignmentExpr 781 | Expr ',' AssignmentExpr { $$ = createNodeInfo<ExpressionNode*>( new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }781 | Expr ',' AssignmentExpr { $$ = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); } 782 782 ; 783 783 784 784 ExprNoIn: 785 785 AssignmentExprNoIn 786 | ExprNoIn ',' AssignmentExprNoIn { $$ = createNodeInfo<ExpressionNode*>( new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }786 | ExprNoIn ',' AssignmentExprNoIn { $$ = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); } 787 787 ; 788 788 789 789 ExprNoBF: 790 790 AssignmentExprNoBF 791 | ExprNoBF ',' AssignmentExpr { $$ = createNodeInfo<ExpressionNode*>( new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }791 | ExprNoBF ',' AssignmentExpr { $$ = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); } 792 792 ; 793 793 … … 855 855 { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *$3, $4.m_node, $4.m_features & AssignFeature); 856 856 SET_EXCEPTION_LOCATION(node, @3.first_column, @4.first_column + 1, @4.last_column); 857 $$.m_node = combine VarInitializers(GLOBAL_DATA, $1.m_node, node);857 $$.m_node = combineCommaNodes(GLOBAL_DATA, $1.m_node, node); 858 858 $$.m_varDeclarations = $1.m_varDeclarations; 859 859 appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer); … … 892 892 { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *$3, $4.m_node, $4.m_features & AssignFeature); 893 893 SET_EXCEPTION_LOCATION(node, @3.first_column, @4.first_column + 1, @4.last_column); 894 $$.m_node = combine VarInitializers(GLOBAL_DATA, $1.m_node, node);894 $$.m_node = combineCommaNodes(GLOBAL_DATA, $1.m_node, node); 895 895 $$.m_varDeclarations = $1.m_varDeclarations; 896 896 appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer); … … 2072 2072 } 2073 2073 2074 static ExpressionNode* combine VarInitializers(void* globalPtr, ExpressionNode* list, AssignResolveNode* init)2074 static ExpressionNode* combineCommaNodes(void* globalPtr, ExpressionNode* list, ExpressionNode* init) 2075 2075 { 2076 2076 if (!list) 2077 2077 return init; 2078 if (list->isCommaNode()) { 2079 static_cast<CommaNode*>(list)->append(init); 2080 return list; 2081 } 2078 2082 return new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, list, init); 2079 2083 } -
trunk/JavaScriptCore/parser/NodeConstructors.h
r44224 r45106 660 660 inline CommaNode::CommaNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) 661 661 : ExpressionNode(globalData) 662 , m_expr1(expr1)663 , m_expr2(expr2)664 {662 { 663 m_expressions.append(expr1); 664 m_expressions.append(expr2); 665 665 } 666 666 -
trunk/JavaScriptCore/parser/Nodes.cpp
r45066 r45106 1187 1187 RegisterID* CommaNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 1188 1188 { 1189 generator.emitNode(generator.ignoredResult(), m_expr1); 1190 return generator.emitNode(dst, m_expr2); 1189 ASSERT(m_expressions.size() > 1); 1190 for (size_t i = 0; i < m_expressions.size() - 1; i++) 1191 generator.emitNode(generator.ignoredResult(), m_expressions[i]); 1192 return generator.emitNode(dst, m_expressions.last()); 1191 1193 } 1192 1194 -
trunk/JavaScriptCore/parser/Nodes.h
r44844 r45106 170 170 virtual bool isBracketAccessorNode() const { return false; } 171 171 virtual bool isDotAccessorNode() const { return false; } 172 virtual bool isFuncExprNode() const { return false; } 172 virtual bool isFuncExprNode() const { return false; } 173 virtual bool isCommaNode() const { return false; } 173 174 virtual bool isSimpleArray() const { return false; } 174 175 virtual bool isAdd() const { return false; } … … 1088 1089 ExpressionNode* m_right; 1089 1090 }; 1091 1092 typedef Vector<ExpressionNode*, 8> ExpressionVector; 1090 1093 1091 1094 class CommaNode : public ExpressionNode { … … 1093 1096 CommaNode(JSGlobalData*, ExpressionNode* expr1, ExpressionNode* expr2); 1094 1097 1095 private: 1096 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 1097 1098 ExpressionNode* m_expr1; 1099 ExpressionNode* m_expr2; 1098 void append(ExpressionNode* expr) { m_expressions.append(expr); } 1099 1100 private: 1101 virtual bool isCommaNode() const { return true; } 1102 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0); 1103 1104 ExpressionVector m_expressions; 1100 1105 }; 1101 1106
Note:
See TracChangeset
for help on using the changeset viewer.