Changeset 38249 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Nov 9, 2008, 5:28:10 PM (17 years ago)
Author:
Darin Adler
Message:

2008-11-09 Darin Adler <Darin Adler>

Reviewed by Tim Hatcher.

  • VM/CodeBlock.h: Added include.
  • VM/Machine.cpp: (JSC::Machine::execute): Use the types from
DeclarationStacks as DeclarationStacks
rather than Node:: since "Node" really has little to do with it.
  • bytecompiler/CodeGenerator.cpp: (JSC::CodeGenerator::CodeGenerator): Ditto.
  • jsc.cpp: (Options::Options): Removed prettyPrint option. (runWithScripts): Ditto. (printUsageStatement): Ditto. (parseArguments): Ditto. (jscmain): Ditto.
  • parser/Grammar.y: Removed use of obsolete ImmediateNumberNode.
  • parser/Nodes.cpp: (JSC::ThrowableExpressionData::emitThrowError): Use inline functions instead of direct member access for ThrowableExpressionData values. (JSC::BracketAccessorNode::emitCode): Ditto. (JSC::DotAccessorNode::emitCode): Ditto. (JSC::NewExprNode::emitCode): Ditto. (JSC::EvalFunctionCallNode::emitCode): Ditto. (JSC::FunctionCallValueNode::emitCode): Ditto. (JSC::FunctionCallResolveNode::emitCode): Ditto. (JSC::FunctionCallBracketNode::emitCode): Ditto. (JSC::FunctionCallDotNode::emitCode): Ditto. (JSC::PostfixResolveNode::emitCode): Ditto. (JSC::PostfixBracketNode::emitCode): Ditto. (JSC::PostfixDotNode::emitCode): Ditto. (JSC::DeleteResolveNode::emitCode): Ditto. (JSC::DeleteBracketNode::emitCode): Ditto. (JSC::DeleteDotNode::emitCode): Ditto. (JSC::PrefixResolveNode::emitCode): Ditto. (JSC::PrefixBracketNode::emitCode): Ditto. (JSC::PrefixDotNode::emitCode): Ditto. (JSC::ThrowableBinaryOpNode::emitCode): Ditto. (JSC::InstanceOfNode::emitCode): Ditto. (JSC::ReadModifyResolveNode::emitCode): Ditto. (JSC::AssignResolveNode::emitCode): Ditto. (JSC::AssignDotNode::emitCode): Ditto. (JSC::ReadModifyDotNode::emitCode): Ditto. (JSC::AssignBracketNode::emitCode): Ditto. (JSC::ReadModifyBracketNode::emitCode): Ditto. (JSC::statementListEmitCode): Take a const StatementVector instead of a non-const one. Also removed unused statementListPushFIFO. (JSC::ForInNode::emitCode): Inline functions instead of member access. (JSC::ThrowNode::emitCode): Ditto. (JSC::EvalNode::emitCode): Ditto. (JSC::FunctionBodyNode::emitCode): Ditto. (JSC::ProgramNode::emitCode): Ditto.
  • parser/Nodes.h: Removed unused includes and forward declarations. Removed Precedence enum. Made many more members private instead of protected or public. Removed unused NodeStack typedef. Moved the VarStack and FunctionStack typedefs from Node to ScopeNode. Made Node::emitCode pure virtual and changed classes that don't emit any code to inherit from ParserRefCounted rather than Node. Moved isReturnNode from Node to StatementNode. Removed the streamTo, precedence, and needsParensIfLeftmost functions from all classes. Removed the ImmediateNumberNode class and make NumberNode::setValue nonvirtual.
  • parser/nodes2string.cpp: Removed.
Location:
trunk/JavaScriptCore
Files:
1 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/AllInOneFile.cpp

    r38225 r38249  
    7777#include "runtime/NumberPrototype.cpp"
    7878#include "parser/Nodes.cpp"
    79 #include "parser/nodes2string.cpp"
    8079#include "runtime/JSObject.cpp"
    8180#include "runtime/Error.cpp"
  • trunk/JavaScriptCore/ChangeLog

    r38247 r38249  
     12008-11-09  Darin Adler  <[email protected]>
     2
     3        Reviewed by Tim Hatcher.
     4
     5        - https://bugs.webkit.org/show_bug.cgi?id=22149
     6          remove unused code from the parser
     7
     8        * AllInOneFile.cpp: Removed nodes2string.cpp.
     9        * GNUmakefile.am: Ditto.
     10        * JavaScriptCore.exp: Ditto.
     11        * JavaScriptCore.pri: Ditto.
     12        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
     13        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
     14        * JavaScriptCoreSources.bkl: Ditto.
     15
     16        * VM/CodeBlock.h: Added include.
     17
     18        * VM/Machine.cpp: (JSC::Machine::execute): Use the types from
     19        DeclarationStacks as DeclarationStacks:: rather than Node:: since
     20        "Node" really has little to do with it.
     21        * bytecompiler/CodeGenerator.cpp:
     22        (JSC::CodeGenerator::CodeGenerator): Ditto.
     23
     24        * jsc.cpp:
     25        (Options::Options): Removed prettyPrint option.
     26        (runWithScripts): Ditto.
     27        (printUsageStatement): Ditto.
     28        (parseArguments): Ditto.
     29        (jscmain): Ditto.
     30
     31        * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode.
     32
     33        * parser/Nodes.cpp:
     34        (JSC::ThrowableExpressionData::emitThrowError): Use inline functions
     35        instead of direct member access for ThrowableExpressionData values.
     36        (JSC::BracketAccessorNode::emitCode): Ditto.
     37        (JSC::DotAccessorNode::emitCode): Ditto.
     38        (JSC::NewExprNode::emitCode): Ditto.
     39        (JSC::EvalFunctionCallNode::emitCode): Ditto.
     40        (JSC::FunctionCallValueNode::emitCode): Ditto.
     41        (JSC::FunctionCallResolveNode::emitCode): Ditto.
     42        (JSC::FunctionCallBracketNode::emitCode): Ditto.
     43        (JSC::FunctionCallDotNode::emitCode): Ditto.
     44        (JSC::PostfixResolveNode::emitCode): Ditto.
     45        (JSC::PostfixBracketNode::emitCode): Ditto.
     46        (JSC::PostfixDotNode::emitCode): Ditto.
     47        (JSC::DeleteResolveNode::emitCode): Ditto.
     48        (JSC::DeleteBracketNode::emitCode): Ditto.
     49        (JSC::DeleteDotNode::emitCode): Ditto.
     50        (JSC::PrefixResolveNode::emitCode): Ditto.
     51        (JSC::PrefixBracketNode::emitCode): Ditto.
     52        (JSC::PrefixDotNode::emitCode): Ditto.
     53        (JSC::ThrowableBinaryOpNode::emitCode): Ditto.
     54        (JSC::InstanceOfNode::emitCode): Ditto.
     55        (JSC::ReadModifyResolveNode::emitCode): Ditto.
     56        (JSC::AssignResolveNode::emitCode): Ditto.
     57        (JSC::AssignDotNode::emitCode): Ditto.
     58        (JSC::ReadModifyDotNode::emitCode): Ditto.
     59        (JSC::AssignBracketNode::emitCode): Ditto.
     60        (JSC::ReadModifyBracketNode::emitCode): Ditto.
     61        (JSC::statementListEmitCode): Take a const StatementVector instead
     62        of a non-const one. Also removed unused statementListPushFIFO.
     63        (JSC::ForInNode::emitCode): Inline functions instead of member access.
     64        (JSC::ThrowNode::emitCode): Ditto.
     65        (JSC::EvalNode::emitCode): Ditto.
     66        (JSC::FunctionBodyNode::emitCode): Ditto.
     67        (JSC::ProgramNode::emitCode): Ditto.
     68
     69        * parser/Nodes.h: Removed unused includes and forward declarations.
     70        Removed Precedence enum. Made many more members private instead of
     71        protected or public. Removed unused NodeStack typedef. Moved the
     72        VarStack and FunctionStack typedefs from Node to ScopeNode. Made
     73        Node::emitCode pure virtual and changed classes that don't emit
     74        any code to inherit from ParserRefCounted rather than Node.
     75        Moved isReturnNode from Node to StatementNode. Removed the
     76        streamTo, precedence, and needsParensIfLeftmost functions from
     77        all classes. Removed the ImmediateNumberNode class and make
     78        NumberNode::setValue nonvirtual.
     79
     80        * parser/nodes2string.cpp: Removed.
     81
    1822008-11-09  Darin Adler  <[email protected]>
    283
  • trunk/JavaScriptCore/GNUmakefile.am

    r38228 r38249  
    334334        JavaScriptCore/runtime/Lookup.cpp \
    335335        JavaScriptCore/parser/Nodes.cpp \
    336         JavaScriptCore/parser/nodes2string.cpp \
    337336        JavaScriptCore/runtime/Operations.cpp \
    338337        JavaScriptCore/runtime/RegExp.cpp \
  • trunk/JavaScriptCore/JavaScriptCore.exp

    r38101 r38249  
    315315__ZNK3JSC17DebuggerCallFrame4typeEv
    316316__ZNK3JSC17DebuggerCallFrame8evaluateERKNS_7UStringERPNS_7JSValueE
    317 __ZNK3JSC4Node8toStringEv
    318317__ZNK3JSC6JSCell12toThisObjectEPNS_9ExecStateE
    319318__ZNK3JSC6JSCell12toThisStringEPNS_9ExecStateE
  • trunk/JavaScriptCore/JavaScriptCore.pri

    r38205 r38249  
    114114    runtime/NativeErrorPrototype.cpp \
    115115    parser/Nodes.cpp \
    116     parser/nodes2string.cpp \
    117116    runtime/NumberConstructor.cpp \
    118117    runtime/NumberObject.cpp \
  • trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj

    r38226 r38249  
    12151215                        </File>
    12161216                        <File
    1217                                 RelativePath="..\..\parser\nodes2string.cpp"
    1218                                 >
    1219                         </File>
    1220                         <File
    12211217                                RelativePath="..\..\parser\Parser.cpp"
    12221218                                >
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r38205 r38249  
    710710                F5BB2BC5030F772101FCFE1D /* Completion.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = Completion.h; sourceTree = "<group>"; tabWidth = 8; };
    711711                F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = JavaScriptCorePrefix.h; sourceTree = "<group>"; tabWidth = 8; };
    712                 F5FFE656026B47A6018635CA /* nodes2string.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nodes2string.cpp; sourceTree = "<group>"; tabWidth = 8; };
    713712                F68EBB8C0255D4C601FF60F7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; tabWidth = 8; };
    714713                F692A84D0255597D01FF60F7 /* ArrayPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ArrayPrototype.cpp; sourceTree = "<group>"; tabWidth = 8; };
     
    11091108                                F692A86D0255597D01FF60F7 /* Nodes.cpp */,
    11101109                                F692A86E0255597D01FF60F7 /* Nodes.h */,
    1111                                 F5FFE656026B47A6018635CA /* nodes2string.cpp */,
    11121110                                93F0B3A909BB4DC00068FCE3 /* Parser.cpp */,
    11131111                                93F0B3AA09BB4DC00068FCE3 /* Parser.h */,
  • trunk/JavaScriptCore/JavaScriptCoreSources.bkl

    r38238 r38249  
    6363        parser/Lexer.cpp
    6464        parser/Nodes.cpp
    65         parser/nodes2string.cpp
    6665        parser/Parser.cpp
    6766    </set>
  • trunk/JavaScriptCore/VM/CodeBlock.h

    r38229 r38249  
    3535#include "Nodes.h"
    3636#include "Parser.h"
     37#include "RegExp.h"
    3738#include "SourceCode.h"
    3839#include "UString.h"
  • trunk/JavaScriptCore/VM/Machine.cpp

    r38209 r38249  
    10431043        BatchedTransitionOptimizer optimizer(variableObject);
    10441044
    1045         const Node::VarStack& varStack = codeBlock->ownerNode->varStack();
    1046         Node::VarStack::const_iterator varStackEnd = varStack.end();
    1047         for (Node::VarStack::const_iterator it = varStack.begin(); it != varStackEnd; ++it) {
     1045        const DeclarationStacks::VarStack& varStack = codeBlock->ownerNode->varStack();
     1046        DeclarationStacks::VarStack::const_iterator varStackEnd = varStack.end();
     1047        for (DeclarationStacks::VarStack::const_iterator it = varStack.begin(); it != varStackEnd; ++it) {
    10481048            const Identifier& ident = (*it).first;
    10491049            if (!variableObject->hasProperty(callFrame, ident)) {
     
    10531053        }
    10541054
    1055         const Node::FunctionStack& functionStack = codeBlock->ownerNode->functionStack();
    1056         Node::FunctionStack::const_iterator functionStackEnd = functionStack.end();
    1057         for (Node::FunctionStack::const_iterator it = functionStack.begin(); it != functionStackEnd; ++it) {
     1055        const DeclarationStacks::FunctionStack& functionStack = codeBlock->ownerNode->functionStack();
     1056        DeclarationStacks::FunctionStack::const_iterator functionStackEnd = functionStack.end();
     1057        for (DeclarationStacks::FunctionStack::const_iterator it = functionStack.begin(); it != functionStackEnd; ++it) {
    10581058            PutPropertySlot slot;
    10591059            variableObject->put(callFrame, (*it)->m_ident, (*it)->makeFunction(callFrame, scopeChain), slot);
  • trunk/JavaScriptCore/bytecompiler/CodeGenerator.cpp

    r38247 r38249  
    310310        emitOpcode(op_create_arguments);
    311311
    312     const Node::FunctionStack& functionStack = functionBody->functionStack();
     312    const DeclarationStacks::FunctionStack& functionStack = functionBody->functionStack();
    313313    for (size_t i = 0; i < functionStack.size(); ++i) {
    314314        FuncDeclNode* funcDecl = functionStack[i].get();
     
    318318    }
    319319
    320     const Node::VarStack& varStack = functionBody->varStack();
     320    const DeclarationStacks::VarStack& varStack = functionBody->varStack();
    321321    for (size_t i = 0; i < varStack.size(); ++i)
    322322        addVar(varStack[i].first, varStack[i].second & DeclarationStacks::IsConstant);
  • trunk/JavaScriptCore/jsc.cpp

    r38162 r38249  
    7979    Options()
    8080        : interactive(false)
    81         , prettyPrint(false)
    8281        , dump(false)
    8382    {
     
    8584
    8685    bool interactive;
    87     bool prettyPrint;
    8886    bool dump;
    8987    Vector<UString> fileNames;
     
    300298}
    301299
    302 static bool prettyPrintScript(ExecState* exec, const UString& fileName, const Vector<char>& script)
    303 {
    304     int errLine = 0;
    305     UString errMsg;
    306     RefPtr<ProgramNode> programNode = exec->globalData().parser->parse<ProgramNode>(exec, exec->dynamicGlobalObject()->debugger(), makeSource(script.data(), fileName), &errLine, &errMsg);
    307     if (!programNode) {
    308         fprintf(stderr, "%s:%d: %s.\n", fileName.UTF8String().c_str(), errLine, errMsg.UTF8String().c_str());
    309         return false;
    310     }
    311 
    312     printf("%s\n", programNode->toString().UTF8String().c_str());
    313     return true;
    314 }
    315 
    316 static bool runWithScripts(GlobalObject* globalObject, const Vector<UString>& fileNames, bool prettyPrint, bool dump)
     300static bool runWithScripts(GlobalObject* globalObject, const Vector<UString>& fileNames, bool dump)
    317301{
    318302    Vector<char> script;
     
    333317            return false; // fail early so we can catch missing files
    334318
    335         if (prettyPrint)
    336             prettyPrintScript(globalObject->globalExec(), fileName, script);
    337         else {
    338319#if ENABLE(OPCODE_SAMPLING)
    339             machine->sampler()->start();
    340 #endif
    341             Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName));
    342             success = success && completion.complType() != Throw;
    343             if (dump) {
    344                 if (completion.complType() == Throw)
    345                     printf("Exception: %s\n", completion.value()->toString(globalObject->globalExec()).ascii());
    346                 else
    347                     printf("End: %s\n", completion.value()->toString(globalObject->globalExec()).ascii());
    348             }
    349 
    350             globalObject->globalExec()->clearException();
     320        machine->sampler()->start();
     321#endif
     322        Completion completion = Interpreter::evaluate(globalObject->globalExec(), globalObject->globalScopeChain(), makeSource(script.data(), fileName));
     323        success = success && completion.complType() != Throw;
     324        if (dump) {
     325            if (completion.complType() == Throw)
     326                printf("Exception: %s\n", completion.value()->toString(globalObject->globalExec()).ascii());
     327            else
     328                printf("End: %s\n", completion.value()->toString(globalObject->globalExec()).ascii());
     329        }
     330
     331        globalObject->globalExec()->clearException();
    351332
    352333#if ENABLE(OPCODE_SAMPLING)
    353             machine->sampler()->stop();
    354 #endif
    355         }
     334        machine->sampler()->stop();
     335#endif
    356336    }
    357337
     
    404384    fprintf(stderr, "  -h|--help  Prints this help message\n");
    405385    fprintf(stderr, "  -i         Enables interactive mode (default if no files are specified)\n");
    406     fprintf(stderr, "  -p         Prints formatted source code\n");
    407386    fprintf(stderr, "  -s         Installs signal handlers that exit on a crash (Unix platforms only)\n");
    408387    exit(-1);
     
    427406            continue;
    428407        }
    429         if (strcmp(arg, "-p") == 0) {
    430             options.prettyPrint = true;
    431             continue;
    432         }
    433408        if (strcmp(arg, "-d") == 0) {
    434409            options.dump = true;
     
    468443
    469444    GlobalObject* globalObject = new (globalData) GlobalObject(options.arguments);
    470     bool success = runWithScripts(globalObject, options.fileNames, options.prettyPrint, options.dump);
     445    bool success = runWithScripts(globalObject, options.fileNames, options.dump);
    471446    if (options.interactive && success)
    472447        runInteractive(globalObject);
  • trunk/JavaScriptCore/parser/Grammar.y

    r38205 r38249  
    14091409static NumberNode* makeNumberNode(void* globalPtr, double d)
    14101410{
    1411     JSValue* value = JSImmediate::from(d);
    1412     if (value)
    1413         return new ImmediateNumberNode(GLOBAL_DATA, value, d);
    14141411    return new NumberNode(GLOBAL_DATA, d);
    14151412}
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r38247 r38249  
    233233RegisterID* ThrowableExpressionData::emitThrowError(CodeGenerator& generator, ErrorType e, const char* msg)
    234234{
    235     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     235    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    236236    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), msg));
    237237    generator.emitThrow(exception);
     
    243243    UString message = msg;
    244244    substitute(message, label.ustring());
    245     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     245    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    246246    RegisterID* exception = generator.emitNewError(generator.newTemporary(), e, jsString(generator.globalData(), message));
    247247    generator.emitThrow(exception);
     
    499499    RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base.get(), m_subscriptHasAssignments, m_subscript->isPure(generator));
    500500    RegisterID* property = generator.emitNode(m_subscript.get());
    501     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     501    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    502502    return generator.emitGetByVal(generator.finalDestination(dst), base.get(), property);
    503503}
     
    518518{
    519519    RegisterID* base = generator.emitNode(m_base.get());
    520     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     520    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    521521    return generator.emitGetById(generator.finalDestination(dst), base, m_ident);
    522522}
     
    569569{
    570570    RefPtr<RegisterID> func = generator.emitNode(m_expr.get());
    571     return generator.emitConstruct(generator.finalDestination(dst), func.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);
     571    return generator.emitConstruct(generator.finalDestination(dst), func.get(), m_args.get(), divot(), startOffset(), endOffset());
    572572}
    573573
     
    589589    RefPtr<RegisterID> func = generator.newTemporary();
    590590    generator.emitResolveWithBase(base.get(), func.get(), generator.propertyNames().eval);
    591     return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);
     591    return generator.emitCallEval(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());
    592592}
    593593
     
    608608{
    609609    RefPtr<RegisterID> func = generator.emitNode(m_expr.get());
    610     return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);
     610    return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset());
    611611}
    612612
     
    626626{
    627627    if (RefPtr<RegisterID> local = generator.registerFor(m_ident))
    628         return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);
     628        return generator.emitCall(generator.finalDestination(dst), local.get(), 0, m_args.get(), divot(), startOffset(), endOffset());
    629629
    630630    int index = 0;
     
    633633    if (generator.findScopedProperty(m_ident, index, depth, false, globalObject) && index != missingSymbolMarker()) {
    634634        RefPtr<RegisterID> func = generator.emitGetScopedVar(generator.newTemporary(), depth, index, globalObject);
    635         return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), m_divot, m_startOffset, m_endOffset);
     635        return generator.emitCall(generator.finalDestination(dst), func.get(), 0, m_args.get(), divot(), startOffset(), endOffset());
    636636    }
    637637
    638638    RefPtr<RegisterID> base = generator.tempDestination(dst);
    639639    RefPtr<RegisterID> func = generator.newTemporary();
    640     int identifierStart = m_divot - m_startOffset;
     640    int identifierStart = divot() - startOffset();
    641641    generator.emitExpressionInfo(identifierStart + m_ident.size(), m_ident.size(), 0);
    642642    generator.emitResolveFunction(base.get(), func.get(), m_ident);
    643     return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);
     643    return generator.emitCall(generator.finalDestination(dst, base.get()), func.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());
    644644}
    645645
     
    662662    RefPtr<RegisterID> base = generator.emitNode(m_base.get());
    663663    RegisterID* property = generator.emitNode(m_subscript.get());
    664     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     664    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    665665    RefPtr<RegisterID> function = generator.emitGetByVal(generator.newTemporary(), base.get(), property);
    666     return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);
     666    return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());
    667667}
    668668
     
    683683{
    684684    RefPtr<RegisterID> base = generator.emitNode(m_base.get());
    685     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     685    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    686686    RefPtr<RegisterID> function = generator.emitGetById(generator.newTemporary(), base.get(), m_ident);
    687     return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), m_divot, m_startOffset, m_endOffset);
     687    return generator.emitCall(generator.finalDestination(dst, base.get()), function.get(), base.get(), m_args.get(), divot(), startOffset(), endOffset());
    688688}
    689689
     
    730730    }
    731731
    732     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     732    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    733733    RefPtr<RegisterID> value = generator.newTemporary();
    734734    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), value.get(), m_ident);
     
    762762    RefPtr<RegisterID> property = generator.emitNode(m_subscript.get());
    763763
    764     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     764    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    765765    RefPtr<RegisterID> value = generator.emitGetByVal(generator.newTemporary(), base.get(), property.get());
    766766    RegisterID* oldValue;
     
    774774        oldValue = (m_operator == OpPlusPlus) ? generator.emitPostInc(generator.finalDestination(dst), value.get()) : generator.emitPostDec(generator.finalDestination(dst), value.get());
    775775    }
    776     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     776    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    777777    generator.emitPutByVal(base.get(), property.get(), value.get());
    778778    return oldValue;
     
    795795    RefPtr<RegisterID> base = generator.emitNode(m_base.get());
    796796
    797     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     797    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    798798    RefPtr<RegisterID> value = generator.emitGetById(generator.newTemporary(), base.get(), m_ident);
    799799    RegisterID* oldValue;
     
    807807        oldValue = (m_operator == OpPlusPlus) ? generator.emitPostInc(generator.finalDestination(dst), value.get()) : generator.emitPostDec(generator.finalDestination(dst), value.get());
    808808    }
    809     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     809    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    810810    generator.emitPutById(base.get(), m_ident, value.get());
    811811    return oldValue;
     
    836836        return generator.emitUnexpectedLoad(generator.finalDestination(dst), false);
    837837
    838     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     838    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    839839    RegisterID* base = generator.emitResolveBase(generator.tempDestination(dst), m_ident);
    840840    return generator.emitDeleteById(generator.finalDestination(dst, base), base, m_ident);
     
    859859    RegisterID* r1 = generator.emitNode(m_subscript.get());
    860860
    861     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     861    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    862862    return generator.emitDeleteByVal(generator.finalDestination(dst), r0.get(), r1);
    863863}
     
    879879    RegisterID* r0 = generator.emitNode(m_base.get());
    880880
    881     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     881    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    882882    return generator.emitDeleteById(generator.finalDestination(dst), r0, m_ident);
    883883}
     
    990990    }
    991991
    992     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     992    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    993993    RefPtr<RegisterID> propDst = generator.tempDestination(dst);
    994994    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), propDst.get(), m_ident);
     
    10171017    RefPtr<RegisterID> propDst = generator.tempDestination(dst);
    10181018
    1019     generator.emitExpressionInfo(m_divot + m_subexpressionDivotOffset, m_subexpressionStartOffset, m_endOffset - m_subexpressionDivotOffset);
     1019    generator.emitExpressionInfo(divot() + m_subexpressionDivotOffset, m_subexpressionStartOffset, endOffset() - m_subexpressionDivotOffset);
    10201020    RegisterID* value = generator.emitGetByVal(propDst.get(), base.get(), property.get());
    10211021    if (m_operator == OpPlusPlus)
     
    10231023    else
    10241024        generator.emitPreDec(value);
    1025     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1025    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    10261026    generator.emitPutByVal(base.get(), property.get(), value);
    10271027    return generator.moveToDestinationIfNeeded(dst, propDst.get());
     
    10451045    RefPtr<RegisterID> propDst = generator.tempDestination(dst);
    10461046
    1047     generator.emitExpressionInfo(m_divot + m_subexpressionDivotOffset, m_subexpressionStartOffset, m_endOffset - m_subexpressionDivotOffset);
     1047    generator.emitExpressionInfo(divot() + m_subexpressionDivotOffset, m_subexpressionStartOffset, endOffset() - m_subexpressionDivotOffset);
    10481048    RegisterID* value = generator.emitGetById(propDst.get(), base.get(), m_ident);
    10491049    if (m_operator == OpPlusPlus)
     
    10511051    else
    10521052        generator.emitPreDec(value);
    1053     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1053    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    10541054    generator.emitPutById(base.get(), m_ident, value);
    10551055    return generator.moveToDestinationIfNeeded(dst, propDst.get());
     
    11491149    RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1.get(), m_rightHasAssignments, m_expr2->isPure(generator));
    11501150    RegisterID* src2 = generator.emitNode(m_expr2.get());
    1151     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1151    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    11521152    return generator.emitBinaryOp(opcode(), generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor()));
    11531153}
     
    11581158    RefPtr<RegisterID> src2 = generator.emitNode(m_expr2.get());
    11591159
    1160     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1160    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    11611161    RegisterID* src2Prototype = generator.emitGetById(generator.newTemporary(), src2.get(), generator.globalData()->propertyNames->prototype);
    11621162
    1163     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1163    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    11641164    return generator.emitInstanceOf(generator.finalDestination(dst, src1.get()), src1.get(), src2.get(), src2Prototype);
    11651165}
     
    13201320
    13211321    RefPtr<RegisterID> src1 = generator.tempDestination(dst);
    1322     generator.emitExpressionInfo(m_divot - m_startOffset + m_ident.size(), m_ident.size(), 0);
     1322    generator.emitExpressionInfo(divot() - startOffset() + m_ident.size(), m_ident.size(), 0);
    13231323    RefPtr<RegisterID> base = generator.emitResolveWithBase(generator.newTemporary(), src1.get(), m_ident);
    13241324    RegisterID* src2 = generator.emitNode(m_right.get());
    1325     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1325    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    13261326    RegisterID* result = emitReadModifyAssignment(generator, generator.finalDestination(dst, src1.get()), src1.get(), src2, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
    13271327    return generator.emitPutById(base.get(), m_ident, result);
     
    13651365        dst = 0;
    13661366    RegisterID* value = generator.emitNode(dst, m_right.get());
    1367     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1367    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    13681368    return generator.emitPutById(base.get(), m_ident, value);
    13691369}
     
    13871387    RefPtr<RegisterID> value = generator.destinationForAssignResult(dst);
    13881388    RegisterID* result = generator.emitNode(value.get(), m_right.get());
    1389     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1389    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    13901390    generator.emitPutById(base.get(), m_ident, result);
    13911391    return generator.moveToDestinationIfNeeded(dst, result);
     
    14091409    RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base.get(), m_rightHasAssignments, m_right->isPure(generator));
    14101410
    1411     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     1411    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    14121412    RefPtr<RegisterID> value = generator.emitGetById(generator.tempDestination(dst), base.get(), m_ident);
    14131413    RegisterID* change = generator.emitNode(m_right.get());
    14141414    RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
    14151415
    1416     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1416    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    14171417    return generator.emitPutById(base.get(), m_ident, updatedValue);
    14181418}
     
    14571457    RegisterID* result = generator.emitNode(value.get(), m_right.get());
    14581458
    1459     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1459    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    14601460    generator.emitPutByVal(base.get(), property.get(), result);
    14611461    return generator.moveToDestinationIfNeeded(dst, result);
     
    14811481    RefPtr<RegisterID> property = generator.emitNodeForLeftHandSide(m_subscript.get(), m_rightHasAssignments, m_right->isPure(generator));
    14821482
    1483     generator.emitExpressionInfo(m_divot - m_subexpressionDivotOffset, m_startOffset - m_subexpressionDivotOffset, m_subexpressionEndOffset);
     1483    generator.emitExpressionInfo(divot() - m_subexpressionDivotOffset, startOffset() - m_subexpressionDivotOffset, m_subexpressionEndOffset);
    14841484    RefPtr<RegisterID> value = generator.emitGetByVal(generator.tempDestination(dst), base.get(), property.get());
    14851485    RegisterID* change = generator.emitNode(m_right.get());
    14861486    RegisterID* updatedValue = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), change, m_operator, OperandTypes(ResultType::unknown(), m_right->resultDescriptor()));
    14871487
    1488     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1488    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    14891489    generator.emitPutByVal(base.get(), property.get(), updatedValue);
    14901490
     
    15751575// ------------------------------ Helper functions for handling Vectors of StatementNode -------------------------------
    15761576
    1577 static inline RegisterID* statementListEmitCode(StatementVector& statements, CodeGenerator& generator, RegisterID* dst)
    1578 {
    1579     StatementVector::iterator end = statements.end();
    1580     for (StatementVector::iterator it = statements.begin(); it != end; ++it) {
     1577static inline RegisterID* statementListEmitCode(const StatementVector& statements, CodeGenerator& generator, RegisterID* dst)
     1578{
     1579    StatementVector::const_iterator end = statements.end();
     1580    for (StatementVector::const_iterator it = statements.begin(); it != end; ++it) {
    15811581        StatementNode* n = it->get();
    15821582        if (!n->isLoop())
     
    15851585    }
    15861586    return 0;
    1587 }
    1588 
    1589 static inline void statementListPushFIFO(StatementVector& statements, DeclarationStacks::NodeStack& stack)
    1590 {
    1591     StatementVector::iterator it = statements.end();
    1592     StatementVector::iterator begin = statements.begin();
    1593     while (it != begin) {
    1594         --it;
    1595         stack.append((*it).get());
    1596     }
    15971587}
    15981588
     
    19301920            RegisterID* base = generator.emitResolveBase(generator.newTemporary(), ident);
    19311921
    1932             generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     1922            generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    19331923            generator.emitPutById(base, ident, propertyName);
    19341924        }
     
    22932283        dst = 0;
    22942284    RefPtr<RegisterID> expr = generator.emitNode(dst, m_expr.get());
    2295     generator.emitExpressionInfo(m_divot, m_startOffset, m_endOffset);
     2285    generator.emitExpressionInfo(divot(), startOffset(), endOffset());
    22962286    generator.emitThrow(expr.get());
    22972287    return dst;
     
    24242414    RefPtr<RegisterID> dstRegister = generator.newTemporary();
    24252415    generator.emitLoad(dstRegister.get(), jsUndefined());
    2426     statementListEmitCode(m_children, generator, dstRegister.get());
     2416    statementListEmitCode(children(), generator, dstRegister.get());
    24272417
    24282418    generator.emitDebugHook(DidExecuteProgram, firstLine(), lastLine());
     
    25122502{
    25132503    generator.emitDebugHook(DidEnterCallFrame, firstLine(), lastLine());
    2514     statementListEmitCode(m_children, generator, ignoredResult());
    2515     if (!m_children.size() || !m_children.last()->isReturnNode()) {
     2504    statementListEmitCode(children(), generator, ignoredResult());
     2505    if (!children().size() || !children().last()->isReturnNode()) {
    25162506        RegisterID* r0 = generator.emitLoad(0, jsUndefined());
    25172507        generator.emitDebugHook(WillLeaveCallFrame, firstLine(), lastLine());
     
    25272517    RefPtr<RegisterID> dstRegister = generator.newTemporary();
    25282518    generator.emitLoad(dstRegister.get(), jsUndefined());
    2529     statementListEmitCode(m_children, generator, dstRegister.get());
     2519    statementListEmitCode(children(), generator, dstRegister.get());
    25302520
    25312521    generator.emitDebugHook(DidExecuteProgram, firstLine(), lastLine());
  • trunk/JavaScriptCore/parser/Nodes.h

    r38247 r38249  
    2828
    2929#include "Error.h"
    30 #include "JSString.h"
    31 #include "JSType.h"
    3230#include "Opcode.h"
    33 #include "RegisterID.h"
    3431#include "ResultType.h"
    3532#include "SourceCode.h"
    3633#include "SymbolTable.h"
    37 #include "RegExp.h"
    3834#include <wtf/MathExtras.h>
    3935#include <wtf/OwnPtr.h>
    40 #include <wtf/UnusedParam.h>
    4136#include <wtf/Vector.h>
    4237
     
    5247    class CodeGenerator;
    5348    class FuncDeclNode;
    54     class Node;
    5549    class EvalCodeBlock;
    5650    class JSFunction;
     
    5852    class ProgramCodeBlock;
    5953    class PropertyListNode;
    60     class SourceStream;
    61 
    62     typedef unsigned int CodeFeatures;
     54    class RegisterID;
     55    class ScopeChainNode;
     56
     57    typedef unsigned CodeFeatures;
    6358
    6459    const CodeFeatures NoFeatures = 0;
     
    9489    };
    9590
    96     enum Precedence {
    97         PrecPrimary,
    98         PrecMember,
    99         PrecCall,
    100         PrecLeftHandSide,
    101         PrecPostfix,
    102         PrecUnary,
    103         PrecMultiplicative,
    104         PrecAdditive,
    105         PrecShift,
    106         PrecRelational,
    107         PrecEquality,
    108         PrecBitwiseAnd,
    109         PrecBitwiseXor,
    110         PrecBitwiseOr,
    111         PrecLogicalAnd,
    112         PrecLogicalOr,
    113         PrecConditional,
    114         PrecAssignment,
    115         PrecExpression
    116     };
    117 
    11891    namespace DeclarationStacks {
    119         typedef Vector<Node*, 16> NodeStack;
    12092        enum VarAttrs { IsConstant = 1, HasInitializer = 2 };
    12193        typedef Vector<std::pair<Identifier, unsigned>, 16> VarStack;
     
    133105        ParserRefCounted(JSGlobalData*) JSC_FAST_CALL;
    134106
    135         JSGlobalData* m_globalData;
    136 
    137     public:
     107    public:
     108        virtual ~ParserRefCounted();
     109
    138110        // Nonrecursive destruction.
    139111        virtual void releaseNodes(NodeReleaser&);
     
    145117        static void deleteNewObjects(JSGlobalData*) JSC_FAST_CALL;
    146118
    147         virtual ~ParserRefCounted();
     119    private:
     120        JSGlobalData* m_globalData;
    148121    };
    149122
    150123    class Node : public ParserRefCounted {
    151124    public:
    152         typedef DeclarationStacks::NodeStack NodeStack;
    153         typedef DeclarationStacks::VarStack VarStack;
    154         typedef DeclarationStacks::FunctionStack FunctionStack;
    155 
    156125        Node(JSGlobalData*) JSC_FAST_CALL;
    157126
     
    178147            node, "1".
    179148        */
    180         virtual RegisterID* emitCode(CodeGenerator&, RegisterID* dst = 0) JSC_FAST_CALL
    181         {
    182             ASSERT_WITH_MESSAGE(0, "Don't know how to generate code for:\n%s\n", toString().ascii());
    183             UNUSED_PARAM(dst);
    184             return 0;
    185         } // FIXME: Make this pure virtual.
    186 
    187         UString toString() const JSC_FAST_CALL;
     149        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* dst = 0) JSC_FAST_CALL = 0;
     150
    188151        int lineNo() const { return m_line; }
    189 
    190         virtual bool isReturnNode() const JSC_FAST_CALL { return false; }
    191 
    192         // Serialization.
    193         virtual void streamTo(SourceStream&) const JSC_FAST_CALL = 0;
    194         virtual Precedence precedence() const = 0;
    195         virtual bool needsParensIfLeftmost() const { return false; }
    196152
    197153    protected:
     
    234190        int lastLine() const JSC_FAST_CALL { return m_lastLine; }
    235191
    236         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    237192        virtual bool isEmptyStatement() const JSC_FAST_CALL { return false; }
     193        virtual bool isReturnNode() const JSC_FAST_CALL { return false; }
    238194
    239195        virtual bool isBlock() const JSC_FAST_CALL { return false; }
     
    254210
    255211        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    256 
    257         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    258         virtual Precedence precedence() const { return PrecPrimary; }
    259212    };
    260213
     
    270223
    271224        virtual bool isPure(CodeGenerator&) const JSC_FAST_CALL { return true; }
    272         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    273         virtual Precedence precedence() const { return PrecPrimary; }
    274 
    275     protected:
     225
     226    private:
    276227        bool m_value;
    277228    };
     
    287238        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    288239
    289         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    290         virtual Precedence precedence() const { return signbit(m_double) ? PrecUnary : PrecPrimary; }
    291 
    292240        virtual bool isNumber() const JSC_FAST_CALL { return true; }
    293241        virtual bool isPure(CodeGenerator&) const JSC_FAST_CALL { return true; }
    294242        double value() const JSC_FAST_CALL { return m_double; }
    295         virtual void setValue(double d) JSC_FAST_CALL { m_double = d; }
    296 
    297     protected:
     243        void setValue(double d) JSC_FAST_CALL { m_double = d; }
     244
     245    private:
    298246        double m_double;
    299     };
    300 
    301     class ImmediateNumberNode : public NumberNode {
    302     public:
    303         ImmediateNumberNode(JSGlobalData* globalData, JSValue* v, double d) JSC_FAST_CALL
    304             : NumberNode(globalData, d)
    305             , m_value(v)
    306         {
    307             ASSERT(v == JSImmediate::from(d));
    308         }
    309 
    310         virtual void setValue(double d) JSC_FAST_CALL { m_double = d; m_value = JSImmediate::from(d); ASSERT(m_value); }
    311 
    312     private:
    313         JSValue* m_value; // This is never a JSCell, only JSImmediate, thus no ProtectedPtr
    314247    };
    315248
     
    327260        const Identifier& value() { return m_value; }
    328261        virtual bool isPure(CodeGenerator&) const JSC_FAST_CALL { return true; }
    329         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    330         virtual Precedence precedence() const { return PrecPrimary; }
    331262
    332263    private:
     
    364295        RegisterID* emitThrowError(CodeGenerator&, ErrorType, const char* msg);
    365296        RegisterID* emitThrowError(CodeGenerator&, ErrorType, const char* msg, const Identifier&);
     297
     298    private:
    366299        uint32_t m_divot;
    367300        uint16_t m_startOffset;
     
    385318        }
    386319
    387         void setSubexpressionInfo(uint32_t subexpressionDivot, uint16_t subexpressionOffset) {
    388             ASSERT(subexpressionDivot <= m_divot);
    389             if ((m_divot - subexpressionDivot) & ~0xFFFF) // Overflow means we can't do this safely, so just point at the primary divot
     320        void setSubexpressionInfo(uint32_t subexpressionDivot, uint16_t subexpressionOffset)
     321        {
     322            ASSERT(subexpressionDivot <= divot());
     323            if ((divot() - subexpressionDivot) & ~0xFFFF) // Overflow means we can't do this safely, so just point at the primary divot
    390324                return;
    391             m_subexpressionDivotOffset = m_divot - subexpressionDivot;
     325            m_subexpressionDivotOffset = divot() - subexpressionDivot;
    392326            m_subexpressionEndOffset = subexpressionOffset;
    393327        }
     
    414348        }
    415349
    416         void setSubexpressionInfo(uint32_t subexpressionDivot, uint16_t subexpressionOffset) {
    417             ASSERT(subexpressionDivot >= m_divot);
    418             if ((subexpressionDivot - m_divot) & ~0xFFFF) // Overflow means we can't do this safely, so just point at the primary divot
     350        void setSubexpressionInfo(uint32_t subexpressionDivot, uint16_t subexpressionOffset)
     351        {
     352            ASSERT(subexpressionDivot >= divot());
     353            if ((subexpressionDivot - divot()) & ~0xFFFF) // Overflow means we can't do this safely, so just point at the primary divot
    419354                return;
    420             m_subexpressionDivotOffset = subexpressionDivot - m_divot;
     355            m_subexpressionDivotOffset = subexpressionDivot - divot();
    421356            m_subexpressionStartOffset = subexpressionOffset;
    422357        }
     
    438373        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    439374
    440         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    441         virtual Precedence precedence() const { return PrecPrimary; }
    442 
    443375    private:
    444376        UString m_pattern;
     
    454386
    455387        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    456 
    457         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    458         virtual Precedence precedence() const { return PrecPrimary; }
    459388    };
    460389
     
    469398
    470399        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    471 
    472         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    473         virtual Precedence precedence() const { return PrecPrimary; }
    474400
    475401        virtual bool isPure(CodeGenerator&) const JSC_FAST_CALL;
     
    478404        const Identifier& identifier() const JSC_FAST_CALL { return m_ident; }
    479405
    480     protected:
     406    private:
    481407        Identifier m_ident;
    482408        int32_t m_startOffset;
    483409    };
    484410
    485     class ElementNode : public Node {
     411    class ElementNode : public ParserRefCounted {
    486412    public:
    487413        ElementNode(JSGlobalData* globalData, int elision, ExpressionNode* node) JSC_FAST_CALL
    488             : Node(globalData)
     414            : ParserRefCounted(globalData)
    489415            , m_elision(elision)
    490416            , m_node(node)
     
    493419
    494420        ElementNode(JSGlobalData* globalData, ElementNode* l, int elision, ExpressionNode* node) JSC_FAST_CALL
    495             : Node(globalData)
     421            : ParserRefCounted(globalData)
    496422            , m_elision(elision)
    497423            , m_node(node)
     
    502428        virtual ~ElementNode();
    503429        virtual void releaseNodes(NodeReleaser&);
    504 
    505         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    506         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    507430
    508431        int elision() const { return m_elision; }
     
    547470        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    548471
    549         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    550         virtual Precedence precedence() const { return PrecPrimary; }
    551 
    552472    private:
    553473        RefPtr<ElementNode> m_element;
     
    556476    };
    557477
    558     class PropertyNode : public Node {
     478    class PropertyNode : public ParserRefCounted {
    559479    public:
    560480        enum Type { Constant, Getter, Setter };
    561481
    562482        PropertyNode(JSGlobalData* globalData, const Identifier& name, ExpressionNode* assign, Type type) JSC_FAST_CALL
    563             : Node(globalData)
     483            : ParserRefCounted(globalData)
    564484            , m_name(name)
    565485            , m_assign(assign)
     
    570490        virtual ~PropertyNode();
    571491        virtual void releaseNodes(NodeReleaser&);
    572 
    573         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    574         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    575492
    576493        const Identifier& name() const { return m_name; }
     
    602519
    603520        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    604         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    605         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    606 
    607     private:
    608         friend class ObjectLiteralNode;
     521
     522    private:
    609523        RefPtr<PropertyNode> m_node;
    610524        RefPtr<PropertyListNode> m_next;
     
    628542
    629543        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    630         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    631         virtual Precedence precedence() const { return PrecPrimary; }
    632         virtual bool needsParensIfLeftmost() const { return true; }
    633544
    634545    private:
     
    650561
    651562        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    652 
    653         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    654         virtual Precedence precedence() const { return PrecMember; }
    655563
    656564        virtual bool isLocation() const JSC_FAST_CALL { return true; }
     
    678586
    679587        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    680         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    681         virtual Precedence precedence() const { return PrecMember; }
    682588
    683589        virtual bool isLocation() const JSC_FAST_CALL { return true; }
     
    710616
    711617        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    712         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    713         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    714618
    715619        RefPtr<ArgumentListNode> m_next;
     
    717621    };
    718622
    719     class ArgumentsNode : public Node {
     623    class ArgumentsNode : public ParserRefCounted {
    720624    public:
    721625        ArgumentsNode(JSGlobalData* globalData) JSC_FAST_CALL
    722             : Node(globalData)
     626            : ParserRefCounted(globalData)
    723627        {
    724628        }
    725629
    726630        ArgumentsNode(JSGlobalData* globalData, ArgumentListNode* listNode) JSC_FAST_CALL
    727             : Node(globalData)
     631            : ParserRefCounted(globalData)
    728632            , m_listNode(listNode)
    729633        {
     
    732636        virtual ~ArgumentsNode();
    733637        virtual void releaseNodes(NodeReleaser&);
    734 
    735         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    736         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    737638
    738639        RefPtr<ArgumentListNode> m_listNode;
     
    759660        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    760661
    761         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    762         virtual Precedence precedence() const { return PrecLeftHandSide; }
    763 
    764662    private:
    765663        RefPtr<ExpressionNode> m_expr;
     
    780678
    781679        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    782         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    783         virtual Precedence precedence() const { return PrecCall; }
    784680
    785681    private:
     
    801697
    802698        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    803         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    804         virtual Precedence precedence() const { return PrecCall; }
    805699
    806700    private:
     
    824718        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    825719
    826         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    827         virtual Precedence precedence() const { return PrecCall; }
    828 
    829     protected:
     720    private:
    830721        Identifier m_ident;
    831722        RefPtr<ArgumentsNode> m_args;
     
    849740
    850741        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    851         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    852         virtual Precedence precedence() const { return PrecCall; }
    853 
    854     protected:
     742
     743    private:
    855744        RefPtr<ExpressionNode> m_base;
    856745        RefPtr<ExpressionNode> m_subscript;
     
    873762
    874763        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    875         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    876         virtual Precedence precedence() const { return PrecCall; }
    877764
    878765    private:
     
    904791
    905792        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    906         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    907         virtual Precedence precedence() const { return PrecPostfix; }
    908 
    909     protected:
     793
     794    private:
    910795        Operator m_operator;
    911796    };
     
    926811
    927812        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    928         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    929         virtual Precedence precedence() const { return PrecPostfix; }
    930 
    931     protected:
     813
     814    private:
    932815        RefPtr<ExpressionNode> m_base;
    933816        RefPtr<ExpressionNode> m_subscript;
     
    950833
    951834        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    952         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    953         virtual Precedence precedence() const { return PrecPostfix; }
    954 
    955     protected:
     835
     836    private:
    956837        RefPtr<ExpressionNode> m_base;
    957838        Identifier m_ident;
     
    973854
    974855        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    975         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    976         virtual Precedence precedence() const { return PrecPostfix; }
    977856
    978857    private:
     
    991870
    992871        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    993 
    994         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    995         virtual Precedence precedence() const { return PrecUnary; }
    996872
    997873    private:
     
    1014890        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1015891
    1016         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1017         virtual Precedence precedence() const { return PrecUnary; }
    1018 
    1019892    private:
    1020893        RefPtr<ExpressionNode> m_base;
     
    1037910        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1038911
    1039         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1040         virtual Precedence precedence() const { return PrecUnary; }
    1041 
    1042912    private:
    1043913        RefPtr<ExpressionNode> m_base;
     
    1058928        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1059929
    1060         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1061         virtual Precedence precedence() const { return PrecUnary; }
    1062 
    1063930    private:
    1064931        RefPtr<ExpressionNode> m_expr;
     
    1077944
    1078945        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1079 
    1080         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1081         virtual Precedence precedence() const { return PrecUnary; }
    1082946
    1083947    private:
     
    1095959        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1096960
    1097         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1098         virtual Precedence precedence() const { return PrecUnary; }
    1099 
    1100961        const Identifier& identifier() const JSC_FAST_CALL { return m_ident; }
    1101962
    1102     protected:
     963    private:
    1103964        Identifier m_ident;
    1104         size_t m_index; // Used by LocalTypeOfNode.
    1105965    };
    1106966
     
    1118978        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1119979
    1120         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1121         virtual Precedence precedence() const { return PrecUnary; }
    1122 
    1123980    private:
    1124981        RefPtr<ExpressionNode> m_expr;
     
    1135992        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1136993
    1137         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1138         virtual Precedence precedence() const { return PrecUnary; }
    1139 
    1140     protected:
     994    private:
    1141995        Operator m_operator;
    1142996    };
     
    11571011
    11581012        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1159         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1160         virtual Precedence precedence() const { return PrecUnary; }
    1161 
    1162     protected:
     1013
     1014    private:
    11631015        RefPtr<ExpressionNode> m_base;
    11641016        RefPtr<ExpressionNode> m_subscript;
     
    11811033
    11821034        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1183         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1184         virtual Precedence precedence() const { return PrecPostfix; }
    1185 
    1186     protected:
     1035
     1036    private:
    11871037        RefPtr<ExpressionNode> m_base;
    11881038        Identifier m_ident;
     
    12041054
    12051055        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1206         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1207         virtual Precedence precedence() const { return PrecUnary; }
    12081056
    12091057    private:
     
    12461094
    12471095        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_to_jsnumber; }
    1248         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1249         virtual Precedence precedence() const { return PrecUnary; }
    12501096    };
    12511097
     
    12581104
    12591105        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_negate; }
    1260         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1261         virtual Precedence precedence() const { return PrecUnary; }
    12621106    };
    12631107
     
    12701114
    12711115        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_bitnot; }
    1272         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1273         virtual Precedence precedence() const { return PrecUnary; }
    12741116    };
    12751117
     
    12821124
    12831125        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_not; }
    1284         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1285         virtual Precedence precedence() const { return PrecUnary; }
    12861126    };
    12871127
     
    13391179
    13401180        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_mul; }
    1341         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1342         virtual Precedence precedence() const { return PrecMultiplicative; }
    13431181    };
    13441182
     
    13511189
    13521190        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_div; }
    1353         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1354         virtual Precedence precedence() const { return PrecMultiplicative; }
    13551191    };
    13561192
     
    13631199
    13641200        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_mod; }
    1365         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1366         virtual Precedence precedence() const { return PrecMultiplicative; }
    13671201    };
    13681202
     
    13751209
    13761210        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_add; }
    1377         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1378         virtual Precedence precedence() const { return PrecAdditive; }
    13791211    };
    13801212
     
    13871219
    13881220        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_sub; }
    1389         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1390         virtual Precedence precedence() const { return PrecAdditive; }
    13911221    };
    13921222
     
    13991229
    14001230        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_lshift; }
    1401         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1402         virtual Precedence precedence() const { return PrecShift; }
    14031231    };
    14041232
     
    14111239
    14121240        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_rshift; }
    1413         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1414         virtual Precedence precedence() const { return PrecShift; }
    14151241    };
    14161242
     
    14231249
    14241250        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_urshift; }
    1425         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1426         virtual Precedence precedence() const { return PrecShift; }
    14271251    };
    14281252
     
    14351259
    14361260        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_less; }
    1437         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1438         virtual Precedence precedence() const { return PrecRelational; }
    14391261    };
    14401262
     
    14471269
    14481270        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_less; }
    1449         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1450         virtual Precedence precedence() const { return PrecRelational; }
    14511271    };
    14521272
     
    14591279
    14601280        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_lesseq; }
    1461         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1462         virtual Precedence precedence() const { return PrecRelational; }
    14631281    };
    14641282
     
    14711289
    14721290        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_lesseq; }
    1473         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1474         virtual Precedence precedence() const { return PrecRelational; }
    14751291    };
    14761292
     
    14961312
    14971313        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_instanceof; }
    1498         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1499         virtual Precedence precedence() const { return PrecRelational; }
    15001314
    15011315        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
     
    15101324
    15111325        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_in; }
    1512         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1513         virtual Precedence precedence() const { return PrecRelational; }
    15141326    };
    15151327
     
    15231335        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    15241336        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_eq; }
    1525         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1526         virtual Precedence precedence() const { return PrecEquality; }
    15271337    };
    15281338
     
    15351345
    15361346        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_neq; }
    1537         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1538         virtual Precedence precedence() const { return PrecEquality; }
    15391347    };
    15401348
     
    15481356        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    15491357        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_stricteq; }
    1550         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1551         virtual Precedence precedence() const { return PrecEquality; }
    15521358    };
    15531359
     
    15601366
    15611367        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_nstricteq; }
    1562         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1563         virtual Precedence precedence() const { return PrecEquality; }
    15641368    };
    15651369
     
    15721376
    15731377        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_bitand; }
    1574         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1575         virtual Precedence precedence() const { return PrecBitwiseAnd; }
    15761378    };
    15771379
     
    15841386
    15851387        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_bitor; }
    1586         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1587         virtual Precedence precedence() const { return PrecBitwiseOr; }
    15881388    };
    15891389
     
    15961396
    15971397        virtual OpcodeID opcode() const JSC_FAST_CALL { return op_bitxor; }
    1598         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1599         virtual Precedence precedence() const { return PrecBitwiseXor; }
    16001398    };
    16011399
     
    16171415
    16181416        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1619         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1620         virtual Precedence precedence() const { return (m_operator == OpLogicalAnd) ? PrecLogicalAnd : PrecLogicalOr; }
    16211417
    16221418    private:
     
    16431439
    16441440        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1645         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1646         virtual Precedence precedence() const { return PrecConditional; }
    16471441
    16481442    private:
     
    16691463        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    16701464
    1671         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1672         virtual Precedence precedence() const { return PrecAssignment; }
    1673 
    1674     protected:
     1465    private:
    16751466        Identifier m_ident;
    16761467        RefPtr<ExpressionNode> m_right;
     
    16951486        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    16961487
    1697         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1698         virtual Precedence precedence() const { return PrecAssignment; }
    1699 
    1700     protected:
     1488    private:
    17011489        Identifier m_ident;
    17021490        RefPtr<ExpressionNode> m_right;
     
    17241512        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    17251513
    1726         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1727         virtual Precedence precedence() const { return PrecAssignment; }
    1728 
    1729     protected:
     1514    private:
    17301515        RefPtr<ExpressionNode> m_base;
    17311516        RefPtr<ExpressionNode> m_subscript;
     
    17541539        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    17551540
    1756         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1757         virtual Precedence precedence() const { return PrecAssignment; }
    1758 
    1759     protected:
     1541    private:
    17601542        RefPtr<ExpressionNode> m_base;
    17611543        RefPtr<ExpressionNode> m_subscript;
     
    17811563
    17821564        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1783         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1784         virtual Precedence precedence() const { return PrecAssignment; }
    1785 
    1786     protected:
     1565
     1566    private:
    17871567        RefPtr<ExpressionNode> m_base;
    17881568        Identifier m_ident;
     
    18091589        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    18101590
    1811         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1812         virtual Precedence precedence() const { return PrecAssignment; }
    1813 
    1814     protected:
     1591    private:
    18151592        RefPtr<ExpressionNode> m_base;
    18161593        Identifier m_ident;
     
    18351612
    18361613        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1837         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1838         virtual Precedence precedence() const { return PrecAssignment; }
    1839 
    1840     protected:
     1614
     1615    private:
    18411616        RefPtr<ExpressionNode> m_left;
    18421617        Operator m_operator;
     
    18571632
    18581633        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1859         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1860         virtual Precedence precedence() const { return PrecExpression; }
    18611634
    18621635    private:
     
    18711644        {
    18721645        }
    1873         virtual Precedence precedence() const { return PrecAssignment; }
    18741646    };
    18751647
     
    18801652        virtual ~ConstDeclNode();
    18811653        virtual void releaseNodes(NodeReleaser&);
    1882 
    1883         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1884         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    18851654
    18861655        Identifier m_ident;
     
    19031672        virtual void releaseNodes(NodeReleaser&);
    19041673
    1905         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    1906        
    19071674        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    19081675
     
    19361703
    19371704        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1938         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    19391705
    19401706        StatementVector& children() { return m_children; }
     
    19421708        virtual bool isBlock() const JSC_FAST_CALL { return true; }
    19431709
    1944     protected:
     1710    private:
    19451711        StatementVector m_children;
    19461712    };
     
    19551721        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    19561722
    1957         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    19581723        virtual bool isEmptyStatement() const JSC_FAST_CALL { return true; }
    19591724    };
     
    19671732       
    19681733        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1969 
    1970         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    19711734    };
    19721735
     
    19801743
    19811744        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    1982         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    19831745
    19841746    private:
     
    19981760
    19991761        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2000 
    2001         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    20021762
    20031763    private:
     
    20181778
    20191779        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2020         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    20211780
    20221781    protected:
     
    20371796
    20381797        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2039         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    20401798
    20411799    private:
     
    20561814
    20571815        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2058         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    20591816
    20601817        virtual bool isLoop() const JSC_FAST_CALL { return true; }
     
    20781835
    20791836        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2080         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    20811837
    20821838        virtual bool isLoop() const JSC_FAST_CALL { return true; }
     
    21041860
    21051861        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2106         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    21071862
    21081863        virtual bool isLoop() const JSC_FAST_CALL { return true; }
     
    21251880
    21261881        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2127         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    21281882
    21291883        virtual bool isLoop() const JSC_FAST_CALL { return true; }
     
    21521906       
    21531907        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2154         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    21551908
    21561909    private:
     
    21721925       
    21731926        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2174         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    21751927
    21761928    private:
     
    21901942
    21911943        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2192         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    21931944        virtual bool isReturnNode() const JSC_FAST_CALL { return true; }
    21941945
     
    22121963
    22131964        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2214         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    22151965
    22161966    private:
     
    22341984
    22351985        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2236         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    22371986
    22381987    private:
     
    22532002
    22542003        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    2255         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    22562004
    22572005    private:
     
    22732021        virtual void releaseNodes(NodeReleaser&);
    22742022
    2275         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2276 
    22772023        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* dst = 0) JSC_FAST_CALL;
    22782024
     
    22842030    };
    22852031
    2286     class ParameterNode : public Node {
     2032    class ParameterNode : public ParserRefCounted {
    22872033    public:
    22882034        ParameterNode(JSGlobalData* globalData, const Identifier& ident) JSC_FAST_CALL
    2289             : Node(globalData)
     2035            : ParserRefCounted(globalData)
    22902036            , m_ident(ident)
    22912037        {
     
    22932039
    22942040        ParameterNode(JSGlobalData* globalData, ParameterNode* l, const Identifier& ident) JSC_FAST_CALL
    2295             : Node(globalData)
     2041            : ParserRefCounted(globalData)
    22962042            , m_ident(ident)
    22972043        {
     
    23022048        virtual void releaseNodes(NodeReleaser&);
    23032049
    2304         Identifier ident() JSC_FAST_CALL { return m_ident; }
    2305         ParameterNode *nextParam() JSC_FAST_CALL { return m_next.get(); }
    2306         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2307         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    2308 
    2309     private:
    2310         friend class FuncDeclNode;
    2311         friend class FuncExprNode;
     2050        const Identifier& ident() const JSC_FAST_CALL { return m_ident; }
     2051        ParameterNode* nextParam() const JSC_FAST_CALL { return m_next.get(); }
     2052
     2053    private:
    23122054        Identifier m_ident;
    23132055        RefPtr<ParameterNode> m_next;
     
    23162058    class ScopeNode : public BlockNode {
    23172059    public:
     2060        typedef DeclarationStacks::VarStack VarStack;
     2061        typedef DeclarationStacks::FunctionStack FunctionStack;
     2062
    23182063        ScopeNode(JSGlobalData*, const SourceCode&, SourceElements*, VarStack*, FunctionStack*, CodeFeatures, int numConstants) JSC_FAST_CALL;
    23192064
    2320         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2321        
    23222065        const SourceCode& source() const { return m_source; }
    23232066        const UString& sourceURL() const JSC_FAST_CALL { return m_source.provider()->url(); }
     
    24512194        }
    24522195
    2453     protected:
     2196    private:
    24542197        FunctionBodyNode(JSGlobalData*, SourceElements*, VarStack*, FunctionStack*, const SourceCode&, CodeFeatures, int numConstants) JSC_FAST_CALL;
    24552198
    2456     private:
    24572199        void generateCode(ScopeChainNode*) JSC_FAST_CALL;
    24582200
     
    24802222        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    24812223        JSFunction* makeFunction(ExecState*, ScopeChainNode*) JSC_FAST_CALL;
    2482         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2483         virtual Precedence precedence() const { return PrecMember; }
    2484         virtual bool needsParensIfLeftmost() const { return true; }
    24852224
    24862225        FunctionBodyNode* body() { return m_body.get(); }
    24872226
    24882227    private:
    2489         // Used for streamTo
    2490         friend class PropertyNode;
    24912228        Identifier m_ident;
    24922229        RefPtr<ParameterNode> m_parameter;
     
    25102247        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    25112248
    2512         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    25132249        JSFunction* makeFunction(ExecState*, ScopeChainNode*) JSC_FAST_CALL;
    25142250
     
    25222258    };
    25232259
    2524     class CaseClauseNode : public Node {
     2260    class CaseClauseNode : public ParserRefCounted {
    25252261    public:
    25262262        CaseClauseNode(JSGlobalData* globalData, ExpressionNode* expr) JSC_FAST_CALL
    2527             : Node(globalData)
     2263            : ParserRefCounted(globalData)
    25282264            , m_expr(expr)
    25292265        {
     
    25312267
    25322268        CaseClauseNode(JSGlobalData* globalData, ExpressionNode* expr, SourceElements* children) JSC_FAST_CALL
    2533             : Node(globalData)
     2269            : ParserRefCounted(globalData)
    25342270            , m_expr(expr)
    25352271        {
     
    25412277        virtual void releaseNodes(NodeReleaser&);
    25422278
    2543         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2544         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    2545 
    25462279        ExpressionNode* expr() const { return m_expr.get(); }
    25472280        StatementVector& children() { return m_children; }
     
    25522285    };
    25532286
    2554     class ClauseListNode : public Node {
     2287    class ClauseListNode : public ParserRefCounted {
    25552288    public:
    25562289        ClauseListNode(JSGlobalData* globalData, CaseClauseNode* clause) JSC_FAST_CALL
    2557             : Node(globalData)
     2290            : ParserRefCounted(globalData)
    25582291            , m_clause(clause)
    25592292        {
     
    25612294
    25622295        ClauseListNode(JSGlobalData* globalData, ClauseListNode* clauseList, CaseClauseNode* clause) JSC_FAST_CALL
    2563             : Node(globalData)
     2296            : ParserRefCounted(globalData)
    25642297            , m_clause(clause)
    25652298        {
     
    25722305        CaseClauseNode* getClause() const JSC_FAST_CALL { return m_clause.get(); }
    25732306        ClauseListNode* getNext() const JSC_FAST_CALL { return m_next.get(); }
    2574         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2575         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    2576 
    2577     private:
    2578         friend class CaseBlockNode;
     2307
     2308    private:
    25792309        RefPtr<CaseClauseNode> m_clause;
    25802310        RefPtr<ClauseListNode> m_next;
    25812311    };
    25822312
    2583     class CaseBlockNode : public Node {
     2313    class CaseBlockNode : public ParserRefCounted {
    25842314    public:
    25852315        CaseBlockNode(JSGlobalData* globalData, ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2) JSC_FAST_CALL
    2586             : Node(globalData)
     2316            : ParserRefCounted(globalData)
    25872317            , m_list1(list1)
    25882318            , m_defaultClause(defaultClause)
     
    25952325
    25962326        RegisterID* emitCodeForBlock(CodeGenerator&, RegisterID* input, RegisterID* dst = 0) JSC_FAST_CALL;
    2597 
    2598         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2599         virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    26002327
    26012328    private:
     
    26202347        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) JSC_FAST_CALL;
    26212348
    2622         virtual void streamTo(SourceStream&) const JSC_FAST_CALL;
    2623 
    26242349    private:
    26252350        RefPtr<ExpressionNode> m_expr;
Note: See TracChangeset for help on using the changeset viewer.