Changeset 34791 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Jun 25, 2008, 12:07:38 AM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Geoff.

Remove more threadInstance() calls.

  • kjs/JSFunction.cpp: (KJS::JSFunction::getParameterName): (KJS::IndexToNameMap::unMap): (KJS::Arguments::deleteProperty):
  • kjs/JSFunction.h: Access nullIdentifier without going to thread specific storage.
  • JavaScriptCore.exp:
  • kjs/JSGlobalData.cpp: (KJS::JSGlobalData::JSGlobalData):
  • kjs/JSGlobalData.h:
  • kjs/Parser.cpp: (KJS::Parser::parse):
  • kjs/Parser.h: (KJS::ParserRefCountedData::ParserRefCountedData): (KJS::Parser::parse):
  • kjs/grammar.y:
  • kjs/nodes.cpp: (KJS::ParserRefCounted::ParserRefCounted): (KJS::ParserRefCounted::ref): (KJS::ParserRefCounted::deref): (KJS::ParserRefCounted::hasOneRef): (KJS::ParserRefCounted::deleteNewObjects): (KJS::Node::Node): (KJS::StatementNode::StatementNode): (KJS::BreakpointCheckStatement::BreakpointCheckStatement): (KJS::ConstDeclNode::ConstDeclNode): (KJS::BlockNode::BlockNode): (KJS::ForInNode::ForInNode): (KJS::ScopeNode::ScopeNode): (KJS::ProgramNode::ProgramNode): (KJS::ProgramNode::create): (KJS::EvalNode::EvalNode): (KJS::EvalNode::create): (KJS::FunctionBodyNode::FunctionBodyNode): (KJS::FunctionBodyNode::create):
  • kjs/nodes.h: (KJS::ExpressionNode::): (KJS::NullNode::): (KJS::BooleanNode::): (KJS::NumberNode::): (KJS::ImmediateNumberNode::): (KJS::StringNode::): (KJS::RegExpNode::): (KJS::ThisNode::): (KJS::ResolveNode::): (KJS::ElementNode::): (KJS::ArrayNode::): (KJS::PropertyNode::): (KJS::PropertyListNode::): (KJS::ObjectLiteralNode::): (KJS::BracketAccessorNode::): (KJS::DotAccessorNode::): (KJS::ArgumentListNode::): (KJS::ArgumentsNode::): (KJS::NewExprNode::): (KJS::EvalFunctionCallNode::): (KJS::FunctionCallValueNode::): (KJS::FunctionCallResolveNode::): (KJS::FunctionCallBracketNode::): (KJS::FunctionCallDotNode::): (KJS::PrePostResolveNode::): (KJS::PostIncResolveNode::): (KJS::PostDecResolveNode::): (KJS::PostfixBracketNode::): (KJS::PostIncBracketNode::): (KJS::PostDecBracketNode::): (KJS::PostfixDotNode::): (KJS::PostIncDotNode::): (KJS::PostDecDotNode::): (KJS::PostfixErrorNode::): (KJS::DeleteResolveNode::): (KJS::DeleteBracketNode::): (KJS::DeleteDotNode::): (KJS::DeleteValueNode::): (KJS::VoidNode::): (KJS::TypeOfResolveNode::): (KJS::TypeOfValueNode::): (KJS::PreIncResolveNode::): (KJS::PreDecResolveNode::): (KJS::PrefixBracketNode::): (KJS::PreIncBracketNode::): (KJS::PreDecBracketNode::): (KJS::PrefixDotNode::): (KJS::PreIncDotNode::): (KJS::PreDecDotNode::): (KJS::PrefixErrorNode::): (KJS::UnaryOpNode::UnaryOpNode): (KJS::UnaryPlusNode::): (KJS::NegateNode::): (KJS::BitwiseNotNode::): (KJS::LogicalNotNode::): (KJS::BinaryOpNode::BinaryOpNode): (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): (KJS::MultNode::): (KJS::DivNode::): (KJS::ModNode::): (KJS::AddNode::): (KJS::SubNode::): (KJS::LeftShiftNode::): (KJS::RightShiftNode::): (KJS::UnsignedRightShiftNode::): (KJS::LessNode::): (KJS::GreaterNode::): (KJS::LessEqNode::): (KJS::GreaterEqNode::): (KJS::InstanceOfNode::): (KJS::InNode::): (KJS::EqualNode::): (KJS::NotEqualNode::): (KJS::StrictEqualNode::): (KJS::NotStrictEqualNode::): (KJS::BitAndNode::): (KJS::BitOrNode::): (KJS::BitXOrNode::): (KJS::LogicalAndNode::): (KJS::LogicalOrNode::): (KJS::ConditionalNode::): (KJS::ReadModifyResolveNode::): (KJS::AssignResolveNode::): (KJS::ReadModifyBracketNode::): (KJS::AssignBracketNode::): (KJS::AssignDotNode::): (KJS::ReadModifyDotNode::): (KJS::AssignErrorNode::): (KJS::CommaNode::): (KJS::VarDeclCommaNode::): (KJS::ConstStatementNode::): (KJS::SourceElements::SourceElements): (KJS::EmptyStatementNode::): (KJS::DebuggerStatementNode::): (KJS::ExprStatementNode::): (KJS::VarStatementNode::): (KJS::IfNode::): (KJS::IfElseNode::): (KJS::DoWhileNode::): (KJS::WhileNode::): (KJS::ForNode::): (KJS::ContinueNode::): (KJS::BreakNode::): (KJS::ReturnNode::): (KJS::WithNode::): (KJS::LabelNode::): (KJS::ThrowNode::): (KJS::TryNode::): (KJS::ParameterNode::): (KJS::FuncExprNode::): (KJS::FuncDeclNode::): (KJS::CaseClauseNode::): (KJS::ClauseListNode::): (KJS::CaseBlockNode::): (KJS::SwitchNode::): Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace threadInstance calls.
Location:
trunk/JavaScriptCore
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r34790 r34791  
     12008-06-25  Alexey Proskuryakov  <[email protected]>
     2
     3        Reviewed by Geoff.
     4
     5        Remove more threadInstance() calls.
     6
     7        * kjs/JSFunction.cpp:
     8        (KJS::JSFunction::getParameterName):
     9        (KJS::IndexToNameMap::unMap):
     10        (KJS::Arguments::deleteProperty):
     11        * kjs/JSFunction.h:
     12        Access nullIdentifier without going to thread specific storage.
     13
     14        * JavaScriptCore.exp:
     15        * kjs/JSGlobalData.cpp:
     16        (KJS::JSGlobalData::JSGlobalData):
     17        * kjs/JSGlobalData.h:
     18        * kjs/Parser.cpp:
     19        (KJS::Parser::parse):
     20        * kjs/Parser.h:
     21        (KJS::ParserRefCountedData::ParserRefCountedData):
     22        (KJS::Parser::parse):
     23        * kjs/grammar.y:
     24        * kjs/nodes.cpp:
     25        (KJS::ParserRefCounted::ParserRefCounted):
     26        (KJS::ParserRefCounted::ref):
     27        (KJS::ParserRefCounted::deref):
     28        (KJS::ParserRefCounted::hasOneRef):
     29        (KJS::ParserRefCounted::deleteNewObjects):
     30        (KJS::Node::Node):
     31        (KJS::StatementNode::StatementNode):
     32        (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
     33        (KJS::ConstDeclNode::ConstDeclNode):
     34        (KJS::BlockNode::BlockNode):
     35        (KJS::ForInNode::ForInNode):
     36        (KJS::ScopeNode::ScopeNode):
     37        (KJS::ProgramNode::ProgramNode):
     38        (KJS::ProgramNode::create):
     39        (KJS::EvalNode::EvalNode):
     40        (KJS::EvalNode::create):
     41        (KJS::FunctionBodyNode::FunctionBodyNode):
     42        (KJS::FunctionBodyNode::create):
     43        * kjs/nodes.h:
     44        (KJS::ExpressionNode::):
     45        (KJS::NullNode::):
     46        (KJS::BooleanNode::):
     47        (KJS::NumberNode::):
     48        (KJS::ImmediateNumberNode::):
     49        (KJS::StringNode::):
     50        (KJS::RegExpNode::):
     51        (KJS::ThisNode::):
     52        (KJS::ResolveNode::):
     53        (KJS::ElementNode::):
     54        (KJS::ArrayNode::):
     55        (KJS::PropertyNode::):
     56        (KJS::PropertyListNode::):
     57        (KJS::ObjectLiteralNode::):
     58        (KJS::BracketAccessorNode::):
     59        (KJS::DotAccessorNode::):
     60        (KJS::ArgumentListNode::):
     61        (KJS::ArgumentsNode::):
     62        (KJS::NewExprNode::):
     63        (KJS::EvalFunctionCallNode::):
     64        (KJS::FunctionCallValueNode::):
     65        (KJS::FunctionCallResolveNode::):
     66        (KJS::FunctionCallBracketNode::):
     67        (KJS::FunctionCallDotNode::):
     68        (KJS::PrePostResolveNode::):
     69        (KJS::PostIncResolveNode::):
     70        (KJS::PostDecResolveNode::):
     71        (KJS::PostfixBracketNode::):
     72        (KJS::PostIncBracketNode::):
     73        (KJS::PostDecBracketNode::):
     74        (KJS::PostfixDotNode::):
     75        (KJS::PostIncDotNode::):
     76        (KJS::PostDecDotNode::):
     77        (KJS::PostfixErrorNode::):
     78        (KJS::DeleteResolveNode::):
     79        (KJS::DeleteBracketNode::):
     80        (KJS::DeleteDotNode::):
     81        (KJS::DeleteValueNode::):
     82        (KJS::VoidNode::):
     83        (KJS::TypeOfResolveNode::):
     84        (KJS::TypeOfValueNode::):
     85        (KJS::PreIncResolveNode::):
     86        (KJS::PreDecResolveNode::):
     87        (KJS::PrefixBracketNode::):
     88        (KJS::PreIncBracketNode::):
     89        (KJS::PreDecBracketNode::):
     90        (KJS::PrefixDotNode::):
     91        (KJS::PreIncDotNode::):
     92        (KJS::PreDecDotNode::):
     93        (KJS::PrefixErrorNode::):
     94        (KJS::UnaryOpNode::UnaryOpNode):
     95        (KJS::UnaryPlusNode::):
     96        (KJS::NegateNode::):
     97        (KJS::BitwiseNotNode::):
     98        (KJS::LogicalNotNode::):
     99        (KJS::BinaryOpNode::BinaryOpNode):
     100        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
     101        (KJS::MultNode::):
     102        (KJS::DivNode::):
     103        (KJS::ModNode::):
     104        (KJS::AddNode::):
     105        (KJS::SubNode::):
     106        (KJS::LeftShiftNode::):
     107        (KJS::RightShiftNode::):
     108        (KJS::UnsignedRightShiftNode::):
     109        (KJS::LessNode::):
     110        (KJS::GreaterNode::):
     111        (KJS::LessEqNode::):
     112        (KJS::GreaterEqNode::):
     113        (KJS::InstanceOfNode::):
     114        (KJS::InNode::):
     115        (KJS::EqualNode::):
     116        (KJS::NotEqualNode::):
     117        (KJS::StrictEqualNode::):
     118        (KJS::NotStrictEqualNode::):
     119        (KJS::BitAndNode::):
     120        (KJS::BitOrNode::):
     121        (KJS::BitXOrNode::):
     122        (KJS::LogicalAndNode::):
     123        (KJS::LogicalOrNode::):
     124        (KJS::ConditionalNode::):
     125        (KJS::ReadModifyResolveNode::):
     126        (KJS::AssignResolveNode::):
     127        (KJS::ReadModifyBracketNode::):
     128        (KJS::AssignBracketNode::):
     129        (KJS::AssignDotNode::):
     130        (KJS::ReadModifyDotNode::):
     131        (KJS::AssignErrorNode::):
     132        (KJS::CommaNode::):
     133        (KJS::VarDeclCommaNode::):
     134        (KJS::ConstStatementNode::):
     135        (KJS::SourceElements::SourceElements):
     136        (KJS::EmptyStatementNode::):
     137        (KJS::DebuggerStatementNode::):
     138        (KJS::ExprStatementNode::):
     139        (KJS::VarStatementNode::):
     140        (KJS::IfNode::):
     141        (KJS::IfElseNode::):
     142        (KJS::DoWhileNode::):
     143        (KJS::WhileNode::):
     144        (KJS::ForNode::):
     145        (KJS::ContinueNode::):
     146        (KJS::BreakNode::):
     147        (KJS::ReturnNode::):
     148        (KJS::WithNode::):
     149        (KJS::LabelNode::):
     150        (KJS::ThrowNode::):
     151        (KJS::TryNode::):
     152        (KJS::ParameterNode::):
     153        (KJS::FuncExprNode::):
     154        (KJS::FuncDeclNode::):
     155        (KJS::CaseClauseNode::):
     156        (KJS::ClauseListNode::):
     157        (KJS::CaseBlockNode::):
     158        (KJS::SwitchNode::):
     159        Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
     160        threadInstance calls.
     161
    11622008-06-24  Cameron Zwarich  <[email protected]>
    2163
  • trunk/JavaScriptCore/JavaScriptCore.exp

    r34754 r34791  
    9292__ZN3KJS11JSImmediate8toStringEPKNS_7JSValueE
    9393__ZN3KJS11ProfileNode4sortEPFbRKN3WTF6RefPtrIS0_EES5_E
    94 __ZN3KJS11ProgramNode6createEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS4_INS3_6RefPtrINS_12FuncDeclNodeEEELm16EEEbb
     94__ZN3KJS11ProgramNode6createEPNS_12JSGlobalDataEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS6_INS5_6RefPtrINS_12FuncDeclNodeEEELm16EEEbb
    9595__ZN3KJS11PropertyMap11getLocationERKNS_10IdentifierE
    9696__ZN3KJS11PropertyMap11getLocationERKNS_10IdentifierERb
  • trunk/JavaScriptCore/kjs/JSFunction.cpp

    r34754 r34791  
    164164
    165165    if (static_cast<size_t>(index) >= body->parameters().size())
    166         return JSGlobalData::threadInstance().propertyNames->nullIdentifier;
     166        return _scope.globalObject()->globalData()->propertyNames->nullIdentifier;
    167167 
    168168    const Identifier& name = parameters[index];
     
    172172    for (size_t i = index + 1; i < size; ++i)
    173173        if (parameters[i] == name)
    174             return JSGlobalData::threadInstance().propertyNames->nullIdentifier;
     174            return _scope.globalObject()->globalData()->propertyNames->nullIdentifier;
    175175
    176176    return name;
     
    252252}
    253253
    254 void IndexToNameMap::unMap(const Identifier& index)
     254void IndexToNameMap::unMap(ExecState* exec, const Identifier& index)
    255255{
    256256  bool indexIsNumber;
     
    259259  ASSERT(indexIsNumber && indexAsNumber < size);
    260260 
    261   _map[indexAsNumber] = JSGlobalData::threadInstance().propertyNames->nullIdentifier;
     261  _map[indexAsNumber] = exec->propertyNames().nullIdentifier;
    262262}
    263263
     
    328328{
    329329  if (indexToNameMap.isMapped(propertyName)) {
    330     indexToNameMap.unMap(propertyName);
     330    indexToNameMap.unMap(exec, propertyName);
    331331    return true;
    332332  } else {
  • trunk/JavaScriptCore/kjs/JSFunction.h

    r34754 r34791  
    9898    Identifier& operator[](const Identifier& index);
    9999    bool isMapped(const Identifier& index) const;
    100     void unMap(const Identifier& index);
     100    void unMap(ExecState* exec, const Identifier& index);
    101101   
    102102  private:
  • trunk/JavaScriptCore/kjs/JSGlobalData.cpp

    r34684 r34791  
    7878    , identifierTable(createIdentifierTable())
    7979    , propertyNames(new CommonIdentifiers(this))
     80    , newTrackedObjects(0)
     81    , trackedObjectExtraRefCounts(0)
    8082    , lexer(new Lexer(this))
    8183    , parser(new Parser)
  • trunk/JavaScriptCore/kjs/JSGlobalData.h

    r34684 r34791  
    7373        const ArgList emptyList; // Lists are supposed to be allocated on the stack to have their elements properly marked, which is not the case here - but this list has nothing to mark.
    7474
    75         HashSet<ParserRefCounted*> newTrackedObjects;
    76         HashCountedSet<ParserRefCounted*> trackedObjectExtraRefCounts;
     75        // Tracked object sets are transient, only needed when parsing.
     76        HashSet<ParserRefCounted*>* newTrackedObjects;
     77        HashCountedSet<ParserRefCounted*>* trackedObjectExtraRefCounts;
    7778
    7879        Lexer* lexer;
  • trunk/JavaScriptCore/kjs/Parser.cpp

    r34673 r34791  
    7474    lexer.clear();
    7575
    76     ParserRefCounted::deleteNewObjects();
     76    ParserRefCounted::deleteNewObjects(&exec->globalData());
    7777
    7878    if (parseError || lexError) {
  • trunk/JavaScriptCore/kjs/Parser.h

    r34412 r34791  
    4040
    4141    template <typename T> struct ParserRefCountedData : ParserRefCounted {
     42        ParserRefCountedData(JSGlobalData* globalData)
     43            : ParserRefCounted(globalData)
     44        {
     45        }
     46
    4247        T data;
    4348    };
     
    8489            return 0;
    8590        }
    86         RefPtr<ParsedNode> node = ParsedNode::create(m_sourceElements.release().get(),
     91        RefPtr<ParsedNode> node = ParsedNode::create(&exec->globalData(),
     92                                                     m_sourceElements.release().get(),
    8793                                                     m_varDeclarations ? &m_varDeclarations->data : 0,
    8894                                                     m_funcDeclarations ? &m_funcDeclarations->data : 0,
  • trunk/JavaScriptCore/kjs/grammar.y

    r34615 r34791  
    6363using namespace std;
    6464
    65 static ExpressionNode* makeAssignNode(ExpressionNode* loc, Operator, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments);
    66 static ExpressionNode* makePrefixNode(ExpressionNode* expr, Operator);
    67 static ExpressionNode* makePostfixNode(ExpressionNode* expr, Operator);
     65static ExpressionNode* makeAssignNode(void*, ExpressionNode* loc, Operator, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments);
     66static ExpressionNode* makePrefixNode(void*, ExpressionNode* expr, Operator);
     67static ExpressionNode* makePostfixNode(void*, ExpressionNode* expr, Operator);
    6868static PropertyNode* makeGetterOrSetterPropertyNode(void*, const Identifier &getOrSet, const Identifier& name, ParameterNode*, FunctionBodyNode*, const SourceRange&);
    6969static ExpressionNodeInfo makeFunctionCallNode(void*, ExpressionNodeInfo func, ArgumentsNodeInfo);
    70 static ExpressionNode* makeTypeOfNode(ExpressionNode*);
    71 static ExpressionNode* makeDeleteNode(ExpressionNode*);
    72 static ExpressionNode* makeNegateNode(ExpressionNode*);
    73 static NumberNode* makeNumberNode(double);
    74 static StatementNode* makeVarStatementNode(ExpressionNode*);
    75 static ExpressionNode* combineVarInitializers(ExpressionNode* list, AssignResolveNode* init);
     70static ExpressionNode* makeTypeOfNode(void*, ExpressionNode*);
     71static ExpressionNode* makeDeleteNode(void*, ExpressionNode*);
     72static ExpressionNode* makeNegateNode(void*, ExpressionNode*);
     73static NumberNode* makeNumberNode(void*, double);
     74static StatementNode* makeVarStatementNode(void*, ExpressionNode*);
     75static ExpressionNode* combineVarInitializers(void*, ExpressionNode* list, AssignResolveNode* init);
    7676
    7777
     
    128128}
    129129
    130 static void appendToVarDeclarationList(ParserRefCountedData<DeclarationStacks::VarStack>*& varDecls, const Identifier& ident, unsigned attrs)
     130static void appendToVarDeclarationList(void* globalPtr, ParserRefCountedData<DeclarationStacks::VarStack>*& varDecls, const Identifier& ident, unsigned attrs)
    131131{
    132132    if (!varDecls)
    133         varDecls = new ParserRefCountedData<DeclarationStacks::VarStack>;
     133        varDecls = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
    134134
    135135    varDecls->data.append(make_pair(ident, attrs));
     
    137137}
    138138
    139 static inline void appendToVarDeclarationList(ParserRefCountedData<DeclarationStacks::VarStack>*& varDecls, ConstDeclNode* decl)
     139static inline void appendToVarDeclarationList(void* globalPtr, ParserRefCountedData<DeclarationStacks::VarStack>*& varDecls, ConstDeclNode* decl)
    140140{
    141141    unsigned attrs = DeclarationStacks::IsConstant;
    142142    if (decl->m_init)
    143143        attrs |= DeclarationStacks::HasInitializer;       
    144     appendToVarDeclarationList(varDecls, decl->m_ident, attrs);
     144    appendToVarDeclarationList(globalPtr, varDecls, decl->m_ident, attrs);
    145145}
    146146
     
    279279
    280280Literal:
    281     NULLTOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new NullNode, 0); }
    282   | TRUETOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new BooleanNode(true), 0); }
    283   | FALSETOKEN                          { $$ = createNodeFeatureInfo<ExpressionNode*>(new BooleanNode(false), 0); }
    284   | NUMBER                              { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNumberNode($1), 0); }
    285   | STRING                              { $$ = createNodeFeatureInfo<ExpressionNode*>(new StringNode($1), 0); }
     281    NULLTOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new NullNode(GLOBAL_DATA), 0); }
     282  | TRUETOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new BooleanNode(GLOBAL_DATA, true), 0); }
     283  | FALSETOKEN                          { $$ = createNodeFeatureInfo<ExpressionNode*>(new BooleanNode(GLOBAL_DATA, false), 0); }
     284  | NUMBER                              { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNumberNode(GLOBAL_DATA, $1), 0); }
     285  | STRING                              { $$ = createNodeFeatureInfo<ExpressionNode*>(new StringNode(GLOBAL_DATA, $1), 0); }
    286286  | '/' /* regexp */                    {
    287287                                            Lexer& l = *LEXER;
    288288                                            if (!l.scanRegExp())
    289289                                                YYABORT;
    290                                             $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode(l.pattern(), l.flags()), 0);
     290                                            $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode(GLOBAL_DATA, l.pattern(), l.flags()), 0);
    291291                                        }
    292292  | DIVEQUAL /* regexp with /= */       {
     
    294294                                            if (!l.scanRegExp())
    295295                                                YYABORT;
    296                                             $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode("=" + l.pattern(), l.flags()), 0);
     296                                            $$ = createNodeFeatureInfo<ExpressionNode*>(new RegExpNode(GLOBAL_DATA, "=" + l.pattern(), l.flags()), 0);
    297297                                        }
    298298;
    299299
    300300Property:
    301     IDENT ':' AssignmentExpr            { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(*$1, $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
    302   | STRING ':' AssignmentExpr           { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(Identifier(GLOBAL_DATA, *$1), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
    303   | NUMBER ':' AssignmentExpr           { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(Identifier(GLOBAL_DATA, UString::from($1)), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
     301    IDENT ':' AssignmentExpr            { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(GLOBAL_DATA, *$1, $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
     302  | STRING ':' AssignmentExpr           { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(GLOBAL_DATA, Identifier(GLOBAL_DATA, *$1), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
     303  | NUMBER ':' AssignmentExpr           { $$ = createNodeFeatureInfo<PropertyNode*>(new PropertyNode(GLOBAL_DATA, Identifier(GLOBAL_DATA, UString::from($1)), $3.m_node, PropertyNode::Constant), $3.m_featureInfo); }
    304304  | IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE    { $$ = createNodeFeatureInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(globalPtr, *$1, *$2, 0, $6, LEXER->sourceRange($5, $7)), ClosureFeature); DBG($6, @5, @7); if (!$$.m_node) YYABORT; }
    305305  | IDENT IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
     
    308308
    309309PropertyList:
    310     Property                            { $$.m_node.head = new PropertyListNode($1.m_node);
     310    Property                            { $$.m_node.head = new PropertyListNode(GLOBAL_DATA, $1.m_node);
    311311                                          $$.m_node.tail = $$.m_node.head;
    312312                                          $$.m_featureInfo = $1.m_featureInfo; }
    313313  | PropertyList ',' Property           { $$.m_node.head = $1.m_node.head;
    314                                           $$.m_node.tail = new PropertyListNode($3.m_node, $1.m_node.tail);
     314                                          $$.m_node.tail = new PropertyListNode(GLOBAL_DATA, $3.m_node, $1.m_node.tail);
    315315                                          $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo;  }
    316316;
     
    318318PrimaryExpr:
    319319    PrimaryExprNoBrace
    320   | OPENBRACE CLOSEBRACE                             { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode(), 0); }
    321   | OPENBRACE PropertyList CLOSEBRACE                { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode($2.m_node.head), $2.m_featureInfo); }
     320  | OPENBRACE CLOSEBRACE                             { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode(GLOBAL_DATA), 0); }
     321  | OPENBRACE PropertyList CLOSEBRACE                { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode(GLOBAL_DATA, $2.m_node.head), $2.m_featureInfo); }
    322322  /* allow extra comma, see http://bugs.webkit.org/show_bug.cgi?id=5939 */
    323   | OPENBRACE PropertyList ',' CLOSEBRACE            { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode($2.m_node.head), $2.m_featureInfo); }
     323  | OPENBRACE PropertyList ',' CLOSEBRACE            { $$ = createNodeFeatureInfo<ExpressionNode*>(new ObjectLiteralNode(GLOBAL_DATA, $2.m_node.head), $2.m_featureInfo); }
    324324;
    325325
    326326PrimaryExprNoBrace:
    327     THISTOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new ThisNode(), 0); }
     327    THISTOKEN                           { $$ = createNodeFeatureInfo<ExpressionNode*>(new ThisNode(GLOBAL_DATA), 0); }
    328328  | Literal
    329329  | ArrayLiteral
    330   | IDENT                               { $$ = createNodeFeatureInfo<ExpressionNode*>(new ResolveNode(*$1), 0); }
     330  | IDENT                               { $$ = createNodeFeatureInfo<ExpressionNode*>(new ResolveNode(GLOBAL_DATA, *$1), 0); }
    331331  | '(' Expr ')'                        { $$ = $2; }
    332332;
    333333
    334334ArrayLiteral:
    335     '[' ElisionOpt ']'                  { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($2), 0); }
    336   | '[' ElementList ']'                 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($2.m_node.head), $2.m_featureInfo); }
    337   | '[' ElementList ',' ElisionOpt ']'  { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode($4, $2.m_node.head), $2.m_featureInfo); }
     335    '[' ElisionOpt ']'                  { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode(GLOBAL_DATA, $2), 0); }
     336  | '[' ElementList ']'                 { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode(GLOBAL_DATA, $2.m_node.head), $2.m_featureInfo); }
     337  | '[' ElementList ',' ElisionOpt ']'  { $$ = createNodeFeatureInfo<ExpressionNode*>(new ArrayNode(GLOBAL_DATA, $4, $2.m_node.head), $2.m_featureInfo); }
    338338;
    339339
    340340ElementList:
    341     ElisionOpt AssignmentExpr           { $$.m_node.head = new ElementNode($1, $2.m_node);
     341    ElisionOpt AssignmentExpr           { $$.m_node.head = new ElementNode(GLOBAL_DATA, $1, $2.m_node);
    342342                                          $$.m_node.tail = $$.m_node.head;
    343343                                          $$.m_featureInfo = $2.m_featureInfo; }
    344344  | ElementList ',' ElisionOpt AssignmentExpr
    345345                                        { $$.m_node.head = $1.m_node.head;
    346                                           $$.m_node.tail = new ElementNode($1.m_node.tail, $3, $4.m_node);
     346                                          $$.m_node.tail = new ElementNode(GLOBAL_DATA, $1.m_node.tail, $3, $4.m_node);
    347347                                          $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo; }
    348348;
     
    361361    PrimaryExpr
    362362  | FunctionExpr                        { $$ = createNodeFeatureInfo<ExpressionNode*>($1.m_node, $1.m_featureInfo); }
    363   | MemberExpr '[' Expr ']'             { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    364   | MemberExpr '.' IDENT                { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); }
    365   | NEW MemberExpr Arguments            { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); }
     363  | MemberExpr '[' Expr ']'             { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     364  | MemberExpr '.' IDENT                { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3), $1.m_featureInfo); }
     365  | NEW MemberExpr Arguments            { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode(GLOBAL_DATA, $2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); }
    366366;
    367367
    368368MemberExprNoBF:
    369369    PrimaryExprNoBrace
    370   | MemberExprNoBF '[' Expr ']'         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    371   | MemberExprNoBF '.' IDENT            { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); }
    372   | NEW MemberExpr Arguments            { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); }
     370  | MemberExprNoBF '[' Expr ']'         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     371  | MemberExprNoBF '.' IDENT            { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3), $1.m_featureInfo); }
     372  | NEW MemberExpr Arguments            { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode(GLOBAL_DATA, $2.m_node, $3.m_node), $2.m_featureInfo | $3.m_featureInfo); }
    373373;
    374374
    375375NewExpr:
    376376    MemberExpr
    377   | NEW NewExpr                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node), $2.m_featureInfo); }
     377  | NEW NewExpr                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
    378378;
    379379
    380380NewExprNoBF:
    381381    MemberExprNoBF
    382   | NEW NewExpr                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode($2.m_node), $2.m_featureInfo); }
     382  | NEW NewExpr                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NewExprNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
    383383;
    384384
     
    386386    MemberExpr Arguments                { $$ = makeFunctionCallNode(globalPtr, $1, $2); }
    387387  | CallExpr Arguments                  { $$ = makeFunctionCallNode(globalPtr, $1, $2); }
    388   | CallExpr '[' Expr ']'               { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    389   | CallExpr '.' IDENT                  { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); }
     388  | CallExpr '[' Expr ']'               { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     389  | CallExpr '.' IDENT                  { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3), $1.m_featureInfo); }
    390390;
    391391
     
    393393    MemberExprNoBF Arguments            { $$ = makeFunctionCallNode(globalPtr, $1, $2); }
    394394  | CallExprNoBF Arguments              { $$ = makeFunctionCallNode(globalPtr, $1, $2); }
    395   | CallExprNoBF '[' Expr ']'           { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    396   | CallExprNoBF '.' IDENT              { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode($1.m_node, *$3), $1.m_featureInfo); }
     395  | CallExprNoBF '[' Expr ']'           { $$ = createNodeFeatureInfo<ExpressionNode*>(new BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     396  | CallExprNoBF '.' IDENT              { $$ = createNodeFeatureInfo<ExpressionNode*>(new DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3), $1.m_featureInfo); }
    397397;
    398398
    399399Arguments:
    400     '(' ')'                             { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode(), 0); }
    401   | '(' ArgumentList ')'                { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode($2.m_node.head), $2.m_featureInfo); }
     400    '(' ')'                             { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode(GLOBAL_DATA), 0); }
     401  | '(' ArgumentList ')'                { $$ = createNodeFeatureInfo<ArgumentsNode*>(new ArgumentsNode(GLOBAL_DATA, $2.m_node.head), $2.m_featureInfo); }
    402402;
    403403
    404404ArgumentList:
    405     AssignmentExpr                      { $$.m_node.head = new ArgumentListNode($1.m_node);
     405    AssignmentExpr                      { $$.m_node.head = new ArgumentListNode(GLOBAL_DATA, $1.m_node);
    406406                                          $$.m_node.tail = $$.m_node.head;
    407407                                          $$.m_featureInfo = $1.m_featureInfo; }
    408408  | ArgumentList ',' AssignmentExpr     { $$.m_node.head = $1.m_node.head;
    409                                           $$.m_node.tail = new ArgumentListNode($1.m_node.tail, $3.m_node);
     409                                          $$.m_node.tail = new ArgumentListNode(GLOBAL_DATA, $1.m_node.tail, $3.m_node);
    410410                                          $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo; }
    411411;
     
    423423PostfixExpr:
    424424    LeftHandSideExpr
    425   | LeftHandSideExpr PLUSPLUS           { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); }
    426   | LeftHandSideExpr MINUSMINUS         { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); }
     425  | LeftHandSideExpr PLUSPLUS           { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, $1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); }
     426  | LeftHandSideExpr MINUSMINUS         { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, $1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); }
    427427;
    428428
    429429PostfixExprNoBF:
    430430    LeftHandSideExprNoBF
    431   | LeftHandSideExprNoBF PLUSPLUS       { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); }
    432   | LeftHandSideExprNoBF MINUSMINUS     { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); }
     431  | LeftHandSideExprNoBF PLUSPLUS       { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, $1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); }
     432  | LeftHandSideExprNoBF MINUSMINUS     { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, $1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); }
    433433;
    434434
    435435UnaryExprCommon:
    436     DELETETOKEN UnaryExpr               { $$ = createNodeFeatureInfo<ExpressionNode*>(makeDeleteNode($2.m_node), $2.m_featureInfo); }
    437   | VOIDTOKEN UnaryExpr                 { $$ = createNodeFeatureInfo<ExpressionNode*>(new VoidNode($2.m_node), $2.m_featureInfo); }
    438   | TYPEOF UnaryExpr                    { $$ = createNodeFeatureInfo<ExpressionNode*>(makeTypeOfNode($2.m_node), $2.m_featureInfo); }
    439   | PLUSPLUS UnaryExpr                  { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpPlusPlus), $2.m_featureInfo | AssignFeature); }
    440   | AUTOPLUSPLUS UnaryExpr              { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpPlusPlus), $2.m_featureInfo | AssignFeature); }
    441   | MINUSMINUS UnaryExpr                { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpMinusMinus), $2.m_featureInfo | AssignFeature); }
    442   | AUTOMINUSMINUS UnaryExpr            { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode($2.m_node, OpMinusMinus), $2.m_featureInfo | AssignFeature); }
    443   | '+' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnaryPlusNode($2.m_node), $2.m_featureInfo); }
    444   | '-' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNegateNode($2.m_node), $2.m_featureInfo); }
    445   | '~' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitwiseNotNode($2.m_node), $2.m_featureInfo); }
    446   | '!' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalNotNode($2.m_node), $2.m_featureInfo); }
     436    DELETETOKEN UnaryExpr               { $$ = createNodeFeatureInfo<ExpressionNode*>(makeDeleteNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     437  | VOIDTOKEN UnaryExpr                 { $$ = createNodeFeatureInfo<ExpressionNode*>(new VoidNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     438  | TYPEOF UnaryExpr                    { $$ = createNodeFeatureInfo<ExpressionNode*>(makeTypeOfNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     439  | PLUSPLUS UnaryExpr                  { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, $2.m_node, OpPlusPlus), $2.m_featureInfo | AssignFeature); }
     440  | AUTOPLUSPLUS UnaryExpr              { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, $2.m_node, OpPlusPlus), $2.m_featureInfo | AssignFeature); }
     441  | MINUSMINUS UnaryExpr                { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, $2.m_node, OpMinusMinus), $2.m_featureInfo | AssignFeature); }
     442  | AUTOMINUSMINUS UnaryExpr            { $$ = createNodeFeatureInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, $2.m_node, OpMinusMinus), $2.m_featureInfo | AssignFeature); }
     443  | '+' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnaryPlusNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     444  | '-' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(makeNegateNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     445  | '~' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitwiseNotNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
     446  | '!' UnaryExpr                       { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalNotNode(GLOBAL_DATA, $2.m_node), $2.m_featureInfo); }
    447447
    448448UnaryExpr:
     
    458458MultiplicativeExpr:
    459459    UnaryExpr
    460   | MultiplicativeExpr '*' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    461   | MultiplicativeExpr '/' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    462   | MultiplicativeExpr '%' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     460  | MultiplicativeExpr '*' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     461  | MultiplicativeExpr '/' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     462  | MultiplicativeExpr '%' UnaryExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    463463;
    464464
     
    466466    UnaryExprNoBF
    467467  | MultiplicativeExprNoBF '*' UnaryExpr
    468                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     468                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new MultNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    469469  | MultiplicativeExprNoBF '/' UnaryExpr
    470                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     470                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new DivNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    471471  | MultiplicativeExprNoBF '%' UnaryExpr
    472                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     472                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new ModNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    473473;
    474474
    475475AdditiveExpr:
    476476    MultiplicativeExpr
    477   | AdditiveExpr '+' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new AddNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    478   | AdditiveExpr '-' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     477  | AdditiveExpr '+' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new AddNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     478  | AdditiveExpr '-' MultiplicativeExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    479479;
    480480
     
    482482    MultiplicativeExprNoBF
    483483  | AdditiveExprNoBF '+' MultiplicativeExpr
    484                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new AddNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     484                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new AddNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    485485  | AdditiveExprNoBF '-' MultiplicativeExpr
    486                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     486                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new SubNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    487487;
    488488
    489489ShiftExpr:
    490490    AdditiveExpr
    491   | ShiftExpr LSHIFT AdditiveExpr       { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    492   | ShiftExpr RSHIFT AdditiveExpr       { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    493   | ShiftExpr URSHIFT AdditiveExpr      { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     491  | ShiftExpr LSHIFT AdditiveExpr       { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     492  | ShiftExpr RSHIFT AdditiveExpr       { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     493  | ShiftExpr URSHIFT AdditiveExpr      { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    494494;
    495495
    496496ShiftExprNoBF:
    497497    AdditiveExprNoBF
    498   | ShiftExprNoBF LSHIFT AdditiveExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    499   | ShiftExprNoBF RSHIFT AdditiveExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    500   | ShiftExprNoBF URSHIFT AdditiveExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     498  | ShiftExprNoBF LSHIFT AdditiveExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new LeftShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     499  | ShiftExprNoBF RSHIFT AdditiveExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new RightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     500  | ShiftExprNoBF URSHIFT AdditiveExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new UnsignedRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    501501;
    502502
    503503RelationalExpr:
    504504    ShiftExpr
    505   | RelationalExpr '<' ShiftExpr        { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    506   | RelationalExpr '>' ShiftExpr        { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    507   | RelationalExpr LE ShiftExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    508   | RelationalExpr GE ShiftExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    509   | RelationalExpr INSTANCEOF ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    510   | RelationalExpr INTOKEN ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     505  | RelationalExpr '<' ShiftExpr        { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     506  | RelationalExpr '>' ShiftExpr        { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     507  | RelationalExpr LE ShiftExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     508  | RelationalExpr GE ShiftExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     509  | RelationalExpr INSTANCEOF ShiftExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     510  | RelationalExpr INTOKEN ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    511511;
    512512
    513513RelationalExprNoIn:
    514514    ShiftExpr
    515   | RelationalExprNoIn '<' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    516   | RelationalExprNoIn '>' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    517   | RelationalExprNoIn LE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    518   | RelationalExprNoIn GE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     515  | RelationalExprNoIn '<' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     516  | RelationalExprNoIn '>' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     517  | RelationalExprNoIn LE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     518  | RelationalExprNoIn GE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    519519  | RelationalExprNoIn INSTANCEOF ShiftExpr
    520                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     520                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    521521;
    522522
    523523RelationalExprNoBF:
    524524    ShiftExprNoBF
    525   | RelationalExprNoBF '<' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    526   | RelationalExprNoBF '>' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    527   | RelationalExprNoBF LE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    528   | RelationalExprNoBF GE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     525  | RelationalExprNoBF '<' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     526  | RelationalExprNoBF '>' ShiftExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     527  | RelationalExprNoBF LE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     528  | RelationalExprNoBF GE ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    529529  | RelationalExprNoBF INSTANCEOF ShiftExpr
    530                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    531   | RelationalExprNoBF INTOKEN ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     530                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     531  | RelationalExprNoBF INTOKEN ShiftExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new InNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    532532;
    533533
    534534EqualityExpr:
    535535    RelationalExpr
    536   | EqualityExpr EQEQ RelationalExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    537   | EqualityExpr NE RelationalExpr      { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    538   | EqualityExpr STREQ RelationalExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    539   | EqualityExpr STRNEQ RelationalExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     536  | EqualityExpr EQEQ RelationalExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     537  | EqualityExpr NE RelationalExpr      { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     538  | EqualityExpr STREQ RelationalExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     539  | EqualityExpr STRNEQ RelationalExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    540540;
    541541
     
    543543    RelationalExprNoIn
    544544  | EqualityExprNoIn EQEQ RelationalExprNoIn
    545                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     545                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    546546  | EqualityExprNoIn NE RelationalExprNoIn
    547                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     547                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    548548  | EqualityExprNoIn STREQ RelationalExprNoIn
    549                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     549                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    550550  | EqualityExprNoIn STRNEQ RelationalExprNoIn
    551                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     551                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    552552;
    553553
     
    555555    RelationalExprNoBF
    556556  | EqualityExprNoBF EQEQ RelationalExpr
    557                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    558   | EqualityExprNoBF NE RelationalExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     557                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     558  | EqualityExprNoBF NE RelationalExpr  { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    559559  | EqualityExprNoBF STREQ RelationalExpr
    560                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     560                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    561561  | EqualityExprNoBF STRNEQ RelationalExpr
    562                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     562                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    563563;
    564564
    565565BitwiseANDExpr:
    566566    EqualityExpr
    567   | BitwiseANDExpr '&' EqualityExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     567  | BitwiseANDExpr '&' EqualityExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    568568;
    569569
     
    571571    EqualityExprNoIn
    572572  | BitwiseANDExprNoIn '&' EqualityExprNoIn
    573                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     573                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    574574;
    575575
    576576BitwiseANDExprNoBF:
    577577    EqualityExprNoBF
    578   | BitwiseANDExprNoBF '&' EqualityExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     578  | BitwiseANDExprNoBF '&' EqualityExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    579579;
    580580
    581581BitwiseXORExpr:
    582582    BitwiseANDExpr
    583   | BitwiseXORExpr '^' BitwiseANDExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     583  | BitwiseXORExpr '^' BitwiseANDExpr   { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    584584;
    585585
     
    587587    BitwiseANDExprNoIn
    588588  | BitwiseXORExprNoIn '^' BitwiseANDExprNoIn
    589                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     589                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    590590;
    591591
     
    593593    BitwiseANDExprNoBF
    594594  | BitwiseXORExprNoBF '^' BitwiseANDExpr
    595                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     595                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    596596;
    597597
    598598BitwiseORExpr:
    599599    BitwiseXORExpr
    600   | BitwiseORExpr '|' BitwiseXORExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     600  | BitwiseORExpr '|' BitwiseXORExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    601601;
    602602
     
    604604    BitwiseXORExprNoIn
    605605  | BitwiseORExprNoIn '|' BitwiseXORExprNoIn
    606                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     606                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    607607;
    608608
     
    610610    BitwiseXORExprNoBF
    611611  | BitwiseORExprNoBF '|' BitwiseXORExpr
    612                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode($1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
     612                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo); }
    613613;
    614614
    615615LogicalANDExpr:
    616616    BitwiseORExpr
    617   | LogicalANDExpr AND BitwiseORExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     617  | LogicalANDExpr AND BitwiseORExpr    { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    618618;
    619619
     
    621621    BitwiseORExprNoIn
    622622  | LogicalANDExprNoIn AND BitwiseORExprNoIn
    623                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     623                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    624624;
    625625
     
    627627    BitwiseORExprNoBF
    628628  | LogicalANDExprNoBF AND BitwiseORExpr
    629                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     629                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalAndNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    630630;
    631631
    632632LogicalORExpr:
    633633    LogicalANDExpr
    634   | LogicalORExpr OR LogicalANDExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     634  | LogicalORExpr OR LogicalANDExpr     { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    635635;
    636636
     
    638638    LogicalANDExprNoIn
    639639  | LogicalORExprNoIn OR LogicalANDExprNoIn
    640                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     640                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    641641;
    642642
    643643LogicalORExprNoBF:
    644644    LogicalANDExprNoBF
    645   | LogicalORExprNoBF OR LogicalANDExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     645  | LogicalORExprNoBF OR LogicalANDExpr { $$ = createNodeFeatureInfo<ExpressionNode*>(new LogicalOrNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    646646;
    647647
     
    649649    LogicalORExpr
    650650  | LogicalORExpr '?' AssignmentExpr ':' AssignmentExpr
    651                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
     651                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode(GLOBAL_DATA, $1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
    652652;
    653653
     
    655655    LogicalORExprNoIn
    656656  | LogicalORExprNoIn '?' AssignmentExprNoIn ':' AssignmentExprNoIn
    657                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
     657                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode(GLOBAL_DATA, $1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
    658658;
    659659
     
    661661    LogicalORExprNoBF
    662662  | LogicalORExprNoBF '?' AssignmentExpr ':' AssignmentExpr
    663                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode($1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
     663                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(new ConditionalNode(GLOBAL_DATA, $1.m_node, $3.m_node, $5.m_node), $1.m_featureInfo | $3.m_featureInfo | $5.m_featureInfo); }
    664664;
    665665
     
    667667    ConditionalExpr
    668668  | LeftHandSideExpr AssignmentOperator AssignmentExpr
    669                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
     669                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, $1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
    670670;
    671671
     
    673673    ConditionalExprNoIn
    674674  | LeftHandSideExpr AssignmentOperator AssignmentExprNoIn
    675                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
     675                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, $1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
    676676;
    677677
     
    679679    ConditionalExprNoBF
    680680  | LeftHandSideExprNoBF AssignmentOperator AssignmentExpr
    681                                         { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode($1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
     681                                        { $$ = createNodeFeatureInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, $1.m_node, $2, $3.m_node, $1.m_featureInfo & AssignFeature, $3.m_featureInfo & AssignFeature), $1.m_featureInfo | $3.m_featureInfo | AssignFeature); }
    682682;
    683683
     
    699699Expr:
    700700    AssignmentExpr
    701   | Expr ',' AssignmentExpr             { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     701  | Expr ',' AssignmentExpr             { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    702702;
    703703
    704704ExprNoIn:
    705705    AssignmentExprNoIn
    706   | ExprNoIn ',' AssignmentExprNoIn     { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     706  | ExprNoIn ',' AssignmentExprNoIn     { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    707707;
    708708
    709709ExprNoBF:
    710710    AssignmentExprNoBF
    711   | ExprNoBF ',' AssignmentExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode($1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
     711  | ExprNoBF ',' AssignmentExpr         { $$ = createNodeFeatureInfo<ExpressionNode*>(new CommaNode(GLOBAL_DATA, $1.m_node, $3.m_node), $1.m_featureInfo | $3.m_featureInfo); }
    712712;
    713713
     
    732732
    733733Block:
    734     OPENBRACE CLOSEBRACE                             { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode(0), 0, 0, 0);
     734    OPENBRACE CLOSEBRACE                             { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode(GLOBAL_DATA, 0), 0, 0, 0);
    735735                                          DBG($$.m_node, @1, @2); }
    736   | OPENBRACE SourceElements CLOSEBRACE              { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
     736  | OPENBRACE SourceElements CLOSEBRACE              { $$ = createNodeDeclarationInfo<StatementNode*>(new BlockNode(GLOBAL_DATA, $2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
    737737                                          DBG($$.m_node, @1, @3); }
    738738;
    739739
    740740VariableStatement:
    741     VAR VariableDeclarationList ';'     { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
     741    VAR VariableDeclarationList ';'     { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, $2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
    742742                                          DBG($$.m_node, @1, @3); }
    743   | VAR VariableDeclarationList error   { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode($2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
     743  | VAR VariableDeclarationList error   { $$ = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, $2.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
    744744                                          DBG($$.m_node, @1, @2);
    745745                                          AUTO_SEMICOLON; }
     
    748748VariableDeclarationList:
    749749    IDENT                               { $$.m_node = 0;
    750                                           $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>;
    751                                           appendToVarDeclarationList($$.m_varDeclarations, *$1, 0);
     750                                          $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
     751                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$1, 0);
    752752                                          $$.m_funcDeclarations = 0;
    753753                                          $$.m_featureInfo = 0;
    754754                                        }
    755   | IDENT Initializer                   { $$.m_node = new AssignResolveNode(*$1, $2.m_node, $2.m_featureInfo & AssignFeature);
    756                                           $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>;
    757                                           appendToVarDeclarationList($$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer);
     755  | IDENT Initializer                   { $$.m_node = new AssignResolveNode(GLOBAL_DATA, *$1, $2.m_node, $2.m_featureInfo & AssignFeature);
     756                                          $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
     757                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer);
    758758                                          $$.m_funcDeclarations = 0;
    759759                                          $$.m_featureInfo = $2.m_featureInfo;
     
    762762                                        { $$.m_node = $1.m_node;
    763763                                          $$.m_varDeclarations = $1.m_varDeclarations;
    764                                           appendToVarDeclarationList($$.m_varDeclarations, *$3, 0);
     764                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, 0);
    765765                                          $$.m_funcDeclarations = 0;
    766766                                          $$.m_featureInfo = $1.m_featureInfo;
    767767                                        }
    768768  | VariableDeclarationList ',' IDENT Initializer
    769                                         { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4.m_node, $4.m_featureInfo & AssignFeature));
     769                                        { $$.m_node = combineVarInitializers(GLOBAL_DATA, $1.m_node, new AssignResolveNode(GLOBAL_DATA, *$3, $4.m_node, $4.m_featureInfo & AssignFeature));
    770770                                          $$.m_varDeclarations = $1.m_varDeclarations;
    771                                           appendToVarDeclarationList($$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer);
     771                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer);
    772772                                          $$.m_funcDeclarations = 0;
    773773                                          $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo;
     
    777777VariableDeclarationListNoIn:
    778778    IDENT                               { $$.m_node = 0;
    779                                           $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>;
    780                                           appendToVarDeclarationList($$.m_varDeclarations, *$1, 0);
     779                                          $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
     780                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$1, 0);
    781781                                          $$.m_funcDeclarations = 0;
    782782                                          $$.m_featureInfo = 0;
    783783                                        }
    784   | IDENT InitializerNoIn               { $$.m_node = new AssignResolveNode(*$1, $2.m_node, $2.m_featureInfo & AssignFeature);
    785                                           $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>;
    786                                           appendToVarDeclarationList($$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer);
     784  | IDENT InitializerNoIn               { $$.m_node = new AssignResolveNode(GLOBAL_DATA, *$1, $2.m_node, $2.m_featureInfo & AssignFeature);
     785                                          $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
     786                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$1, DeclarationStacks::HasInitializer);
    787787                                          $$.m_funcDeclarations = 0;
    788788                                          $$.m_featureInfo = $2.m_featureInfo;
     
    791791                                        { $$.m_node = $1.m_node;
    792792                                          $$.m_varDeclarations = $1.m_varDeclarations;
    793                                           appendToVarDeclarationList($$.m_varDeclarations, *$3, 0);
     793                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, 0);
    794794                                          $$.m_funcDeclarations = 0;
    795795                                          $$.m_featureInfo = $1.m_featureInfo;
    796796                                        }
    797797  | VariableDeclarationListNoIn ',' IDENT InitializerNoIn
    798                                         { $$.m_node = combineVarInitializers($1.m_node, new AssignResolveNode(*$3, $4.m_node, $4.m_featureInfo & AssignFeature));
     798                                        { $$.m_node = combineVarInitializers(GLOBAL_DATA, $1.m_node, new AssignResolveNode(GLOBAL_DATA, *$3, $4.m_node, $4.m_featureInfo & AssignFeature));
    799799                                          $$.m_varDeclarations = $1.m_varDeclarations;
    800                                           appendToVarDeclarationList($$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer);
     800                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, *$3, DeclarationStacks::HasInitializer);
    801801                                          $$.m_funcDeclarations = 0;
    802802                                          $$.m_featureInfo = $1.m_featureInfo | $4.m_featureInfo;
     
    805805
    806806ConstStatement:
    807     CONSTTOKEN ConstDeclarationList ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
     807    CONSTTOKEN ConstDeclarationList ';' { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode(GLOBAL_DATA, $2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
    808808                                          DBG($$.m_node, @1, @3); }
    809809  | CONSTTOKEN ConstDeclarationList error
    810                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode($2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
     810                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ConstStatementNode(GLOBAL_DATA, $2.m_node.head), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo);
    811811                                          DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
    812812;
     
    815815    ConstDeclaration                    { $$.m_node.head = $1.m_node;
    816816                                          $$.m_node.tail = $$.m_node.head;
    817                                           $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>;
    818                                           appendToVarDeclarationList($$.m_varDeclarations, $1.m_node);
     817                                          $$.m_varDeclarations = new ParserRefCountedData<DeclarationStacks::VarStack>(GLOBAL_DATA);
     818                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, $1.m_node);
    819819                                          $$.m_funcDeclarations = 0;
    820820                                          $$.m_featureInfo = $1.m_featureInfo;
     
    825825                                          $$.m_node.tail = $3.m_node;
    826826                                          $$.m_varDeclarations = $1.m_varDeclarations;
    827                                           appendToVarDeclarationList($$.m_varDeclarations, $3.m_node);
     827                                          appendToVarDeclarationList(GLOBAL_DATA, $$.m_varDeclarations, $3.m_node);
    828828                                          $$.m_funcDeclarations = 0;
    829829                                          $$.m_featureInfo = $1.m_featureInfo | $3.m_featureInfo;}
     
    831831
    832832ConstDeclaration:
    833     IDENT                               { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(*$1, 0), 0); }
    834   | IDENT Initializer                   { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(*$1, $2.m_node), $2.m_featureInfo); }
     833    IDENT                               { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(GLOBAL_DATA, *$1, 0), 0); }
     834  | IDENT Initializer                   { $$ = createNodeFeatureInfo<ConstDeclNode*>(new ConstDeclNode(GLOBAL_DATA, *$1, $2.m_node), $2.m_featureInfo); }
    835835;
    836836
     
    844844
    845845EmptyStatement:
    846     ';'                                 { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(), 0, 0, 0); }
     846    ';'                                 { $$ = createNodeDeclarationInfo<StatementNode*>(new EmptyStatementNode(GLOBAL_DATA), 0, 0, 0); }
    847847;
    848848
    849849ExprStatement:
    850     ExprNoBF ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode($1.m_node), 0, 0, $1.m_featureInfo);
     850    ExprNoBF ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode(GLOBAL_DATA, $1.m_node), 0, 0, $1.m_featureInfo);
    851851                                          DBG($$.m_node, @1, @2); }
    852   | ExprNoBF error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode($1.m_node), 0, 0, $1.m_featureInfo);
     852  | ExprNoBF error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ExprStatementNode(GLOBAL_DATA, $1.m_node), 0, 0, $1.m_featureInfo);
    853853                                          DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    854854;
     
    856856IfStatement:
    857857    IF '(' Expr ')' Statement %prec IF_WITHOUT_ELSE
    858                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new IfNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, $3.m_featureInfo | $5.m_featureInfo);
     858                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new IfNode(GLOBAL_DATA, $3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, $3.m_featureInfo | $5.m_featureInfo);
    859859                                          DBG($$.m_node, @1, @4); }
    860860  | IF '(' Expr ')' Statement ELSE Statement
    861                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new IfElseNode($3.m_node, $5.m_node, $7.m_node),
     861                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new IfElseNode(GLOBAL_DATA, $3.m_node, $5.m_node, $7.m_node),
    862862                                                                                         mergeDeclarationLists($5.m_varDeclarations, $7.m_varDeclarations), mergeDeclarationLists($5.m_funcDeclarations, $7.m_funcDeclarations),
    863863                                                                                         $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo);
     
    866866
    867867IterationStatement:
    868     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);
     868    DO Statement WHILE '(' Expr ')' ';'    { $$ = createNodeDeclarationInfo<StatementNode*>(new DoWhileNode(GLOBAL_DATA, $2.m_node, $5.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo | $5.m_featureInfo);
    869869                                             DBG($$.m_node, @1, @3); }
    870   | 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);
     870  | DO Statement WHILE '(' Expr ')' error  { $$ = createNodeDeclarationInfo<StatementNode*>(new DoWhileNode(GLOBAL_DATA, $2.m_node, $5.m_node), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo | $5.m_featureInfo);
    871871                                             DBG($$.m_node, @1, @3); } // Always performs automatic semicolon insertion.
    872   | 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);
     872  | WHILE '(' Expr ')' Statement        { $$ = createNodeDeclarationInfo<StatementNode*>(new WhileNode(GLOBAL_DATA, $3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations, $3.m_featureInfo | $5.m_featureInfo);
    873873                                          DBG($$.m_node, @1, @4); }
    874874  | FOR '(' ExprNoInOpt ';' ExprOpt ';' ExprOpt ')' Statement
    875                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode($3.m_node, $5.m_node, $7.m_node, $9.m_node, false), $9.m_varDeclarations, $9.m_funcDeclarations,
     875                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode(GLOBAL_DATA, $3.m_node, $5.m_node, $7.m_node, $9.m_node, false), $9.m_varDeclarations, $9.m_funcDeclarations,
    876876                                                                                         $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo | $9.m_featureInfo);
    877877                                          DBG($$.m_node, @1, @8);
    878878                                        }
    879879  | FOR '(' VAR VariableDeclarationListNoIn ';' ExprOpt ';' ExprOpt ')' Statement
    880                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode($4.m_node, $6.m_node, $8.m_node, $10.m_node, true),
     880                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ForNode(GLOBAL_DATA, $4.m_node, $6.m_node, $8.m_node, $10.m_node, true),
    881881                                                                                         mergeDeclarationLists($4.m_varDeclarations, $10.m_varDeclarations),
    882882                                                                                         mergeDeclarationLists($4.m_funcDeclarations, $10.m_funcDeclarations),
     
    888888                                            if (!n->isLocation())
    889889                                                YYABORT;
    890                                             $$ = createNodeDeclarationInfo<StatementNode*>(new ForInNode($3.m_node, $5.m_node, $7.m_node), $7.m_varDeclarations, $7.m_funcDeclarations,
     890                                            $$ = createNodeDeclarationInfo<StatementNode*>(new ForInNode(GLOBAL_DATA, $3.m_node, $5.m_node, $7.m_node), $7.m_varDeclarations, $7.m_funcDeclarations,
    891891                                                                                           $3.m_featureInfo | $5.m_featureInfo | $7.m_featureInfo);
    892892                                            DBG($$.m_node, @1, @6);
    893893                                        }
    894894  | FOR '(' VAR IDENT INTOKEN Expr ')' Statement
    895                                         { ForInNode *forIn = new ForInNode(*$4, 0, $6.m_node, $8.m_node);
    896                                           appendToVarDeclarationList($8.m_varDeclarations, *$4, DeclarationStacks::HasInitializer);
     895                                        { ForInNode *forIn = new ForInNode(GLOBAL_DATA, *$4, 0, $6.m_node, $8.m_node);
     896                                          appendToVarDeclarationList(GLOBAL_DATA, $8.m_varDeclarations, *$4, DeclarationStacks::HasInitializer);
    897897                                          $$ = createNodeDeclarationInfo<StatementNode*>(forIn, $8.m_varDeclarations, $8.m_funcDeclarations, $6.m_featureInfo | $8.m_featureInfo);
    898898                                          DBG($$.m_node, @1, @7); }
    899899  | FOR '(' VAR IDENT InitializerNoIn INTOKEN Expr ')' Statement
    900                                         { ForInNode *forIn = new ForInNode(*$4, $5.m_node, $7.m_node, $9.m_node);
    901                                           appendToVarDeclarationList($9.m_varDeclarations, *$4, DeclarationStacks::HasInitializer);
     900                                        { ForInNode *forIn = new ForInNode(GLOBAL_DATA, *$4, $5.m_node, $7.m_node, $9.m_node);
     901                                          appendToVarDeclarationList(GLOBAL_DATA, $9.m_varDeclarations, *$4, DeclarationStacks::HasInitializer);
    902902                                          $$ = createNodeDeclarationInfo<StatementNode*>(forIn, $9.m_varDeclarations, $9.m_funcDeclarations,
    903903                                                                                         $5.m_featureInfo | $7.m_featureInfo | $9.m_featureInfo);
     
    916916
    917917ContinueStatement:
    918     CONTINUE ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(), 0, 0, 0);
     918    CONTINUE ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(GLOBAL_DATA), 0, 0, 0);
    919919                                          DBG($$.m_node, @1, @2); }
    920   | CONTINUE error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(), 0, 0, 0);
     920  | CONTINUE error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(GLOBAL_DATA), 0, 0, 0);
    921921                                          DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    922   | CONTINUE IDENT ';'                  { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(*$2), 0, 0, 0);
     922  | CONTINUE IDENT ';'                  { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(GLOBAL_DATA, *$2), 0, 0, 0);
    923923                                          DBG($$.m_node, @1, @3); }
    924   | CONTINUE IDENT error                { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(*$2), 0, 0, 0);
     924  | CONTINUE IDENT error                { $$ = createNodeDeclarationInfo<StatementNode*>(new ContinueNode(GLOBAL_DATA, *$2), 0, 0, 0);
    925925                                          DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
    926926;
    927927
    928928BreakStatement:
    929     BREAK ';'                           { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(), 0, 0, 0); DBG($$.m_node, @1, @2); }
    930   | BREAK error                         { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    931   | BREAK IDENT ';'                     { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(*$2), 0, 0, 0); DBG($$.m_node, @1, @3); }
    932   | BREAK IDENT error                   { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(*$2), 0, 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
     929    BREAK ';'                           { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(GLOBAL_DATA), 0, 0, 0); DBG($$.m_node, @1, @2); }
     930  | BREAK error                         { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(GLOBAL_DATA), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
     931  | BREAK IDENT ';'                     { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(GLOBAL_DATA, *$2), 0, 0, 0); DBG($$.m_node, @1, @3); }
     932  | BREAK IDENT error                   { $$ = createNodeDeclarationInfo<StatementNode*>(new BreakNode(GLOBAL_DATA, *$2), 0, 0, 0); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
    933933;
    934934
    935935ReturnStatement:
    936     RETURN ';'                          { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(0), 0, 0, 0); DBG($$.m_node, @1, @2); }
    937   | RETURN error                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(0), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    938   | RETURN Expr ';'                     { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); }
    939   | RETURN Expr error                   { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
     936    RETURN ';'                          { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(GLOBAL_DATA, 0), 0, 0, 0); DBG($$.m_node, @1, @2); }
     937  | RETURN error                        { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(GLOBAL_DATA, 0), 0, 0, 0); DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
     938  | RETURN Expr ';'                     { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(GLOBAL_DATA, $2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); }
     939  | RETURN Expr error                   { $$ = createNodeDeclarationInfo<StatementNode*>(new ReturnNode(GLOBAL_DATA, $2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
    940940;
    941941
    942942WithStatement:
    943     WITH '(' Expr ')' Statement         { $$ = createNodeDeclarationInfo<StatementNode*>(new WithNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations,
     943    WITH '(' Expr ')' Statement         { $$ = createNodeDeclarationInfo<StatementNode*>(new WithNode(GLOBAL_DATA, $3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations,
    944944                                                                                         $3.m_featureInfo | $5.m_featureInfo);
    945945                                          DBG($$.m_node, @1, @4); }
     
    947947
    948948SwitchStatement:
    949     SWITCH '(' Expr ')' CaseBlock       { $$ = createNodeDeclarationInfo<StatementNode*>(new SwitchNode($3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations,
     949    SWITCH '(' Expr ')' CaseBlock       { $$ = createNodeDeclarationInfo<StatementNode*>(new SwitchNode(GLOBAL_DATA, $3.m_node, $5.m_node), $5.m_varDeclarations, $5.m_funcDeclarations,
    950950                                                                                         $3.m_featureInfo | $5.m_featureInfo);
    951951                                          DBG($$.m_node, @1, @4); }
     
    953953
    954954CaseBlock:
    955     OPENBRACE CaseClausesOpt CLOSEBRACE              { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, 0, 0), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); }
     955    OPENBRACE CaseClausesOpt CLOSEBRACE              { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode(GLOBAL_DATA, $2.m_node.head, 0, 0), $2.m_varDeclarations, $2.m_funcDeclarations, $2.m_featureInfo); }
    956956  | OPENBRACE CaseClausesOpt DefaultClause CaseClausesOpt CLOSEBRACE
    957                                         { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode($2.m_node.head, $3.m_node, $4.m_node.head),
     957                                        { $$ = createNodeDeclarationInfo<CaseBlockNode*>(new CaseBlockNode(GLOBAL_DATA, $2.m_node.head, $3.m_node, $4.m_node.head),
    958958                                                                                         mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $3.m_varDeclarations), $4.m_varDeclarations),
    959959                                                                                         mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $3.m_funcDeclarations), $4.m_funcDeclarations),
     
    967967
    968968CaseClauses:
    969     CaseClause                          { $$.m_node.head = new ClauseListNode($1.m_node);
     969    CaseClause                          { $$.m_node.head = new ClauseListNode(GLOBAL_DATA, $1.m_node);
    970970                                          $$.m_node.tail = $$.m_node.head;
    971971                                          $$.m_varDeclarations = $1.m_varDeclarations;
     
    973973                                          $$.m_featureInfo = $1.m_featureInfo; }
    974974  | CaseClauses CaseClause              { $$.m_node.head = $1.m_node.head;
    975                                           $$.m_node.tail = new ClauseListNode($1.m_node.tail, $2.m_node);
     975                                          $$.m_node.tail = new ClauseListNode(GLOBAL_DATA, $1.m_node.tail, $2.m_node);
    976976                                          $$.m_varDeclarations = mergeDeclarationLists($1.m_varDeclarations, $2.m_varDeclarations);
    977977                                          $$.m_funcDeclarations = mergeDeclarationLists($1.m_funcDeclarations, $2.m_funcDeclarations);
     
    981981
    982982CaseClause:
    983     CASE Expr ':'                       { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode($2.m_node), 0, 0, $2.m_featureInfo); }
    984   | 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); }
     983    CASE Expr ':'                       { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(GLOBAL_DATA, $2.m_node), 0, 0, $2.m_featureInfo); }
     984  | CASE Expr ':' SourceElements        { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(GLOBAL_DATA, $2.m_node, $4.m_node), $4.m_varDeclarations, $4.m_funcDeclarations, $2.m_featureInfo | $4.m_featureInfo); }
    985985;
    986986
    987987DefaultClause:
    988     DEFAULT ':'                         { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(0), 0, 0, 0); }
    989   | DEFAULT ':' SourceElements          { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(0, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); }
     988    DEFAULT ':'                         { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(GLOBAL_DATA, 0), 0, 0, 0); }
     989  | DEFAULT ':' SourceElements          { $$ = createNodeDeclarationInfo<CaseClauseNode*>(new CaseClauseNode(GLOBAL_DATA, 0, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); }
    990990;
    991991
    992992LabelledStatement:
    993993    IDENT ':' Statement                 { $3.m_node->pushLabel(*$1);
    994                                           $$ = createNodeDeclarationInfo<StatementNode*>(new LabelNode(*$1, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); }
     994                                          $$ = createNodeDeclarationInfo<StatementNode*>(new LabelNode(GLOBAL_DATA, *$1, $3.m_node), $3.m_varDeclarations, $3.m_funcDeclarations, $3.m_featureInfo); }
    995995;
    996996
    997997ThrowStatement:
    998     THROW Expr ';'                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); }
    999   | THROW Expr error                    { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode($2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
     998    THROW Expr ';'                      { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode(GLOBAL_DATA, $2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @3); }
     999  | THROW Expr error                    { $$ = createNodeDeclarationInfo<StatementNode*>(new ThrowNode(GLOBAL_DATA, $2.m_node), 0, 0, $2.m_featureInfo); DBG($$.m_node, @1, @2); AUTO_SEMICOLON; }
    10001000;
    10011001
    10021002TryStatement:
    1003     TRY Block FINALLY Block             { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, GLOBAL_DATA->propertyNames->nullIdentifier, 0, $4.m_node),
     1003    TRY Block FINALLY Block             { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode(GLOBAL_DATA, $2.m_node, GLOBAL_DATA->propertyNames->nullIdentifier, 0, $4.m_node),
    10041004                                                                                         mergeDeclarationLists($2.m_varDeclarations, $4.m_varDeclarations),
    10051005                                                                                         mergeDeclarationLists($2.m_funcDeclarations, $4.m_funcDeclarations),
    10061006                                                                                         $2.m_featureInfo | $4.m_featureInfo);
    10071007                                          DBG($$.m_node, @1, @2); }
    1008   | TRY Block CATCH '(' IDENT ')' Block { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, 0),
     1008  | TRY Block CATCH '(' IDENT ')' Block { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode(GLOBAL_DATA, $2.m_node, *$5, $7.m_node, 0),
    10091009                                                                                         mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations),
    10101010                                                                                         mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations),
     
    10121012                                          DBG($$.m_node, @1, @2); }
    10131013  | TRY Block CATCH '(' IDENT ')' Block FINALLY Block
    1014                                         { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode($2.m_node, *$5, $7.m_node, $9.m_node),
     1014                                        { $$ = createNodeDeclarationInfo<StatementNode*>(new TryNode(GLOBAL_DATA, $2.m_node, *$5, $7.m_node, $9.m_node),
    10151015                                                                                         mergeDeclarationLists(mergeDeclarationLists($2.m_varDeclarations, $7.m_varDeclarations), $9.m_varDeclarations),
    10161016                                                                                         mergeDeclarationLists(mergeDeclarationLists($2.m_funcDeclarations, $7.m_funcDeclarations), $9.m_funcDeclarations),
     
    10201020
    10211021DebuggerStatement:
    1022     DEBUGGER ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
     1022    DEBUGGER ';'                        { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0);
    10231023                                          DBG($$.m_node, @1, @2); }
    1024   | DEBUGGER error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(), 0, 0, 0);
     1024  | DEBUGGER error                      { $$ = createNodeDeclarationInfo<StatementNode*>(new DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0);
    10251025                                          DBG($$.m_node, @1, @1); AUTO_SEMICOLON; }
    10261026;
    10271027
    10281028FunctionDeclaration:
    1029     FUNCTION IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = new FuncDeclNode(*$2, $6, LEXER->sourceRange($5, $7)); DBG($6, @5, @7); }
     1029    FUNCTION IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = new FuncDeclNode(GLOBAL_DATA, *$2, $6, LEXER->sourceRange($5, $7)); DBG($6, @5, @7); }
    10301030  | FUNCTION IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
    1031                                         { $$ = new FuncDeclNode(*$2, $7, LEXER->sourceRange($6, $8), $4.head); DBG($7, @6, @8); }
     1031                                        { $$ = new FuncDeclNode(GLOBAL_DATA, *$2, $7, LEXER->sourceRange($6, $8), $4.head); DBG($7, @6, @8); }
    10321032;
    10331033
    10341034FunctionExpr:
    1035     FUNCTION '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA->propertyNames->nullIdentifier, $5, LEXER->sourceRange($4, $6)), ClosureFeature); DBG($5, @4, @6); }
    1036   | FUNCTION '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA->propertyNames->nullIdentifier, $6, LEXER->sourceRange($5, $7), $3.head), ClosureFeature); DBG($6, @5, @7); }
    1037   | FUNCTION IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(*$2, $6, LEXER->sourceRange($5, $7)), ClosureFeature); DBG($6, @5, @7); }
    1038   | FUNCTION IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(*$2, $7, LEXER->sourceRange($6, $8), $4.head), ClosureFeature); DBG($7, @6, @8); }
     1035    FUNCTION '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, $5, LEXER->sourceRange($4, $6)), ClosureFeature); DBG($5, @4, @6); }
     1036  | FUNCTION '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, $6, LEXER->sourceRange($5, $7), $3.head), ClosureFeature); DBG($6, @5, @7); }
     1037  | FUNCTION IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA, *$2, $6, LEXER->sourceRange($5, $7)), ClosureFeature); DBG($6, @5, @7); }
     1038  | FUNCTION IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeFeatureInfo(new FuncExprNode(GLOBAL_DATA, *$2, $7, LEXER->sourceRange($6, $8), $4.head), ClosureFeature); DBG($7, @6, @8); }
    10391039;
    10401040
    10411041FormalParameterList:
    1042     IDENT                               { $$.head = new ParameterNode(*$1);
     1042    IDENT                               { $$.head = new ParameterNode(GLOBAL_DATA, *$1);
    10431043                                          $$.tail = $$.head; }
    10441044  | FormalParameterList ',' IDENT       { $$.head = $1.head;
    1045                                           $$.tail = new ParameterNode($1.tail, *$3); }
     1045                                          $$.tail = new ParameterNode(GLOBAL_DATA, $1.tail, *$3); }
    10461046;
    10471047
    10481048FunctionBody:
    1049     /* not in spec */           { $$ = FunctionBodyNode::create(0, 0, 0, false, false); }
    1050   | SourceElements              { $$ = FunctionBodyNode::create($1.m_node, $1.m_varDeclarations ? &$1.m_varDeclarations->data : 0,
     1049    /* not in spec */           { $$ = FunctionBodyNode::create(GLOBAL_DATA, 0, 0, 0, false, false); }
     1050  | SourceElements              { $$ = FunctionBodyNode::create(GLOBAL_DATA, $1.m_node, $1.m_varDeclarations ? &$1.m_varDeclarations->data : 0,
    10511051                                                                $1.m_funcDeclarations ? &$1.m_funcDeclarations->data : 0,
    10521052                                                                ($1.m_featureInfo & EvalFeature) != 0, ($1.m_featureInfo & ClosureFeature) != 0);
     
    10651065
    10661066Program:
    1067     /* not in spec */                   { GLOBAL_DATA->parser->didFinishParsing(new SourceElements, 0, 0, false, false, @0.last_line); }
     1067    /* not in spec */                   { GLOBAL_DATA->parser->didFinishParsing(new SourceElements(GLOBAL_DATA), 0, 0, false, false, @0.last_line); }
    10681068    | SourceElements                    { GLOBAL_DATA->parser->didFinishParsing($1.m_node, $1.m_varDeclarations, $1.m_funcDeclarations,
    10691069                                                                    ($1.m_featureInfo & EvalFeature) != 0, ($1.m_featureInfo & ClosureFeature) != 0,
     
    10721072
    10731073SourceElements:
    1074     SourceElement                       { $$.m_node = new SourceElements;
     1074    SourceElement                       { $$.m_node = new SourceElements(GLOBAL_DATA);
    10751075                                          $$.m_node->append($1.m_node);
    10761076                                          $$.m_varDeclarations = $1.m_varDeclarations;
     
    10861086
    10871087SourceElement:
    1088     FunctionDeclaration                 { $$ = createNodeDeclarationInfo<StatementNode*>($1, 0, new ParserRefCountedData<DeclarationStacks::FunctionStack>, ClosureFeature); $$.m_funcDeclarations->data.append($1); }
     1088    FunctionDeclaration                 { $$ = createNodeDeclarationInfo<StatementNode*>($1, 0, new ParserRefCountedData<DeclarationStacks::FunctionStack>(GLOBAL_DATA), ClosureFeature); $$.m_funcDeclarations->data.append($1); }
    10891089  | Statement                           { $$ = $1; }
    10901090;
     
    10921092%%
    10931093
    1094 static ExpressionNode* makeAssignNode(ExpressionNode* loc, Operator op, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments)
     1094static ExpressionNode* makeAssignNode(void* globalPtr, ExpressionNode* loc, Operator op, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments)
    10951095{
    10961096    if (!loc->isLocation())
    1097         return new AssignErrorNode(loc, op, expr);
     1097        return new AssignErrorNode(GLOBAL_DATA, loc, op, expr);
    10981098
    10991099    if (loc->isResolveNode()) {
    11001100        ResolveNode* resolve = static_cast<ResolveNode*>(loc);
    11011101        if (op == OpEqual)
    1102             return new AssignResolveNode(resolve->identifier(), expr, exprHasAssignments);
     1102            return new AssignResolveNode(GLOBAL_DATA, resolve->identifier(), expr, exprHasAssignments);
    11031103        else
    1104             return new ReadModifyResolveNode(resolve->identifier(), op, expr, exprHasAssignments);
     1104            return new ReadModifyResolveNode(GLOBAL_DATA, resolve->identifier(), op, expr, exprHasAssignments);
    11051105    }
    11061106    if (loc->isBracketAccessorNode()) {
    11071107        BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(loc);
    11081108        if (op == OpEqual)
    1109             return new AssignBracketNode(bracket->base(), bracket->subscript(), expr, locHasAssignments, exprHasAssignments);
     1109            return new AssignBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), expr, locHasAssignments, exprHasAssignments);
    11101110        else
    1111             return new ReadModifyBracketNode(bracket->base(), bracket->subscript(), op, expr, locHasAssignments, exprHasAssignments);
     1111            return new ReadModifyBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), op, expr, locHasAssignments, exprHasAssignments);
    11121112    }
    11131113    ASSERT(loc->isDotAccessorNode());
    11141114    DotAccessorNode* dot = static_cast<DotAccessorNode*>(loc);
    11151115    if (op == OpEqual)
    1116         return new AssignDotNode(dot->base(), dot->identifier(), expr, exprHasAssignments);
    1117     return new ReadModifyDotNode(dot->base(), dot->identifier(), op, expr, exprHasAssignments);
    1118 }
    1119 
    1120 static ExpressionNode* makePrefixNode(ExpressionNode* expr, Operator op)
     1116        return new AssignDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), expr, exprHasAssignments);
     1117    return new ReadModifyDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), op, expr, exprHasAssignments);
     1118}
     1119
     1120static ExpressionNode* makePrefixNode(void* globalPtr, ExpressionNode* expr, Operator op)
    11211121{
    11221122    if (!expr->isLocation())
    1123         return new PrefixErrorNode(expr, op);
     1123        return new PrefixErrorNode(GLOBAL_DATA, expr, op);
    11241124   
    11251125    if (expr->isResolveNode()) {
    11261126        ResolveNode* resolve = static_cast<ResolveNode*>(expr);
    11271127        if (op == OpPlusPlus)
    1128             return new PreIncResolveNode(resolve->identifier());
     1128            return new PreIncResolveNode(GLOBAL_DATA, resolve->identifier());
    11291129        else
    1130             return new PreDecResolveNode(resolve->identifier());
     1130            return new PreDecResolveNode(GLOBAL_DATA, resolve->identifier());
    11311131    }
    11321132    if (expr->isBracketAccessorNode()) {
    11331133        BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr);
    11341134        if (op == OpPlusPlus)
    1135             return new PreIncBracketNode(bracket->base(), bracket->subscript());
     1135            return new PreIncBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript());
    11361136        else
    1137             return new PreDecBracketNode(bracket->base(), bracket->subscript());
     1137            return new PreDecBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript());
    11381138    }
    11391139    ASSERT(expr->isDotAccessorNode());
    11401140    DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr);
    11411141    if (op == OpPlusPlus)
    1142         return new PreIncDotNode(dot->base(), dot->identifier());
    1143     return new PreDecDotNode(dot->base(), dot->identifier());
    1144 }
    1145 
    1146 static ExpressionNode* makePostfixNode(ExpressionNode* expr, Operator op)
     1142        return new PreIncDotNode(GLOBAL_DATA, dot->base(), dot->identifier());
     1143    return new PreDecDotNode(GLOBAL_DATA, dot->base(), dot->identifier());
     1144}
     1145
     1146static ExpressionNode* makePostfixNode(void* globalPtr, ExpressionNode* expr, Operator op)
    11471147{
    11481148    if (!expr->isLocation())
    1149         return new PostfixErrorNode(expr, op);
     1149        return new PostfixErrorNode(GLOBAL_DATA, expr, op);
    11501150   
    11511151    if (expr->isResolveNode()) {
    11521152        ResolveNode* resolve = static_cast<ResolveNode*>(expr);
    11531153        if (op == OpPlusPlus)
    1154             return new PostIncResolveNode(resolve->identifier());
     1154            return new PostIncResolveNode(GLOBAL_DATA, resolve->identifier());
    11551155        else
    1156             return new PostDecResolveNode(resolve->identifier());
     1156            return new PostDecResolveNode(GLOBAL_DATA, resolve->identifier());
    11571157    }
    11581158    if (expr->isBracketAccessorNode()) {
    11591159        BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr);
    11601160        if (op == OpPlusPlus)
    1161             return new PostIncBracketNode(bracket->base(), bracket->subscript());
     1161            return new PostIncBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript());
    11621162        else
    1163             return new PostDecBracketNode(bracket->base(), bracket->subscript());
     1163            return new PostDecBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript());
    11641164    }
    11651165    ASSERT(expr->isDotAccessorNode());
     
    11671167   
    11681168    if (op == OpPlusPlus)
    1169         return new PostIncDotNode(dot->base(), dot->identifier());
    1170     return new PostDecDotNode(dot->base(), dot->identifier());
     1169        return new PostIncDotNode(GLOBAL_DATA, dot->base(), dot->identifier());
     1170    return new PostDecDotNode(GLOBAL_DATA, dot->base(), dot->identifier());
    11711171}
    11721172
     
    11751175    FeatureInfo features = func.m_featureInfo | args.m_featureInfo;
    11761176    if (!func.m_node->isLocation())
    1177         return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallValueNode(func.m_node, args.m_node), features);
     1177        return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallValueNode(GLOBAL_DATA, func.m_node, args.m_node), features);
    11781178    if (func.m_node->isResolveNode()) {
    11791179        ResolveNode* resolve = static_cast<ResolveNode*>(func.m_node);
    11801180        const Identifier& identifier = resolve->identifier();
    11811181        if (identifier == GLOBAL_DATA->propertyNames->eval)
    1182             return createNodeFeatureInfo<ExpressionNode*>(new EvalFunctionCallNode(args.m_node), EvalFeature | features);
    1183         return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallResolveNode(identifier, args.m_node), features);
     1182            return createNodeFeatureInfo<ExpressionNode*>(new EvalFunctionCallNode(GLOBAL_DATA, args.m_node), EvalFeature | features);
     1183        return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallResolveNode(GLOBAL_DATA, identifier, args.m_node), features);
    11841184    }
    11851185    if (func.m_node->isBracketAccessorNode()) {
    11861186        BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(func.m_node);
    1187         return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallBracketNode(bracket->base(), bracket->subscript(), args.m_node), features);
     1187        return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), args.m_node), features);
    11881188    }
    11891189    ASSERT(func.m_node->isDotAccessorNode());
    11901190    DotAccessorNode* dot = static_cast<DotAccessorNode*>(func.m_node);
    1191     return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallDotNode(dot->base(), dot->identifier(), args.m_node), features);
    1192 }
    1193 
    1194 static ExpressionNode* makeTypeOfNode(ExpressionNode* expr)
     1191    return createNodeFeatureInfo<ExpressionNode*>(new FunctionCallDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), args.m_node), features);
     1192}
     1193
     1194static ExpressionNode* makeTypeOfNode(void* globalPtr, ExpressionNode* expr)
    11951195{
    11961196    if (expr->isResolveNode()) {
    11971197        ResolveNode* resolve = static_cast<ResolveNode*>(expr);
    1198         return new TypeOfResolveNode(resolve->identifier());
     1198        return new TypeOfResolveNode(GLOBAL_DATA, resolve->identifier());
    11991199    }
    1200     return new TypeOfValueNode(expr);
    1201 }
    1202 
    1203 static ExpressionNode* makeDeleteNode(ExpressionNode* expr)
     1200    return new TypeOfValueNode(GLOBAL_DATA, expr);
     1201}
     1202
     1203static ExpressionNode* makeDeleteNode(void* globalPtr, ExpressionNode* expr)
    12041204{
    12051205    if (!expr->isLocation())
    1206         return new DeleteValueNode(expr);
     1206        return new DeleteValueNode(GLOBAL_DATA, expr);
    12071207    if (expr->isResolveNode()) {
    12081208        ResolveNode* resolve = static_cast<ResolveNode*>(expr);
    1209         return new DeleteResolveNode(resolve->identifier());
     1209        return new DeleteResolveNode(GLOBAL_DATA, resolve->identifier());
    12101210    }
    12111211    if (expr->isBracketAccessorNode()) {
    12121212        BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr);
    1213         return new DeleteBracketNode(bracket->base(), bracket->subscript());
     1213        return new DeleteBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript());
    12141214    }
    12151215    ASSERT(expr->isDotAccessorNode());
    12161216    DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr);
    1217     return new DeleteDotNode(dot->base(), dot->identifier());
     1217    return new DeleteDotNode(GLOBAL_DATA, dot->base(), dot->identifier());
    12181218}
    12191219
     
    12271227    else
    12281228        return 0;
    1229     return new PropertyNode(name, new FuncExprNode(GLOBAL_DATA->propertyNames->nullIdentifier, body, source, params), type);
    1230 }
    1231 
    1232 static ExpressionNode* makeNegateNode(ExpressionNode* n)
     1229    return new PropertyNode(GLOBAL_DATA, name, new FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, body, source, params), type);
     1230}
     1231
     1232static ExpressionNode* makeNegateNode(void* globalPtr, ExpressionNode* n)
    12331233{
    12341234    if (n->isNumber()) {
     
    12411241    }
    12421242
    1243     return new NegateNode(n);
    1244 }
    1245 
    1246 static NumberNode* makeNumberNode(double d)
     1243    return new NegateNode(GLOBAL_DATA, n);
     1244}
     1245
     1246static NumberNode* makeNumberNode(void* globalPtr, double d)
    12471247{
    12481248    JSValue* value = JSImmediate::from(d);
    12491249    if (value)
    1250         return new ImmediateNumberNode(value, d);
    1251     return new NumberNode(d);
     1250        return new ImmediateNumberNode(GLOBAL_DATA, value, d);
     1251    return new NumberNode(GLOBAL_DATA, d);
    12521252}
    12531253
     
    12641264}
    12651265
    1266 static ExpressionNode* combineVarInitializers(ExpressionNode* list, AssignResolveNode* init)
     1266static ExpressionNode* combineVarInitializers(void* globalPtr, ExpressionNode* list, AssignResolveNode* init)
    12671267{
    12681268    if (!list)
    12691269        return init;
    1270     return new VarDeclCommaNode(list, init);
     1270    return new VarDeclCommaNode(GLOBAL_DATA, list, init);
    12711271}
    12721272
     
    12741274// statements (which later get stripped out), because the actual
    12751275// declaration work is hoisted up to the start of the function body
    1276 static StatementNode* makeVarStatementNode(ExpressionNode* expr)
     1276static StatementNode* makeVarStatementNode(void* globalPtr, ExpressionNode* expr)
    12771277{
    12781278    if (!expr)
    1279         return new EmptyStatementNode();
    1280     return new VarStatementNode(expr);
     1279        return new EmptyStatementNode(GLOBAL_DATA);
     1280    return new VarStatementNode(GLOBAL_DATA, expr);
    12811281}
    12821282
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r34784 r34791  
    107107#endif
    108108
    109 static HashSet<ParserRefCounted*>* newTrackedObjects;
    110 static HashCountedSet<ParserRefCounted*>* trackedObjectExtraRefCounts;
    111 
    112 ParserRefCounted::ParserRefCounted()
     109ParserRefCounted::ParserRefCounted(JSGlobalData* globalData)
     110    : m_globalData(globalData)
    113111{
    114112#ifndef NDEBUG
    115113    ParserRefCountedCounter::increment();
    116114#endif
    117     if (!newTrackedObjects)
    118         newTrackedObjects = new HashSet<ParserRefCounted*>;
    119     newTrackedObjects->add(this);
    120     ASSERT(newTrackedObjects->contains(this));
     115    if (!m_globalData->newTrackedObjects)
     116        m_globalData->newTrackedObjects = new HashSet<ParserRefCounted*>;
     117    m_globalData->newTrackedObjects->add(this);
     118    ASSERT(m_globalData->newTrackedObjects->contains(this));
    121119}
    122120
     
    131129{
    132130    // bumping from 0 to 1 is just removing from the new nodes set
    133     if (newTrackedObjects) {
    134         HashSet<ParserRefCounted*>::iterator it = newTrackedObjects->find(this);
    135         if (it != newTrackedObjects->end()) {
    136             newTrackedObjects->remove(it);
    137             ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(this));
     131    if (m_globalData->newTrackedObjects) {
     132        HashSet<ParserRefCounted*>::iterator it = m_globalData->newTrackedObjects->find(this);
     133        if (it != m_globalData->newTrackedObjects->end()) {
     134            m_globalData->newTrackedObjects->remove(it);
     135            ASSERT(!m_globalData->trackedObjectExtraRefCounts || !m_globalData->trackedObjectExtraRefCounts->contains(this));
    138136            return;
    139137        }
    140138    }
    141139
    142     ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this));
    143 
    144     if (!trackedObjectExtraRefCounts)
    145         trackedObjectExtraRefCounts = new HashCountedSet<ParserRefCounted*>;
    146     trackedObjectExtraRefCounts->add(this);
     140    ASSERT(!m_globalData->newTrackedObjects || !m_globalData->newTrackedObjects->contains(this));
     141
     142    if (!m_globalData->trackedObjectExtraRefCounts)
     143        m_globalData->trackedObjectExtraRefCounts = new HashCountedSet<ParserRefCounted*>;
     144    m_globalData->trackedObjectExtraRefCounts->add(this);
    147145}
    148146
    149147void ParserRefCounted::deref()
    150148{
    151     ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this));
    152 
    153     if (!trackedObjectExtraRefCounts) {
     149    ASSERT(!m_globalData->newTrackedObjects || !m_globalData->newTrackedObjects->contains(this));
     150
     151    if (!m_globalData->trackedObjectExtraRefCounts) {
    154152        delete this;
    155153        return;
    156154    }
    157155
    158     HashCountedSet<ParserRefCounted*>::iterator it = trackedObjectExtraRefCounts->find(this);
    159     if (it == trackedObjectExtraRefCounts->end())
     156    HashCountedSet<ParserRefCounted*>::iterator it = m_globalData->trackedObjectExtraRefCounts->find(this);
     157    if (it == m_globalData->trackedObjectExtraRefCounts->end())
    160158        delete this;
    161159    else
    162         trackedObjectExtraRefCounts->remove(it);
     160        m_globalData->trackedObjectExtraRefCounts->remove(it);
    163161}
    164162
    165163bool ParserRefCounted::hasOneRef()
    166164{
    167     if (newTrackedObjects && newTrackedObjects->contains(this)) {
    168         ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(this));
     165    if (m_globalData->newTrackedObjects && m_globalData->newTrackedObjects->contains(this)) {
     166        ASSERT(!m_globalData->trackedObjectExtraRefCounts || !m_globalData->trackedObjectExtraRefCounts->contains(this));
    169167        return false;
    170168    }
    171169
    172     ASSERT(!newTrackedObjects || !newTrackedObjects->contains(this));
    173 
    174     if (!trackedObjectExtraRefCounts)
     170    ASSERT(!m_globalData->newTrackedObjects || !m_globalData->newTrackedObjects->contains(this));
     171
     172    if (!m_globalData->trackedObjectExtraRefCounts)
    175173        return true;
    176174
    177     return !trackedObjectExtraRefCounts->contains(this);
    178 }
    179 
    180 void ParserRefCounted::deleteNewObjects()
    181 {
    182     if (!newTrackedObjects)
     175    return !m_globalData->trackedObjectExtraRefCounts->contains(this);
     176}
     177
     178void ParserRefCounted::deleteNewObjects(JSGlobalData* globalData)
     179{
     180    if (!globalData->newTrackedObjects)
    183181        return;
    184182
    185183#ifndef NDEBUG
    186     HashSet<ParserRefCounted*>::iterator end = newTrackedObjects->end();
    187     for (HashSet<ParserRefCounted*>::iterator it = newTrackedObjects->begin(); it != end; ++it)
    188         ASSERT(!trackedObjectExtraRefCounts || !trackedObjectExtraRefCounts->contains(*it));
     184    HashSet<ParserRefCounted*>::iterator end = globalData->newTrackedObjects->end();
     185    for (HashSet<ParserRefCounted*>::iterator it = globalData->newTrackedObjects->begin(); it != end; ++it)
     186        ASSERT(!globalData->trackedObjectExtraRefCounts || !globalData->trackedObjectExtraRefCounts->contains(*it));
    189187#endif
    190     deleteAllValues(*newTrackedObjects);
    191     delete newTrackedObjects;
    192     newTrackedObjects = 0;
    193 }
    194 
    195 Node::Node()
    196     : m_expectedReturnType(ObjectType)
    197 {
    198     m_line = JSGlobalData::threadInstance().lexer->lineNo();
    199 }
    200 
    201 Node::Node(JSType expectedReturn)
    202     : m_expectedReturnType(expectedReturn)
    203 {
    204     m_line = JSGlobalData::threadInstance().lexer->lineNo();
     188    deleteAllValues(*globalData->newTrackedObjects);
     189    delete globalData->newTrackedObjects;
     190    globalData->newTrackedObjects = 0;
     191}
     192
     193Node::Node(JSGlobalData* globalData)
     194    : ParserRefCounted(globalData)
     195    , m_expectedReturnType(ObjectType)
     196{
     197    m_line = globalData->lexer->lineNo();
     198}
     199
     200Node::Node(JSGlobalData* globalData, JSType expectedReturn)
     201    : ParserRefCounted(globalData)
     202    , m_expectedReturnType(expectedReturn)
     203{
     204    m_line = globalData->lexer->lineNo();
    205205}
    206206
     
    248248// ------------------------------ StatementNode --------------------------------
    249249
    250 StatementNode::StatementNode()
    251     : m_lastLine(-1)
     250StatementNode::StatementNode(JSGlobalData* globalData)
     251    : Node(globalData)
     252    , m_lastLine(-1)
    252253{
    253254    m_line = -1;
     
    272273// ------------------------------ BreakpointCheckStatement --------------------------------
    273274
    274 BreakpointCheckStatement::BreakpointCheckStatement(PassRefPtr<StatementNode> statement)
    275     : m_statement(statement)
     275BreakpointCheckStatement::BreakpointCheckStatement(JSGlobalData* globalData, PassRefPtr<StatementNode> statement)
     276    : StatementNode(globalData)
     277    , m_statement(statement)
    276278{
    277279    ASSERT(m_statement);
     
    10231025// ------------------------------ ConstDeclNode ----------------------------------
    10241026
    1025 ConstDeclNode::ConstDeclNode(const Identifier& ident, ExpressionNode* init)
    1026     : m_ident(ident)
     1027ConstDeclNode::ConstDeclNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* init)
     1028    : ExpressionNode(globalData)
     1029    , m_ident(ident)
    10271030    , m_init(init)
    10281031{
     
    11071110// ------------------------------ BlockNode ------------------------------------
    11081111
    1109 BlockNode::BlockNode(SourceElements* children)
     1112BlockNode::BlockNode(JSGlobalData* globalData, SourceElements* children)
     1113    : StatementNode(globalData)
    11101114{
    11111115    if (children)
     
    12651269// ------------------------------ ForInNode ------------------------------------
    12661270
    1267 ForInNode::ForInNode(ExpressionNode* l, ExpressionNode* expr, StatementNode* statement)
    1268     : m_init(0L)
     1271ForInNode::ForInNode(JSGlobalData* globalData, ExpressionNode* l, ExpressionNode* expr, StatementNode* statement)
     1272    : StatementNode(globalData)
     1273    , m_init(0L)
    12691274    , m_lexpr(l)
    12701275    , m_expr(expr)
     
    12741279}
    12751280
    1276 ForInNode::ForInNode(const Identifier& ident, ExpressionNode* in, ExpressionNode* expr, StatementNode* statement)
    1277     : m_ident(ident)
    1278     , m_lexpr(new ResolveNode(ident))
     1281ForInNode::ForInNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* in, ExpressionNode* expr, StatementNode* statement)
     1282    : StatementNode(globalData)
     1283    , m_ident(ident)
     1284    , m_lexpr(new ResolveNode(globalData, ident))
    12791285    , m_expr(expr)
    12801286    , m_statement(statement)
     
    12821288{
    12831289    if (in)
    1284         m_init = new AssignResolveNode(ident, in, true);
     1290        m_init = new AssignResolveNode(globalData,ident, in, true);
    12851291    // for( var foo = bar in baz )
    12861292}
     
    15661572// ------------------------------ FunctionBodyNode -----------------------------
    15671573
    1568 ScopeNode::ScopeNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1569     : BlockNode(children)
    1570     , m_sourceURL(JSGlobalData::threadInstance().parser->sourceURL())
    1571     , m_sourceId(JSGlobalData::threadInstance().parser->sourceId())
     1574ScopeNode::ScopeNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1575    : BlockNode(globalData, children)
     1576    , m_sourceURL(globalData->parser->sourceURL())
     1577    , m_sourceId(globalData->parser->sourceId())
    15721578    , m_usesEval(usesEval)
    15731579    , m_needsClosure(needsClosure)
     
    15811587// ------------------------------ ProgramNode -----------------------------
    15821588
    1583 ProgramNode::ProgramNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1584     : ScopeNode(children, varStack, funcStack, usesEval, needsClosure)
    1585 {
    1586 }
    1587 
    1588 ProgramNode* ProgramNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1589 {
    1590     return new ProgramNode(children, varStack, funcStack, usesEval, needsClosure);
     1589ProgramNode::ProgramNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1590    : ScopeNode(globalData, children, varStack, funcStack, usesEval, needsClosure)
     1591{
     1592}
     1593
     1594ProgramNode* ProgramNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1595{
     1596    return new ProgramNode(globalData, children, varStack, funcStack, usesEval, needsClosure);
    15911597}
    15921598
    15931599// ------------------------------ EvalNode -----------------------------
    15941600
    1595 EvalNode::EvalNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1596     : ScopeNode(children, varStack, funcStack, usesEval, needsClosure)
     1601EvalNode::EvalNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1602    : ScopeNode(globalData, children, varStack, funcStack, usesEval, needsClosure)
    15971603{
    15981604}
     
    16241630}
    16251631
    1626 EvalNode* EvalNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1627 {
    1628     return new EvalNode(children, varStack, funcStack, usesEval, needsClosure);
     1632EvalNode* EvalNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1633{
     1634    return new EvalNode(globalData, children, varStack, funcStack, usesEval, needsClosure);
    16291635}
    16301636
    16311637// ------------------------------ FunctionBodyNode -----------------------------
    16321638
    1633 FunctionBodyNode::FunctionBodyNode(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1634     : ScopeNode(children, varStack, funcStack, usesEval, needsClosure)
     1639FunctionBodyNode::FunctionBodyNode(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1640    : ScopeNode(globalData, children, varStack, funcStack, usesEval, needsClosure)
    16351641{
    16361642}
     
    16421648}
    16431649
    1644 FunctionBodyNode* FunctionBodyNode::create(SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
    1645 {
    1646     return new FunctionBodyNode(children, varStack, funcStack, usesEval, needsClosure);
     1650FunctionBodyNode* FunctionBodyNode::create(JSGlobalData* globalData, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, bool usesEval, bool needsClosure)
     1651{
     1652    return new FunctionBodyNode(globalData, children, varStack, funcStack, usesEval, needsClosure);
    16471653}
    16481654
  • trunk/JavaScriptCore/kjs/nodes.h

    r34711 r34791  
    120120    class ParserRefCounted : Noncopyable {
    121121    protected:
    122         ParserRefCounted() KJS_FAST_CALL;
     122        ParserRefCounted(JSGlobalData*) KJS_FAST_CALL;
    123123        ParserRefCounted(PlacementNewAdoptType) KJS_FAST_CALL
    124124        {
    125125        }
     126
     127        JSGlobalData* m_globalData;
    126128
    127129    public:
     
    130132        bool hasOneRef() KJS_FAST_CALL;
    131133
    132         static void deleteNewObjects() KJS_FAST_CALL;
     134        static void deleteNewObjects(JSGlobalData*) KJS_FAST_CALL;
    133135
    134136        virtual ~ParserRefCounted();
     
    141143        typedef DeclarationStacks::FunctionStack FunctionStack;
    142144
    143         Node() KJS_FAST_CALL;
     145        Node(JSGlobalData*) KJS_FAST_CALL;
    144146        Node(PlacementNewAdoptType placementAdopt) KJS_FAST_CALL
    145147            : ParserRefCounted(placementAdopt)
     
    187189       
    188190    protected:
    189         Node(JSType) KJS_FAST_CALL; // used by ExpressionNode
     191        Node(JSGlobalData*, JSType) KJS_FAST_CALL; // used by ExpressionNode
    190192
    191193        RegisterID* emitThrowError(CodeGenerator&, ErrorType, const char* msg);
     
    198200    class ExpressionNode : public Node {
    199201    public:
    200         ExpressionNode() KJS_FAST_CALL : Node() {}
    201         ExpressionNode(JSType expectedReturn) KJS_FAST_CALL
    202             : Node(expectedReturn)
     202        ExpressionNode(JSGlobalData* globalData) KJS_FAST_CALL : Node(globalData) {}
     203        ExpressionNode(JSGlobalData* globalData, JSType expectedReturn) KJS_FAST_CALL
     204            : Node(globalData, expectedReturn)
    203205        {
    204206        }
     
    225227    class StatementNode : public Node {
    226228    public:
    227         StatementNode() KJS_FAST_CALL;
     229        StatementNode(JSGlobalData*) KJS_FAST_CALL;
    228230        void setLoc(int line0, int line1) KJS_FAST_CALL;
    229231        int firstLine() const KJS_FAST_CALL { return lineNo(); }
     
    243245    class NullNode : public ExpressionNode {
    244246    public:
    245         NullNode() KJS_FAST_CALL
    246             : ExpressionNode(NullType)
     247        NullNode(JSGlobalData* globalData) KJS_FAST_CALL
     248            : ExpressionNode(globalData, NullType)
    247249        {
    248250        }
     
    256258    class BooleanNode : public ExpressionNode {
    257259    public:
    258         BooleanNode(bool value) KJS_FAST_CALL
    259             : ExpressionNode(BooleanType)
     260        BooleanNode(JSGlobalData* globalData, bool value) KJS_FAST_CALL
     261            : ExpressionNode(globalData, BooleanType)
    260262            , m_value(value)
    261263        {
     
    274276    class NumberNode : public ExpressionNode {
    275277    public:
    276         NumberNode(double v) KJS_FAST_CALL
    277             : ExpressionNode(NumberType)
     278        NumberNode(JSGlobalData* globalData, double v) KJS_FAST_CALL
     279            : ExpressionNode(globalData, NumberType)
    278280            , m_double(v)
    279281        {
     
    296298    class ImmediateNumberNode : public NumberNode {
    297299    public:
    298         ImmediateNumberNode(JSValue* v, double d) KJS_FAST_CALL
    299             : NumberNode(d)
     300        ImmediateNumberNode(JSGlobalData* globalData, JSValue* v, double d) KJS_FAST_CALL
     301            : NumberNode(globalData, d)
    300302            , m_value(v)
    301303        {
     
    311313    class StringNode : public ExpressionNode {
    312314    public:
    313         StringNode(const UString* v) KJS_FAST_CALL
    314             : ExpressionNode(StringType)
     315        StringNode(JSGlobalData* globalData, const UString* v) KJS_FAST_CALL
     316            : ExpressionNode(globalData, StringType)
    315317            , m_value(*v)
    316318        {
     
    329331    class RegExpNode : public ExpressionNode {
    330332    public:
    331         RegExpNode(const UString& pattern, const UString& flags) KJS_FAST_CALL
    332             : m_regExp(RegExp::create(pattern, flags))
     333        RegExpNode(JSGlobalData* globalData, const UString& pattern, const UString& flags) KJS_FAST_CALL
     334            : ExpressionNode(globalData)
     335            , m_regExp(RegExp::create(pattern, flags))
    333336        {
    334337        }
     
    345348    class ThisNode : public ExpressionNode {
    346349    public:
    347         ThisNode() KJS_FAST_CALL
     350        ThisNode(JSGlobalData* globalData) KJS_FAST_CALL
     351            : ExpressionNode(globalData)
    348352        {
    349353        }
     
    357361    class ResolveNode : public ExpressionNode {
    358362    public:
    359         ResolveNode(const Identifier& ident) KJS_FAST_CALL
    360             : m_ident(ident)
     363        ResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     364            : ExpressionNode(globalData)
     365            , m_ident(ident)
    361366        {
    362367        }
     
    387392    class ElementNode : public Node {
    388393    public:
    389         ElementNode(int elision, ExpressionNode* node) KJS_FAST_CALL
    390             : m_elision(elision)
     394        ElementNode(JSGlobalData* globalData, int elision, ExpressionNode* node) KJS_FAST_CALL
     395            : Node(globalData)
     396            , m_elision(elision)
    391397            , m_node(node)
    392398        {
    393399        }
    394400
    395         ElementNode(ElementNode* l, int elision, ExpressionNode* node) KJS_FAST_CALL
    396             : m_elision(elision)
     401        ElementNode(JSGlobalData* globalData, ElementNode* l, int elision, ExpressionNode* node) KJS_FAST_CALL
     402            : Node(globalData)
     403            , m_elision(elision)
    397404            , m_node(node)
    398405        {
     
    414421    class ArrayNode : public ExpressionNode {
    415422    public:
    416         ArrayNode(int elision) KJS_FAST_CALL
    417             : m_elision(elision)
     423        ArrayNode(JSGlobalData* globalData, int elision) KJS_FAST_CALL
     424            : ExpressionNode(globalData)
     425            , m_elision(elision)
    418426            , m_optional(true)
    419427        {
    420428        }
    421429
    422         ArrayNode(ElementNode* element) KJS_FAST_CALL
    423             : m_element(element)
     430        ArrayNode(JSGlobalData* globalData, ElementNode* element) KJS_FAST_CALL
     431            : ExpressionNode(globalData)
     432            , m_element(element)
    424433            , m_elision(0)
    425434            , m_optional(false)
     
    427436        }
    428437
    429         ArrayNode(int elision, ElementNode* element) KJS_FAST_CALL
    430             : m_element(element)
     438        ArrayNode(JSGlobalData* globalData, int elision, ElementNode* element) KJS_FAST_CALL
     439            : ExpressionNode(globalData)
     440            , m_element(element)
    431441            , m_elision(elision)
    432442            , m_optional(true)
     
    449459        enum Type { Constant, Getter, Setter };
    450460
    451         PropertyNode(const Identifier& name, ExpressionNode* assign, Type type) KJS_FAST_CALL
    452             : m_name(name)
     461        PropertyNode(JSGlobalData* globalData, const Identifier& name, ExpressionNode* assign, Type type) KJS_FAST_CALL
     462            : Node(globalData)
     463            , m_name(name)
    453464            , m_assign(assign)
    454465            , m_type(type)
     
    470481    class PropertyListNode : public Node {
    471482    public:
    472         PropertyListNode(PropertyNode* node) KJS_FAST_CALL
    473             : m_node(node)
    474         {
    475         }
    476 
    477         PropertyListNode(PropertyNode* node, PropertyListNode* list) KJS_FAST_CALL
    478             : m_node(node)
     483        PropertyListNode(JSGlobalData* globalData, PropertyNode* node) KJS_FAST_CALL
     484            : Node(globalData)
     485            , m_node(node)
     486        {
     487        }
     488
     489        PropertyListNode(JSGlobalData* globalData, PropertyNode* node, PropertyListNode* list) KJS_FAST_CALL
     490            : Node(globalData)
     491            , m_node(node)
    479492        {
    480493            list->m_next = this;
     
    495508    class ObjectLiteralNode : public ExpressionNode {
    496509    public:
    497         ObjectLiteralNode() KJS_FAST_CALL
    498         {
    499         }
    500 
    501         ObjectLiteralNode(PropertyListNode* list) KJS_FAST_CALL
    502             : m_list(list)
     510        ObjectLiteralNode(JSGlobalData* globalData) KJS_FAST_CALL
     511            : ExpressionNode(globalData)
     512        {
     513        }
     514
     515        ObjectLiteralNode(JSGlobalData* globalData, PropertyListNode* list) KJS_FAST_CALL
     516            : ExpressionNode(globalData)
     517            , m_list(list)
    503518        {
    504519        }
     
    515530    class BracketAccessorNode : public ExpressionNode {
    516531    public:
    517         BracketAccessorNode(ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments) KJS_FAST_CALL
    518             : m_base(base)
     532        BracketAccessorNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, bool subscriptHasAssignments) KJS_FAST_CALL
     533            : ExpressionNode(globalData)
     534            , m_base(base)
    519535            , m_subscript(subscript)
    520536            , m_subscriptHasAssignments(subscriptHasAssignments)
     
    540556    class DotAccessorNode : public ExpressionNode {
    541557    public:
    542         DotAccessorNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    543             : m_base(base)
     558        DotAccessorNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     559            : ExpressionNode(globalData)
     560            , m_base(base)
    544561            , m_ident(ident)
    545562        {
     
    562579    class ArgumentListNode : public Node {
    563580    public:
    564         ArgumentListNode(ExpressionNode* expr) KJS_FAST_CALL
    565             : m_expr(expr)
    566         {
    567         }
    568 
    569         ArgumentListNode(ArgumentListNode* listNode, ExpressionNode* expr) KJS_FAST_CALL
    570             : m_expr(expr)
     581        ArgumentListNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     582            : Node(globalData)
     583            , m_expr(expr)
     584        {
     585        }
     586
     587        ArgumentListNode(JSGlobalData* globalData, ArgumentListNode* listNode, ExpressionNode* expr) KJS_FAST_CALL
     588            : Node(globalData)
     589            , m_expr(expr)
    571590        {
    572591            listNode->m_next = this;
     
    585604    class ArgumentsNode : public Node {
    586605    public:
    587         ArgumentsNode() KJS_FAST_CALL
    588         {
    589         }
    590 
    591         ArgumentsNode(ArgumentListNode* listNode) KJS_FAST_CALL
    592             : m_listNode(listNode)
     606        ArgumentsNode(JSGlobalData* globalData) KJS_FAST_CALL
     607            : Node(globalData)
     608        {
     609        }
     610
     611        ArgumentsNode(JSGlobalData* globalData, ArgumentListNode* listNode) KJS_FAST_CALL
     612            : Node(globalData)
     613            , m_listNode(listNode)
    593614        {
    594615        }
     
    602623    class NewExprNode : public ExpressionNode {
    603624    public:
    604         NewExprNode(ExpressionNode* expr) KJS_FAST_CALL
    605             : m_expr(expr)
    606         {
    607         }
    608 
    609         NewExprNode(ExpressionNode* expr, ArgumentsNode* args) KJS_FAST_CALL
    610             : m_expr(expr)
     625        NewExprNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     626            : ExpressionNode(globalData)
     627            , m_expr(expr)
     628        {
     629        }
     630
     631        NewExprNode(JSGlobalData* globalData, ExpressionNode* expr, ArgumentsNode* args) KJS_FAST_CALL
     632            : ExpressionNode(globalData)
     633            , m_expr(expr)
    611634            , m_args(args)
    612635        {
     
    625648    class EvalFunctionCallNode : public ExpressionNode {
    626649    public:
    627         EvalFunctionCallNode(ArgumentsNode* args) KJS_FAST_CALL
    628             : m_args(args)
     650        EvalFunctionCallNode(JSGlobalData* globalData, ArgumentsNode* args) KJS_FAST_CALL
     651            : ExpressionNode(globalData)
     652            , m_args(args)
    629653        {
    630654        }
     
    640664    class FunctionCallValueNode : public ExpressionNode {
    641665    public:
    642         FunctionCallValueNode(ExpressionNode* expr, ArgumentsNode* args) KJS_FAST_CALL
    643             : m_expr(expr)
     666        FunctionCallValueNode(JSGlobalData* globalData, ExpressionNode* expr, ArgumentsNode* args) KJS_FAST_CALL
     667            : ExpressionNode(globalData)
     668            , m_expr(expr)
    644669            , m_args(args)
    645670        {
     
    657682    class FunctionCallResolveNode : public ExpressionNode {
    658683    public:
    659         FunctionCallResolveNode(const Identifier& ident, ArgumentsNode* args) KJS_FAST_CALL
    660             : m_ident(ident)
     684        FunctionCallResolveNode(JSGlobalData* globalData, const Identifier& ident, ArgumentsNode* args) KJS_FAST_CALL
     685            : ExpressionNode(globalData)
     686            , m_ident(ident)
    661687            , m_args(args)
    662688        {
     
    684710    class FunctionCallBracketNode : public ExpressionNode {
    685711    public:
    686         FunctionCallBracketNode(ExpressionNode* base, ExpressionNode* subscript, ArgumentsNode* args) KJS_FAST_CALL
    687             : m_base(base)
     712        FunctionCallBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, ArgumentsNode* args) KJS_FAST_CALL
     713            : ExpressionNode(globalData)
     714            , m_base(base)
    688715            , m_subscript(subscript)
    689716            , m_args(args)
     
    703730    class FunctionCallDotNode : public ExpressionNode {
    704731    public:
    705         FunctionCallDotNode(ExpressionNode* base, const Identifier& ident, ArgumentsNode* args) KJS_FAST_CALL
    706             : m_base(base)
     732        FunctionCallDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, ArgumentsNode* args) KJS_FAST_CALL
     733            : ExpressionNode(globalData)
     734            , m_base(base)
    707735            , m_ident(ident)
    708736            , m_args(args)
     
    722750    class PrePostResolveNode : public ExpressionNode {
    723751    public:
    724         PrePostResolveNode(const Identifier& ident) KJS_FAST_CALL
    725             : ExpressionNode(NumberType)
     752        PrePostResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     753            : ExpressionNode(globalData, NumberType)
    726754            , m_ident(ident)
    727755        {
     
    741769    class PostIncResolveNode : public PrePostResolveNode {
    742770    public:
    743         PostIncResolveNode(const Identifier& ident) KJS_FAST_CALL
    744             : PrePostResolveNode(ident)
     771        PostIncResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     772            : PrePostResolveNode(globalData, ident)
    745773        {
    746774        }
     
    758786    class PostDecResolveNode : public PrePostResolveNode {
    759787    public:
    760         PostDecResolveNode(const Identifier& ident) KJS_FAST_CALL
    761             : PrePostResolveNode(ident)
     788        PostDecResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     789            : PrePostResolveNode(globalData, ident)
    762790        {
    763791        }
     
    776804    class PostfixBracketNode : public ExpressionNode {
    777805    public:
    778         PostfixBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    779             : m_base(base)
     806        PostfixBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     807            : ExpressionNode(globalData)
     808            , m_base(base)
    780809            , m_subscript(subscript)
    781810        {
     
    791820    class PostIncBracketNode : public PostfixBracketNode {
    792821    public:
    793         PostIncBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    794             : PostfixBracketNode(base, subscript)
     822        PostIncBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     823            : PostfixBracketNode(globalData, base, subscript)
    795824        {
    796825        }
     
    803832    class PostDecBracketNode : public PostfixBracketNode {
    804833    public:
    805         PostDecBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    806             : PostfixBracketNode(base, subscript)
     834        PostDecBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     835            : PostfixBracketNode(globalData, base, subscript)
    807836        {
    808837        }
     
    815844    class PostfixDotNode : public ExpressionNode {
    816845    public:
    817         PostfixDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    818             : m_base(base)
     846        PostfixDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     847            : ExpressionNode(globalData)
     848            , m_base(base)
    819849            , m_ident(ident)
    820850        {
     
    830860    class PostIncDotNode : public PostfixDotNode {
    831861    public:
    832         PostIncDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    833             : PostfixDotNode(base, ident)
     862        PostIncDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     863            : PostfixDotNode(globalData, base, ident)
    834864        {
    835865        }
     
    842872    class PostDecDotNode : public PostfixDotNode {
    843873    public:
    844         PostDecDotNode(ExpressionNode*  base, const Identifier& ident) KJS_FAST_CALL
    845             : PostfixDotNode(base, ident)
     874        PostDecDotNode(JSGlobalData* globalData, ExpressionNode*  base, const Identifier& ident) KJS_FAST_CALL
     875            : PostfixDotNode(globalData, base, ident)
    846876        {
    847877        }
     
    854884    class PostfixErrorNode : public ExpressionNode {
    855885    public:
    856         PostfixErrorNode(ExpressionNode* expr, Operator oper) KJS_FAST_CALL
    857             : m_expr(expr)
     886        PostfixErrorNode(JSGlobalData* globalData, ExpressionNode* expr, Operator oper) KJS_FAST_CALL
     887            : ExpressionNode(globalData)
     888            , m_expr(expr)
    858889            , m_operator(oper)
    859890        {
     
    871902    class DeleteResolveNode : public ExpressionNode {
    872903    public:
    873         DeleteResolveNode(const Identifier& ident) KJS_FAST_CALL
    874             : m_ident(ident)
     904        DeleteResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     905            : ExpressionNode(globalData)
     906            , m_ident(ident)
    875907        {
    876908        }
     
    893925    class DeleteBracketNode : public ExpressionNode {
    894926    public:
    895         DeleteBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    896             : m_base(base)
     927        DeleteBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     928            : ExpressionNode(globalData)
     929            , m_base(base)
    897930            , m_subscript(subscript)
    898931        {
     
    911944    class DeleteDotNode : public ExpressionNode {
    912945    public:
    913         DeleteDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    914             : m_base(base)
     946        DeleteDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     947            : ExpressionNode(globalData)
     948            , m_base(base)
    915949            , m_ident(ident)
    916950        {
     
    929963    class DeleteValueNode : public ExpressionNode {
    930964    public:
    931         DeleteValueNode(ExpressionNode* expr) KJS_FAST_CALL
    932             : m_expr(expr)
     965        DeleteValueNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     966            : ExpressionNode(globalData)
     967            , m_expr(expr)
    933968        {
    934969        }
     
    945980    class VoidNode : public ExpressionNode {
    946981    public:
    947         VoidNode(ExpressionNode* expr) KJS_FAST_CALL
    948             : m_expr(expr)
     982        VoidNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     983            : ExpressionNode(globalData)
     984            , m_expr(expr)
    949985        {
    950986        }
     
    961997    class TypeOfResolveNode : public ExpressionNode {
    962998    public:
    963         TypeOfResolveNode(const Identifier& ident) KJS_FAST_CALL
    964             : ExpressionNode(StringType)
     999        TypeOfResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     1000            : ExpressionNode(globalData, StringType)
    9651001            , m_ident(ident)
    9661002        {
     
    9881024    class TypeOfValueNode : public ExpressionNode {
    9891025    public:
    990         TypeOfValueNode(ExpressionNode* expr) KJS_FAST_CALL
    991             : ExpressionNode(StringType)
     1026        TypeOfValueNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1027            : ExpressionNode(globalData, StringType)
    9921028            , m_expr(expr)
    9931029        {
     
    10051041    class PreIncResolveNode : public PrePostResolveNode {
    10061042    public:
    1007         PreIncResolveNode(const Identifier& ident) KJS_FAST_CALL
    1008             : PrePostResolveNode(ident)
     1043        PreIncResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     1044            : PrePostResolveNode(globalData, ident)
    10091045        {
    10101046        }
     
    10231059    class PreDecResolveNode : public PrePostResolveNode {
    10241060    public:
    1025         PreDecResolveNode(const Identifier& ident) KJS_FAST_CALL
    1026             : PrePostResolveNode(ident)
     1061        PreDecResolveNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     1062            : PrePostResolveNode(globalData, ident)
    10271063        {
    10281064        }
     
    10411077    class PrefixBracketNode : public ExpressionNode {
    10421078    public:
    1043         PrefixBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    1044             : m_base(base)
     1079        PrefixBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     1080            : ExpressionNode(globalData)
     1081            , m_base(base)
    10451082            , m_subscript(subscript)
    10461083        {
     
    10561093    class PreIncBracketNode : public PrefixBracketNode {
    10571094    public:
    1058         PreIncBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    1059             : PrefixBracketNode(base, subscript)
     1095        PreIncBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     1096            : PrefixBracketNode(globalData, base, subscript)
    10601097        {
    10611098        }
     
    10681105    class PreDecBracketNode : public PrefixBracketNode {
    10691106    public:
    1070         PreDecBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
    1071             : PrefixBracketNode(base, subscript)
     1107        PreDecBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL
     1108            : PrefixBracketNode(globalData, base, subscript)
    10721109        {
    10731110        }
     
    10801117    class PrefixDotNode : public ExpressionNode {
    10811118    public:
    1082         PrefixDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    1083             : m_base(base)
     1119        PrefixDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     1120            : ExpressionNode(globalData)
     1121            , m_base(base)
    10841122            , m_ident(ident)
    10851123        {
     
    10951133    class PreIncDotNode : public PrefixDotNode {
    10961134    public:
    1097         PreIncDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    1098             : PrefixDotNode(base, ident)
     1135        PreIncDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     1136            : PrefixDotNode(globalData, base, ident)
    10991137        {
    11001138        }
     
    11071145    class PreDecDotNode : public PrefixDotNode {
    11081146    public:
    1109         PreDecDotNode(ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
    1110             : PrefixDotNode(base, ident)
     1147        PreDecDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident) KJS_FAST_CALL
     1148            : PrefixDotNode(globalData, base, ident)
    11111149        {
    11121150        }
     
    11191157    class PrefixErrorNode : public ExpressionNode {
    11201158    public:
    1121         PrefixErrorNode(ExpressionNode* expr, Operator oper) KJS_FAST_CALL
    1122             : m_expr(expr)
     1159        PrefixErrorNode(JSGlobalData* globalData, ExpressionNode* expr, Operator oper) KJS_FAST_CALL
     1160            : ExpressionNode(globalData)
     1161            , m_expr(expr)
    11231162            , m_operator(oper)
    11241163        {
     
    11361175    class UnaryOpNode : public ExpressionNode {
    11371176    public:
    1138         UnaryOpNode(ExpressionNode* expr)
    1139             : m_expr(expr)
    1140         {
    1141         }
    1142 
    1143         UnaryOpNode(JSType type, ExpressionNode* expr)
    1144             : ExpressionNode(type)
     1177        UnaryOpNode(JSGlobalData* globalData, ExpressionNode* expr)
     1178            : ExpressionNode(globalData)
    11451179            , m_expr(expr)
    11461180        {
    11471181        }
    11481182
     1183        UnaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* expr)
     1184            : ExpressionNode(globalData, type)
     1185            , m_expr(expr)
     1186        {
     1187        }
     1188
    11491189        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    11501190        virtual OpcodeID opcode() const KJS_FAST_CALL = 0;
     
    11561196    class UnaryPlusNode : public UnaryOpNode {
    11571197    public:
    1158         UnaryPlusNode(ExpressionNode* expr) KJS_FAST_CALL
    1159             : UnaryOpNode(NumberType, expr)
     1198        UnaryPlusNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1199            : UnaryOpNode(globalData, NumberType, expr)
    11601200        {
    11611201        }
     
    11681208    class NegateNode : public UnaryOpNode {
    11691209    public:
    1170         NegateNode(ExpressionNode* expr) KJS_FAST_CALL
    1171             : UnaryOpNode(NumberType, expr)
     1210        NegateNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1211            : UnaryOpNode(globalData, NumberType, expr)
    11721212        {
    11731213        }
     
    11801220    class BitwiseNotNode : public UnaryOpNode {
    11811221    public:
    1182         BitwiseNotNode(ExpressionNode* expr) KJS_FAST_CALL
    1183             : UnaryOpNode(NumberType, expr)
     1222        BitwiseNotNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1223            : UnaryOpNode(globalData, NumberType, expr)
    11841224        {
    11851225        }
     
    11921232    class LogicalNotNode : public UnaryOpNode {
    11931233    public:
    1194         LogicalNotNode(ExpressionNode* expr) KJS_FAST_CALL
    1195             : UnaryOpNode(BooleanType, expr)
     1234        LogicalNotNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1235            : UnaryOpNode(globalData, BooleanType, expr)
    11961236        {
    11971237        }
     
    12041244    class BinaryOpNode : public ExpressionNode {
    12051245    public:
    1206         BinaryOpNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
    1207             : m_term1(term1)
    1208             , m_term2(term2)
    1209             , m_rightHasAssignments(rightHasAssignments)
    1210         {
    1211         }
    1212 
    1213         BinaryOpNode(JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
    1214             : ExpressionNode(type)
     1246        BinaryOpNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
     1247            : ExpressionNode(globalData)
    12151248            , m_term1(term1)
    12161249            , m_term2(term2)
     
    12191252        }
    12201253
     1254        BinaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
     1255            : ExpressionNode(globalData, type)
     1256            , m_term1(term1)
     1257            , m_term2(term2)
     1258            , m_rightHasAssignments(rightHasAssignments)
     1259        {
     1260        }
     1261
    12211262        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    12221263        virtual OpcodeID opcode() const KJS_FAST_CALL = 0;
     
    12301271    class ReverseBinaryOpNode : public ExpressionNode {
    12311272    public:
    1232         ReverseBinaryOpNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
    1233             : m_term1(term1)
    1234             , m_term2(term2)
    1235             , m_rightHasAssignments(rightHasAssignments)
    1236         {
    1237         }
    1238 
    1239         ReverseBinaryOpNode(JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
    1240             : ExpressionNode(type)
     1273        ReverseBinaryOpNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
     1274            : ExpressionNode(globalData)
    12411275            , m_term1(term1)
    12421276            , m_term2(term2)
     
    12451279        }
    12461280
     1281        ReverseBinaryOpNode(JSGlobalData* globalData, JSType type, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments)
     1282            : ExpressionNode(globalData, type)
     1283            , m_term1(term1)
     1284            , m_term2(term2)
     1285            , m_rightHasAssignments(rightHasAssignments)
     1286        {
     1287        }
     1288
    12471289        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    12481290        virtual OpcodeID opcode() const KJS_FAST_CALL = 0;
     
    12561298    class MultNode : public BinaryOpNode {
    12571299    public:
    1258         MultNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1259             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1300        MultNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1301            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    12601302        {
    12611303        }
     
    12681310    class DivNode : public BinaryOpNode {
    12691311    public:
    1270         DivNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1271             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1312        DivNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1313            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    12721314        {
    12731315        }
     
    12801322    class ModNode : public BinaryOpNode {
    12811323    public:
    1282         ModNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1283             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1324        ModNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1325            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    12841326        {
    12851327        }
     
    12921334    class AddNode : public BinaryOpNode {
    12931335    public:
    1294         AddNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1295             : BinaryOpNode(term1, term2, rightHasAssignments)
     1336        AddNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1337            : BinaryOpNode(globalData, term1, term2, rightHasAssignments)
    12961338        {
    12971339        }
     
    13041346    class SubNode : public BinaryOpNode {
    13051347    public:
    1306         SubNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1307             : BinaryOpNode(term1, term2, rightHasAssignments)
     1348        SubNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1349            : BinaryOpNode(globalData, term1, term2, rightHasAssignments)
    13081350        {
    13091351        }
     
    13161358    class LeftShiftNode : public BinaryOpNode {
    13171359    public:
    1318         LeftShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1319             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1360        LeftShiftNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1361            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    13201362        {
    13211363        }
     
    13281370    class RightShiftNode : public BinaryOpNode {
    13291371    public:
    1330         RightShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1331             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1372        RightShiftNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1373            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    13321374        {
    13331375        }
     
    13401382    class UnsignedRightShiftNode : public BinaryOpNode {
    13411383    public:
    1342         UnsignedRightShiftNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1343             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1384        UnsignedRightShiftNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1385            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    13441386        {
    13451387        }
     
    13521394    class LessNode : public BinaryOpNode {
    13531395    public:
    1354         LessNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1355             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1396        LessNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1397            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    13561398        {
    13571399        }
     
    13641406    class GreaterNode : public ReverseBinaryOpNode {
    13651407    public:
    1366         GreaterNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1367             : ReverseBinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1408        GreaterNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1409            : ReverseBinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    13681410        {
    13691411        }
     
    13761418    class LessEqNode : public BinaryOpNode {
    13771419    public:
    1378         LessEqNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1379             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1420        LessEqNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1421            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    13801422        {
    13811423        }
     
    13881430    class GreaterEqNode : public ReverseBinaryOpNode {
    13891431    public:
    1390         GreaterEqNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1391             : ReverseBinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1432        GreaterEqNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1433            : ReverseBinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    13921434        {
    13931435        }
     
    14001442    class InstanceOfNode : public BinaryOpNode {
    14011443    public:
    1402         InstanceOfNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1403             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1444        InstanceOfNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1445            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    14041446        {
    14051447        }
     
    14121454    class InNode : public BinaryOpNode {
    14131455    public:
    1414         InNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1415             : BinaryOpNode(term1, term2, rightHasAssignments)
     1456        InNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1457            : BinaryOpNode(globalData, term1, term2, rightHasAssignments)
    14161458        {
    14171459        }
     
    14241466    class EqualNode : public BinaryOpNode {
    14251467    public:
    1426         EqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1427             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1468        EqualNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1469            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    14281470        {
    14291471        }
     
    14361478    class NotEqualNode : public BinaryOpNode {
    14371479    public:
    1438         NotEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1439             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1480        NotEqualNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1481            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    14401482        {
    14411483        }
     
    14481490    class StrictEqualNode : public BinaryOpNode {
    14491491    public:
    1450         StrictEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1451             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1492        StrictEqualNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1493            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    14521494        {
    14531495        }
     
    14601502    class NotStrictEqualNode : public BinaryOpNode {
    14611503    public:
    1462         NotStrictEqualNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1463             : BinaryOpNode(BooleanType, term1, term2, rightHasAssignments)
     1504        NotStrictEqualNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1505            : BinaryOpNode(globalData, BooleanType, term1, term2, rightHasAssignments)
    14641506        {
    14651507        }
     
    14721514    class BitAndNode : public BinaryOpNode {
    14731515    public:
    1474         BitAndNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1475             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1516        BitAndNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1517            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    14761518        {
    14771519        }
     
    14841526    class BitOrNode : public BinaryOpNode {
    14851527    public:
    1486         BitOrNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1487             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1528        BitOrNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1529            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    14881530        {
    14891531        }
     
    14961538    class BitXOrNode : public BinaryOpNode {
    14971539    public:
    1498         BitXOrNode(ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
    1499             : BinaryOpNode(NumberType, term1, term2, rightHasAssignments)
     1540        BitXOrNode(JSGlobalData* globalData, ExpressionNode* term1, ExpressionNode* term2, bool rightHasAssignments) KJS_FAST_CALL
     1541            : BinaryOpNode(globalData, NumberType, term1, term2, rightHasAssignments)
    15001542        {
    15011543        }
     
    15111553    class LogicalAndNode : public ExpressionNode {
    15121554    public:
    1513         LogicalAndNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1514             : ExpressionNode(BooleanType)
     1555        LogicalAndNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
     1556            : ExpressionNode(globalData, BooleanType)
    15151557            , m_expr1(expr1)
    15161558            , m_expr2(expr2)
     
    15291571    class LogicalOrNode : public ExpressionNode {
    15301572    public:
    1531         LogicalOrNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1532             : ExpressionNode(BooleanType)
     1573        LogicalOrNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
     1574            : ExpressionNode(globalData, BooleanType)
    15331575            , m_expr1(expr1)
    15341576            , m_expr2(expr2)
     
    15501592    class ConditionalNode : public ExpressionNode {
    15511593    public:
    1552         ConditionalNode(ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1553             : m_logical(logical)
     1594        ConditionalNode(JSGlobalData* globalData, ExpressionNode* logical, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
     1595            : ExpressionNode(globalData)
     1596            , m_logical(logical)
    15541597            , m_expr1(expr1)
    15551598            , m_expr2(expr2)
     
    15691612    class ReadModifyResolveNode : public ExpressionNode {
    15701613    public:
    1571         ReadModifyResolveNode(const Identifier& ident, Operator oper, ExpressionNode*  right, bool rightHasAssignments) KJS_FAST_CALL
    1572             : m_ident(ident)
     1614        ReadModifyResolveNode(JSGlobalData* globalData, const Identifier& ident, Operator oper, ExpressionNode*  right, bool rightHasAssignments) KJS_FAST_CALL
     1615            : ExpressionNode(globalData)
     1616            , m_ident(ident)
    15731617            , m_right(right)
    15741618            , m_operator(oper)
     
    16001644    class AssignResolveNode : public ExpressionNode {
    16011645    public:
    1602         AssignResolveNode(const Identifier& ident, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
    1603             : m_ident(ident)
     1646        AssignResolveNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
     1647            : ExpressionNode(globalData)
     1648            , m_ident(ident)
    16041649            , m_right(right)
    16051650            , m_rightHasAssignments(rightHasAssignments)
     
    16281673    class ReadModifyBracketNode : public ExpressionNode {
    16291674    public:
    1630         ReadModifyBracketNode(ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments) KJS_FAST_CALL
    1631             : m_base(base)
     1675        ReadModifyBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, Operator oper, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments) KJS_FAST_CALL
     1676            : ExpressionNode(globalData)
     1677            , m_base(base)
    16321678            , m_subscript(subscript)
    16331679            , m_right(right)
     
    16541700    class AssignBracketNode : public ExpressionNode {
    16551701    public:
    1656         AssignBracketNode(ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments) KJS_FAST_CALL
    1657             : m_base(base)
     1702        AssignBracketNode(JSGlobalData* globalData, ExpressionNode* base, ExpressionNode* subscript, ExpressionNode* right, bool subscriptHasAssignments, bool rightHasAssignments) KJS_FAST_CALL
     1703            : ExpressionNode(globalData)
     1704            , m_base(base)
    16581705            , m_subscript(subscript)
    16591706            , m_right(right)
     
    16781725    class AssignDotNode : public ExpressionNode {
    16791726    public:
    1680         AssignDotNode(ExpressionNode* base, const Identifier& ident, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
    1681             : m_base(base)
     1727        AssignDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
     1728            : ExpressionNode(globalData)
     1729            , m_base(base)
    16821730            , m_ident(ident)
    16831731            , m_right(right)
     
    16991747    class ReadModifyDotNode : public ExpressionNode {
    17001748    public:
    1701         ReadModifyDotNode(ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
    1702             : m_base(base)
     1749        ReadModifyDotNode(JSGlobalData* globalData, ExpressionNode* base, const Identifier& ident, Operator oper, ExpressionNode* right, bool rightHasAssignments) KJS_FAST_CALL
     1750            : ExpressionNode(globalData)
     1751            , m_base(base)
    17031752            , m_ident(ident)
    17041753            , m_right(right)
     
    17231772    class AssignErrorNode : public ExpressionNode {
    17241773    public:
    1725         AssignErrorNode(ExpressionNode* left, Operator oper, ExpressionNode* right) KJS_FAST_CALL
    1726             : m_left(left)
     1774        AssignErrorNode(JSGlobalData* globalData, ExpressionNode* left, Operator oper, ExpressionNode* right) KJS_FAST_CALL
     1775            : ExpressionNode(globalData)
     1776            , m_left(left)
    17271777            , m_operator(oper)
    17281778            , m_right(right)
     
    17421792    class CommaNode : public ExpressionNode {
    17431793    public:
    1744         CommaNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1745             : m_expr1(expr1)
     1794        CommaNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
     1795            : ExpressionNode(globalData)
     1796            , m_expr1(expr1)
    17461797            , m_expr2(expr2)
    17471798        {
     
    17591810    class VarDeclCommaNode : public CommaNode {
    17601811    public:
    1761         VarDeclCommaNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1762             : CommaNode(expr1, expr2)
     1812        VarDeclCommaNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
     1813            : CommaNode(globalData, expr1, expr2)
    17631814        {
    17641815        }
     
    17681819    class ConstDeclNode : public ExpressionNode {
    17691820    public:
    1770         ConstDeclNode(const Identifier& ident, ExpressionNode* in) KJS_FAST_CALL;
     1821        ConstDeclNode(JSGlobalData* globalData, const Identifier& ident, ExpressionNode* in) KJS_FAST_CALL;
    17711822
    17721823        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    17841835    class ConstStatementNode : public StatementNode {
    17851836    public:
    1786         ConstStatementNode(ConstDeclNode* next) KJS_FAST_CALL
    1787             : m_next(next)
     1837        ConstStatementNode(JSGlobalData* globalData, ConstDeclNode* next) KJS_FAST_CALL
     1838            : StatementNode(globalData)
     1839            , m_next(next)
    17881840        {
    17891841        }
     
    18011853    class SourceElements : public ParserRefCounted {
    18021854    public:
     1855        SourceElements(JSGlobalData* globalData) : ParserRefCounted(globalData) {}
     1856
    18031857        void append(PassRefPtr<StatementNode>);
    18041858        void releaseContentsIntoVector(StatementVector& destination)
     
    18141868    class BlockNode : public StatementNode {
    18151869    public:
    1816         BlockNode(SourceElements* children) KJS_FAST_CALL;
     1870        BlockNode(JSGlobalData*, SourceElements* children) KJS_FAST_CALL;
    18171871
    18181872        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
     
    18271881    class EmptyStatementNode : public StatementNode {
    18281882    public:
    1829         EmptyStatementNode() KJS_FAST_CALL // debug
     1883        EmptyStatementNode(JSGlobalData* globalData) KJS_FAST_CALL // debug
     1884            : StatementNode(globalData)
    18301885        {
    18311886        }
     
    18391894    class DebuggerStatementNode : public StatementNode {
    18401895    public:
    1841         DebuggerStatementNode() KJS_FAST_CALL
     1896        DebuggerStatementNode(JSGlobalData* globalData) KJS_FAST_CALL
     1897            : StatementNode(globalData)
    18421898        {
    18431899        }
     
    18501906    class ExprStatementNode : public StatementNode {
    18511907    public:
    1852         ExprStatementNode(ExpressionNode* expr) KJS_FAST_CALL
    1853             : m_expr(expr)
     1908        ExprStatementNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1909            : StatementNode(globalData)
     1910            , m_expr(expr)
    18541911        {
    18551912        }
     
    18641921    class VarStatementNode : public StatementNode {
    18651922    public:
    1866         VarStatementNode(ExpressionNode* expr) KJS_FAST_CALL
    1867             : m_expr(expr)
     1923        VarStatementNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     1924            : StatementNode(globalData)
     1925            , m_expr(expr)
    18681926        {
    18691927        }
     
    18791937    class IfNode : public StatementNode {
    18801938    public:
    1881         IfNode(ExpressionNode* condition, StatementNode* ifBlock) KJS_FAST_CALL
    1882             : m_condition(condition)
     1939        IfNode(JSGlobalData* globalData, ExpressionNode* condition, StatementNode* ifBlock) KJS_FAST_CALL
     1940            : StatementNode(globalData)
     1941            , m_condition(condition)
    18831942            , m_ifBlock(ifBlock)
    18841943        {
     
    18951954    class IfElseNode : public IfNode {
    18961955    public:
    1897         IfElseNode(ExpressionNode* condtion, StatementNode* ifBlock, StatementNode* elseBlock) KJS_FAST_CALL
    1898             : IfNode(condtion, ifBlock)
     1956        IfElseNode(JSGlobalData* globalData, ExpressionNode* condition, StatementNode* ifBlock, StatementNode* elseBlock) KJS_FAST_CALL
     1957            : IfNode(globalData, condition, ifBlock)
    18991958            , m_elseBlock(elseBlock)
    19001959        {
     
    19101969    class DoWhileNode : public StatementNode {
    19111970    public:
    1912         DoWhileNode(StatementNode* statement, ExpressionNode* expr) KJS_FAST_CALL
    1913             : m_statement(statement)
     1971        DoWhileNode(JSGlobalData* globalData, StatementNode* statement, ExpressionNode* expr) KJS_FAST_CALL
     1972            : StatementNode(globalData)
     1973            , m_statement(statement)
    19141974            , m_expr(expr)
    19151975        {
     
    19261986    class WhileNode : public StatementNode {
    19271987    public:
    1928         WhileNode(ExpressionNode* expr, StatementNode* statement) KJS_FAST_CALL
    1929             : m_expr(expr)
     1988        WhileNode(JSGlobalData* globalData, ExpressionNode* expr, StatementNode* statement) KJS_FAST_CALL
     1989            : StatementNode(globalData)
     1990            , m_expr(expr)
    19301991            , m_statement(statement)
    19311992        {
     
    19422003    class ForNode : public StatementNode {
    19432004    public:
    1944         ForNode(ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode* statement, bool expr1WasVarDecl) KJS_FAST_CALL
    1945             : m_expr1(expr1)
     2005        ForNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode* statement, bool expr1WasVarDecl) KJS_FAST_CALL
     2006            : StatementNode(globalData)
     2007            , m_expr1(expr1)
    19462008            , m_expr2(expr2)
    19472009            , m_expr3(expr3)
     
    19652027    class ForInNode : public StatementNode {
    19662028    public:
    1967         ForInNode(ExpressionNode*, ExpressionNode*, StatementNode*) KJS_FAST_CALL;
    1968         ForInNode(const Identifier&, ExpressionNode*, ExpressionNode*, StatementNode*) KJS_FAST_CALL;
     2029        ForInNode(JSGlobalData*, ExpressionNode*, ExpressionNode*, StatementNode*) KJS_FAST_CALL;
     2030        ForInNode(JSGlobalData*, const Identifier&, ExpressionNode*, ExpressionNode*, StatementNode*) KJS_FAST_CALL;
    19692031       
    19702032        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
     
    19822044    class ContinueNode : public StatementNode {
    19832045    public:
    1984         ContinueNode() KJS_FAST_CALL
    1985         {
    1986         }
    1987 
    1988         ContinueNode(const Identifier& ident) KJS_FAST_CALL
    1989             : m_ident(ident)
     2046        ContinueNode(JSGlobalData* globalData) KJS_FAST_CALL
     2047            : StatementNode(globalData)
     2048        {
     2049        }
     2050
     2051        ContinueNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     2052            : StatementNode(globalData)
     2053            , m_ident(ident)
    19902054        {
    19912055        }
     
    20002064    class BreakNode : public StatementNode {
    20012065    public:
    2002         BreakNode() KJS_FAST_CALL
    2003         {
    2004         }
    2005 
    2006         BreakNode(const Identifier& ident) KJS_FAST_CALL
    2007             : m_ident(ident)
     2066        BreakNode(JSGlobalData* globalData) KJS_FAST_CALL
     2067            : StatementNode(globalData)
     2068        {
     2069        }
     2070
     2071        BreakNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     2072            : StatementNode(globalData)
     2073            , m_ident(ident)
    20082074        {
    20092075        }
     
    20182084    class ReturnNode : public StatementNode {
    20192085    public:
    2020         ReturnNode(ExpressionNode* value) KJS_FAST_CALL
    2021             : m_value(value)
     2086        ReturnNode(JSGlobalData* globalData, ExpressionNode* value) KJS_FAST_CALL
     2087            : StatementNode(globalData)
     2088            , m_value(value)
    20222089        {
    20232090        }
     
    20332100    class WithNode : public StatementNode {
    20342101    public:
    2035         WithNode(ExpressionNode* expr, StatementNode* statement) KJS_FAST_CALL
    2036             : m_expr(expr)
     2102        WithNode(JSGlobalData* globalData, ExpressionNode* expr, StatementNode* statement) KJS_FAST_CALL
     2103            : StatementNode(globalData)
     2104            , m_expr(expr)
    20372105            , m_statement(statement)
    20382106        {
     
    20492117    class LabelNode : public StatementNode {
    20502118    public:
    2051         LabelNode(const Identifier& label, StatementNode* statement) KJS_FAST_CALL
    2052             : m_label(label)
     2119        LabelNode(JSGlobalData* globalData, const Identifier& label, StatementNode* statement) KJS_FAST_CALL
     2120            : StatementNode(globalData)
     2121            , m_label(label)
    20532122            , m_statement(statement)
    20542123        {
     
    20662135    class ThrowNode : public StatementNode {
    20672136    public:
    2068         ThrowNode(ExpressionNode* expr) KJS_FAST_CALL
    2069             : m_expr(expr)
     2137        ThrowNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     2138            : StatementNode(globalData)
     2139            , m_expr(expr)
    20702140        {
    20712141        }
     
    20802150    class TryNode : public StatementNode {
    20812151    public:
    2082         TryNode(StatementNode* tryBlock, const Identifier& exceptionIdent, StatementNode* catchBlock, StatementNode* finallyBlock) KJS_FAST_CALL
    2083             : m_tryBlock(tryBlock)
     2152        TryNode(JSGlobalData* globalData, StatementNode* tryBlock, const Identifier& exceptionIdent, StatementNode* catchBlock, StatementNode* finallyBlock) KJS_FAST_CALL
     2153            : StatementNode(globalData)
     2154            , m_tryBlock(tryBlock)
    20842155            , m_exceptionIdent(exceptionIdent)
    20852156            , m_catchBlock(catchBlock)
     
    21012172    class ParameterNode : public Node {
    21022173    public:
    2103         ParameterNode(const Identifier& ident) KJS_FAST_CALL
    2104             : m_ident(ident)
    2105         {
    2106         }
    2107 
    2108         ParameterNode(ParameterNode* l, const Identifier& ident) KJS_FAST_CALL
    2109             : m_ident(ident)
     2174        ParameterNode(JSGlobalData* globalData, const Identifier& ident) KJS_FAST_CALL
     2175            : Node(globalData)
     2176            , m_ident(ident)
     2177        {
     2178        }
     2179
     2180        ParameterNode(JSGlobalData* globalData, ParameterNode* l, const Identifier& ident) KJS_FAST_CALL
     2181            : Node(globalData)
     2182            , m_ident(ident)
    21102183        {
    21112184            l->m_next = this;
     
    21272200    class ScopeNode : public BlockNode {
    21282201    public:
    2129         ScopeNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2202        ScopeNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21302203
    21312204        int sourceId() const KJS_FAST_CALL { return m_sourceId; }
     
    21522225    class ProgramNode : public ScopeNode {
    21532226    public:
    2154         static ProgramNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2227        static ProgramNode* create(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21552228
    21562229        ProgramCodeBlock& code(ScopeChainNode* scopeChain, bool canCreateGlobals) KJS_FAST_CALL
     
    21622235
    21632236    private:
    2164         ProgramNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2237        ProgramNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21652238
    21662239        void generateCode(ScopeChainNode*, bool) KJS_FAST_CALL;
     
    21752248    class EvalNode : public ScopeNode {
    21762249    public:
    2177         static EvalNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2250        static EvalNode* create(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21782251
    21792252        EvalCodeBlock& code(ScopeChainNode* scopeChain) KJS_FAST_CALL
     
    21852258
    21862259    private:
    2187         EvalNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2260        EvalNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21882261
    21892262        void generateCode(ScopeChainNode*) KJS_FAST_CALL;
     
    21952268    class FunctionBodyNode : public ScopeNode {
    21962269    public:
    2197         static FunctionBodyNode* create(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2270        static FunctionBodyNode* create(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    21982271
    21992272        Vector<Identifier>& parameters() KJS_FAST_CALL { return m_parameters; }
     
    22242297
    22252298    protected:
    2226         FunctionBodyNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
     2299        FunctionBodyNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    22272300
    22282301    private:
     
    22372310    class FuncExprNode : public ExpressionNode {
    22382311    public:
    2239         FuncExprNode(const Identifier& ident, FunctionBodyNode* body, const SourceRange& source, ParameterNode* parameter = 0) KJS_FAST_CALL
    2240             : m_ident(ident)
     2312        FuncExprNode(JSGlobalData* globalData, const Identifier& ident, FunctionBodyNode* body, const SourceRange& source, ParameterNode* parameter = 0) KJS_FAST_CALL
     2313            : ExpressionNode(globalData)
     2314            , m_ident(ident)
    22412315            , m_parameter(parameter)
    22422316            , m_body(body)
     
    22662340    class FuncDeclNode : public StatementNode {
    22672341    public:
    2268         FuncDeclNode(const Identifier& ident, FunctionBodyNode* body, const SourceRange& source, ParameterNode* parameter = 0) KJS_FAST_CALL
    2269             : m_ident(ident)
     2342        FuncDeclNode(JSGlobalData* globalData, const Identifier& ident, FunctionBodyNode* body, const SourceRange& source, ParameterNode* parameter = 0) KJS_FAST_CALL
     2343            : StatementNode(globalData)
     2344            , m_ident(ident)
    22702345            , m_parameter(parameter)
    22712346            , m_body(body)
     
    22932368    class CaseClauseNode : public Node {
    22942369    public:
    2295         CaseClauseNode(ExpressionNode* expr) KJS_FAST_CALL
    2296             : m_expr(expr)
    2297         {
    2298         }
    2299 
    2300         CaseClauseNode(ExpressionNode* expr, SourceElements* children) KJS_FAST_CALL
    2301             : m_expr(expr)
     2370        CaseClauseNode(JSGlobalData* globalData, ExpressionNode* expr) KJS_FAST_CALL
     2371            : Node(globalData)
     2372            , m_expr(expr)
     2373        {
     2374        }
     2375
     2376        CaseClauseNode(JSGlobalData* globalData, ExpressionNode* expr, SourceElements* children) KJS_FAST_CALL
     2377            : Node(globalData)
     2378            , m_expr(expr)
    23022379        {
    23032380            if (children)
     
    23182395    class ClauseListNode : public Node {
    23192396    public:
    2320         ClauseListNode(CaseClauseNode* clause) KJS_FAST_CALL
    2321             : m_clause(clause)
    2322         {
    2323         }
    2324 
    2325         ClauseListNode(ClauseListNode* clauseList, CaseClauseNode* clause) KJS_FAST_CALL
    2326             : m_clause(clause)
     2397        ClauseListNode(JSGlobalData* globalData, CaseClauseNode* clause) KJS_FAST_CALL
     2398            : Node(globalData)
     2399            , m_clause(clause)
     2400        {
     2401        }
     2402
     2403        ClauseListNode(JSGlobalData* globalData, ClauseListNode* clauseList, CaseClauseNode* clause) KJS_FAST_CALL
     2404            : Node(globalData)
     2405            , m_clause(clause)
    23272406        {
    23282407            clauseList->m_next = this;
     
    23432422    class CaseBlockNode : public Node {
    23442423    public:
    2345         CaseBlockNode(ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2) KJS_FAST_CALL
    2346             : m_list1(list1)
     2424        CaseBlockNode(JSGlobalData* globalData, ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2) KJS_FAST_CALL
     2425            : Node(globalData)
     2426            , m_list1(list1)
    23472427            , m_defaultClause(defaultClause)
    23482428            , m_list2(list2)
     
    23632443    class SwitchNode : public StatementNode {
    23642444    public:
    2365         SwitchNode(ExpressionNode* expr, CaseBlockNode* block) KJS_FAST_CALL
    2366             : m_expr(expr)
     2445        SwitchNode(JSGlobalData* globalData, ExpressionNode* expr, CaseBlockNode* block) KJS_FAST_CALL
     2446            : StatementNode(globalData)
     2447            , m_expr(expr)
    23672448            , m_block(block)
    23682449        {
     
    23802461    class BreakpointCheckStatement : public StatementNode {
    23812462    public:
    2382         BreakpointCheckStatement(PassRefPtr<StatementNode>) KJS_FAST_CALL;
     2463        BreakpointCheckStatement(JSGlobalData*, PassRefPtr<StatementNode>) KJS_FAST_CALL;
    23832464
    23842465        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
Note: See TracChangeset for help on using the changeset viewer.