Changeset 34355 in webkit for trunk/JavaScriptCore/kjs/nodes.h


Ignore:
Timestamp:
Jun 3, 2008, 5:40:47 PM (17 years ago)
Author:
Darin Adler
Message:

JavaScriptCore:

2008-06-03 Darin Adler <Darin Adler>

Reviewed by Geoff.

Makes standalone SunSpider 1.025x as fast as before.

The getOwnPropertySlot virtual function now takes care of the toObject call
for get. Similarly, the put function (and later deleteProperty) does the
same for those operations. To do this, the virtual functions were moved from
the JSObject class to the JSCell class. Also, since the caller no longer knows
the identity of the "original object", which is used by JavaScript-function
based getters, changed the PropertySlot class so the original object is
already stored in the slot when getOwnPropertySlot is called, if the caller
intends to call getValue.

This affected the old interpreter code enough that the easiest thing for me
was to just delete it. While I am not certain the mysterious slowdown is not
still occurring, the net change is definitely a significant speedup.

  • VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h. (KJS::resolve): Set up the originalObject in the PropertySlot before calling getPropertySlot. Also removed the originalObject argument from getValue. (KJS::resolve_skip): Ditto. (KJS::resolveBaseAndProperty): Ditto. (KJS::resolveBaseAndFunc): Ditto. (KJS::Machine::privateExecute): Removed the toObject calls from the get and put functions where possible, instead calling directly with JSValue and letting the JSValue and JSCell calls handle toObject. Same for toThisObject.
  • kjs/ExecState.h: Removed OldInterpreterExecState.
  • API/JSBase.cpp: Updated includes.
  • kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too.
  • kjs/array_instance.cpp: (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet. (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to setValueSlot. Also use UNLIKELY around the "getting elements past the end of the array" code path; less common than successfully getting an element.
  • kjs/array_object.cpp: (KJS::getProperty): Initialize the PropertySlot with the original object. Don't pass the original object to the get function. (KJS::arrayProtoFuncFilter): Ditto. (KJS::arrayProtoFuncMap): Ditto. (KJS::arrayProtoFuncEvery): Ditto. (KJS::arrayProtoFuncForEach): Ditto. (KJS::arrayProtoFuncSome): Ditto.
  • kjs/function_object.cpp: (KJS::FunctionObjectImp::construct): Removed an obsolete comment.
  • kjs/grammar.y: Eliminated support for some of the node types that were used to optimize executing from the syntax tree.
  • kjs/internal.cpp: (KJS::StringImp::toThisObject): Added. Same as toObject. (KJS::NumberImp::toThisObject): Ditto. (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached. (KJS::GetterSetterImp::put): Ditto. (KJS::GetterSetterImp::toThisObject): Ditto.
  • kjs/internal.h: Added toThisObject to NumberImp for speed.
  • kjs/lexer.cpp: (KJS::Lexer::shift): Changed shift to just do a single character, to unroll the loop and especially to make the one character case faster. (KJS::Lexer::setCode): Call shift multiple times instead of passing a number. (KJS::Lexer::lex): Ditto. (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns. (KJS::Lexer::scanRegExp): Ditto.
  • kjs/lexer.h: Removed the count argument from shift.
  • kjs/math_object.cpp: (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN).
  • kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish execution model. (KJS::ForNode::emitCode): Handle cases where some expressions are missing by not emitting any code at all. The old way was to emit code for "true", but this is an unnecessary remnant of the old way of doing things.
  • kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish execution model.
  • kjs/object.cpp: (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter function. The old code passed in a base, but it was never used when actually getting the property; the toThisObject call was pointless. Also changed to not pass a base for setUndefined.
  • kjs/object.h: Added the new JSCell operations to GetterSetterImp. Never called. (KJS::JSObject::get): Initialize the object in the PropertySlot and don't pass it in getValue. (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument in calls to setValueSlot. (KJS::JSObject::getOwnPropertySlot): Ditto. (KJS::JSValue::get): Added. Here because it calls through to JSObject. A version of JSObject::get that also handles the other types of JSValue by creating the appropriate wrapper. Saves the virtual call to toObject. (KJS::JSValue::put): Ditto. (KJS::JSValue::deleteProperty): Ditto.
  • kjs/property_slot.cpp: (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument. (KJS::PropertySlot::ungettableGetter): Ditto. (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base as the "this" object, which will be set to the original object by the new PropertySlot initialization code. Also call toThisObject. The old code did not do this, but needed to so we can properly handle the activation object like the other similar code paths.
  • kjs/property_slot.h: (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base object. In debug builds, set the base to 0 if you don't pass one. (KJS::PropertySlot::getValue): Don't take or pass the originalObject. (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the base object in debug builds. (KJS::PropertySlot::setGetterSlot): Ditto. (KJS::PropertySlot::setUndefined): Ditto. (KJS::PropertySlot::setUngettable): Ditto. (KJS::PropertySlot::slotBase): Assert that a base object is present. This will fire if someone actually calls the get function without having passed in a base object and the getter needs it. (KJS::PropertySlot::setBase): Added. Used by the code that implements toObject so it can supply the original object after the fact. (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only code because it's an error to fetch the base if you don't have a guarantee it was set.
  • API/JSCallbackObject.h:
  • API/JSCallbackObjectFunctions.h: (KJS::JSCallbackObject::cachedValueGetter): (KJS::JSCallbackObject::staticValueGetter): (KJS::JSCallbackObject::staticFunctionGetter): (KJS::JSCallbackObject::callbackGetter):
  • kjs/JSActivation.cpp: (KJS::JSActivation::getOwnPropertySlot): (KJS::JSActivation::argumentsGetter):
  • kjs/JSActivation.h:
  • kjs/JSVariableObject.h: (KJS::JSVariableObject::symbolTableGet):
  • kjs/array_instance.h:
  • kjs/function.cpp: (KJS::FunctionImp::argumentsGetter): (KJS::FunctionImp::callerGetter): (KJS::FunctionImp::lengthGetter): (KJS::Arguments::mappedIndexGetter):
  • kjs/function.h:
  • kjs/lookup.h: (KJS::staticFunctionGetter): (KJS::staticValueGetter):
  • kjs/string_object.cpp: (KJS::StringInstance::lengthGetter): (KJS::StringInstance::indexGetter): (KJS::stringInstanceNumericPropertyGetter):
  • kjs/string_object.h: Removed originalObject arguments from getters. Don't pass base values to the various PropertySlot functions that no longer take them.
  • kjs/value.cpp: (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot. This function has to always return true, because the caller can't walk the prototype chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works for the caller. This is private, only called by getOwnPropertySlotInternal. (KJS::JSCell::put): Added. Calls toObject and then put. (KJS::JSCell::toThisObject): Added. Calls toObject.
  • kjs/value.h: Added get, put, and toThisObject to both JSValue and JSCell. These take care of the toObject operation without an additional virtual function call, and so make the common "already an object" case faster.
  • wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a better place later, or rename this header.

JavaScriptGlue:

2008-06-03 Darin Adler <Darin Adler>

  • UserObjectImp.cpp: (UserObjectImp::userObjectGetter): Removed originalObject argument.
  • UserObjectImp.h: Ditto.

WebCore:

2008-06-03 Justin Garcia <[email protected]>

Reviewed by John.

<rdar://problem/5763082> GMail: Hang when removing indent from nested list
<rdar://problem/5775449> In Gmail and GoogleDocs, a hang occurs when I attempt to apply a list style to a large selection of text
<rdar://problem/5937624> 9D32: Hang in Safari. Using 100% of processor

  • editing/InsertListCommand.cpp: (WebCore::InsertListCommand::modifyRange): doApply() may operate on and remove the last paragraph of the selection from the document if it's in the same list item as startOfCurrentParagraph. Return early to avoid an infinite loop and because there is no more work to be done. Added a FIXME (<rdar://problem/5983974>) about the incorrect endingSelection()s.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/nodes.h

    r34351 r34355  
    184184        virtual bool needsParensIfLeftmost() const { return false; }
    185185       
    186         // Used for iterative, depth-first traversal of the node tree. Does not cross function call boundaries.
    187         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL { }
    188 
    189186    protected:
    190187        Node(JSType) KJS_FAST_CALL; // used by ExpressionNode
    191188
    192         // for use in execute()
    193         JSValue* setErrorCompletion(OldInterpreterExecState*, ErrorType, const char* msg) KJS_FAST_CALL;
    194         JSValue* setErrorCompletion(OldInterpreterExecState*, ErrorType, const char* msg, const Identifier&) KJS_FAST_CALL;
    195 
    196         // for use in evaluate()
    197         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg) KJS_FAST_CALL;
    198         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, const char*) KJS_FAST_CALL;
    199         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, JSValue*, Node*) KJS_FAST_CALL;
    200         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, const Identifier&) KJS_FAST_CALL;
    201         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, JSValue*, const Identifier&) KJS_FAST_CALL;
    202         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, JSValue*, Node*, Node*) KJS_FAST_CALL;
    203         JSValue* throwError(OldInterpreterExecState*, ErrorType, const char* msg, JSValue*, Node*, const Identifier&) KJS_FAST_CALL;
    204        
    205189        RegisterID* emitThrowError(CodeGenerator&, ErrorType, const char* msg);
    206190        RegisterID* emitThrowError(CodeGenerator&, ErrorType, const char* msg, const Identifier&);
    207 
    208         JSValue* throwUndefinedVariableError(OldInterpreterExecState*, const Identifier&) KJS_FAST_CALL;
    209 
    210         void handleException(OldInterpreterExecState*) KJS_FAST_CALL;
    211         void handleException(OldInterpreterExecState*, JSValue*) KJS_FAST_CALL;
    212 
    213         // for use in execute()
    214         JSValue* rethrowException(OldInterpreterExecState*) KJS_FAST_CALL;
    215191
    216192        int m_line : 28;
     
    240216        JSType expectedReturnType() const KJS_FAST_CALL { return static_cast<JSType>(m_expectedReturnType); }
    241217
    242         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL = 0;
    243         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    244         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    245         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    246         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    247 
    248         // Used to optimize those nodes that do extra work when returning a result, even if the result has no semantic relevance
    249         virtual void optimizeForUnnecessaryResult() { }
    250 
    251218        // This needs to be in public in order to compile using GCC 3.x
    252219        typedef enum { EvalOperator, FunctionCall } CallerType;
    253     protected:
    254         template <CallerType, bool> inline JSValue* resolveAndCall(OldInterpreterExecState*, const Identifier&, ArgumentsNode*, size_t = 0);
    255220    };
    256221
     
    262227        int lastLine() const KJS_FAST_CALL { return m_lastLine; }
    263228
    264         virtual JSValue* execute(OldInterpreterExecState *exec) KJS_FAST_CALL = 0;
    265 
    266229        virtual void pushLabel(const Identifier& ident) KJS_FAST_CALL { m_labelStack.push(ident); }
    267230        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    284247        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    285248
    286         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    287249        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    288250        virtual Precedence precedence() const { return PrecPrimary; }
     
    298260        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    299261
    300         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    301         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL { return false; }
    302262        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    303263        virtual Precedence precedence() const { return PrecPrimary; }
     
    313273        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    314274
    315         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    316         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL { return true; }
    317275        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    318276        virtual Precedence precedence() const { return PrecPrimary; }
     
    340298        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    341299
    342         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    343         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    344         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    345         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    346         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    347300        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    348301        virtual Precedence precedence() const { return signbit(m_double) ? PrecUnary : PrecPrimary; }
     
    365318        }
    366319
    367         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    368         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    369         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    370 
    371320        virtual void setValue(double d) KJS_FAST_CALL { m_double = d; m_value = JSImmediate::from(d); ASSERT(m_value); }
    372321
     
    385334        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    386335
    387         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    388         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    389         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    390336        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    391337        virtual Precedence precedence() const { return PrecPrimary; }
     
    404350        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    405351
    406         JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    407352        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    408353        virtual Precedence precedence() const { return PrecPrimary; }
     
    420365        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    421366
    422         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    423367        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    424368        virtual Precedence precedence() const { return PrecPrimary; }
     
    440384
    441385        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    442         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    443 
    444         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    445         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    446         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    447         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    448         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
     386
    449387        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    450388        virtual Precedence precedence() const { return PrecPrimary; }
     
    455393
    456394    protected:
    457         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    458395        Identifier m_ident;
    459396        int m_index; // Used by LocalVarAccessNode and ScopedVarAccessNode.
     
    461398    };
    462399
    463     class LocalVarAccessNode : public ResolveNode {
    464     public:
    465         // Overwrites a ResolveNode in place.
    466         LocalVarAccessNode(int i) KJS_FAST_CALL
    467             : ResolveNode(PlacementNewAdopt)
    468         {
    469             ASSERT(i != missingSymbolMarker());
    470             m_index = i;
    471         }
    472 
    473         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    474         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    475         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    476         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    477         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    478 
    479     private:
    480         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    481     };
    482    
    483     class ScopedVarAccessNode : public ResolveNode {
    484     public:
    485         // Overwrites a ResolveNode in place.
    486         ScopedVarAccessNode(int i, size_t scopeDepth) KJS_FAST_CALL
    487         : ResolveNode(PlacementNewAdopt)
    488         {
    489             ASSERT(i != missingSymbolMarker());
    490             m_index = i;
    491             m_scopeDepth = scopeDepth;
    492         }
    493        
    494         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    495         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    496         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    497         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    498         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    499        
    500     private:
    501         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    502     };
    503    
    504     class NonLocalVarAccessNode : public ResolveNode {
    505     public:
    506         // Overwrites a ResolveNode in place.
    507         NonLocalVarAccessNode(size_t scopeDepth) KJS_FAST_CALL
    508         : ResolveNode(PlacementNewAdopt)
    509         {
    510             ASSERT(scopeDepth != 0);
    511             m_scopeDepth = scopeDepth;
    512         }
    513        
    514         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    515         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    516         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    517         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    518         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    519        
    520     private:
    521         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    522     };
    523 
    524400    class ElementNode : public Node {
    525401    public:
     
    539415        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    540416        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    541         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    542417
    543418        PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return m_next.release(); }
    544 
    545         JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    546419
    547420    private:
     
    576449        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    577450
    578         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    579         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    580451        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    581452        virtual Precedence precedence() const { return PrecPrimary; }
     
    598469        }
    599470
    600         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    601471        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    602472        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    603473
    604         JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    605474        const Identifier& name() const { return m_name; }
    606475
     
    626495
    627496        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    628         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    629497        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    630498        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    631499
    632         JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    633500        PassRefPtr<PropertyListNode> releaseNext() KJS_FAST_CALL { return m_next.release(); }
    634501
     
    651518
    652519        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    653         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    654         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    655520        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    656521        virtual Precedence precedence() const { return PrecPrimary; }
     
    671536        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    672537
    673         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    674         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    675         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    676         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    677         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    678         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    679538        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    680539        virtual Precedence precedence() const { return PrecMember; }
     
    686545
    687546    private:
    688         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    689 
    690547        RefPtr<ExpressionNode> m_base;
    691548        RefPtr<ExpressionNode> m_subscript;
     
    701558
    702559        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    703         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    704         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    705         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    706         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    707         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    708         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    709560        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    710561        virtual Precedence precedence() const { return PrecMember; }
     
    716567
    717568    private:
    718         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    719 
    720569        RefPtr<ExpressionNode> m_base;
    721570        Identifier m_ident;
     
    736585
    737586        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    738         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    739587        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    740588        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    741589
    742         void evaluateList(OldInterpreterExecState*, List&) KJS_FAST_CALL;
    743590        PassRefPtr<ArgumentListNode> releaseNext() KJS_FAST_CALL { return m_next.release(); }
    744591
     
    758605        }
    759606
    760         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    761607        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    762608        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    763 
    764         void evaluateList(OldInterpreterExecState* exec, List& list) KJS_FAST_CALL { if (m_listNode) m_listNode->evaluateList(exec, list); }
    765609
    766610        RefPtr<ArgumentListNode> m_listNode;
     
    782626        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    783627
    784         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    785         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    786         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    787         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    788         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    789         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    790628        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    791629        virtual Precedence precedence() const { return PrecLeftHandSide; }
    792630
    793631    private:
    794         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    795 
    796632        RefPtr<ExpressionNode> m_expr;
    797633        RefPtr<ArgumentsNode> m_args;
     
    806642
    807643        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    808         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    809         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    810644        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    811645        virtual Precedence precedence() const { return PrecCall; }
     
    824658
    825659        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    826         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    827         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    828660        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    829661        virtual Precedence precedence() const { return PrecCall; }
     
    851683        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    852684
    853         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    854         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    855         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    856         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    857         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    858         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    859685        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    860686        virtual Precedence precedence() const { return PrecCall; }
    861687
    862688    protected:
    863         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    864 
    865689        Identifier m_ident;
    866690        RefPtr<ArgumentsNode> m_args;
     
    869693    };
    870694   
    871     class LocalVarFunctionCallNode : public FunctionCallResolveNode {
    872     public:
    873         LocalVarFunctionCallNode(int i) KJS_FAST_CALL
    874             : FunctionCallResolveNode(PlacementNewAdopt)
    875         {
    876             ASSERT(i != missingSymbolMarker());
    877             m_index = i;
    878         }
    879        
    880         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    881         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    882         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    883         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    884         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    885        
    886     private:
    887         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    888     };
    889    
    890     class ScopedVarFunctionCallNode : public FunctionCallResolveNode {
    891     public:
    892         ScopedVarFunctionCallNode(int i, size_t depth) KJS_FAST_CALL
    893             : FunctionCallResolveNode(PlacementNewAdopt)
    894         {
    895             ASSERT(i != missingSymbolMarker());
    896             m_index = i;
    897             m_scopeDepth = depth;
    898         }
    899        
    900         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    901         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    902         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    903         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    904         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    905        
    906     private:
    907         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    908     };
    909    
    910     class NonLocalVarFunctionCallNode : public FunctionCallResolveNode {
    911     public:
    912         NonLocalVarFunctionCallNode(size_t depth) KJS_FAST_CALL
    913             : FunctionCallResolveNode(PlacementNewAdopt)
    914         {
    915             m_scopeDepth = depth;
    916         }
    917        
    918         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    919         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    920         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    921         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    922         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    923        
    924     private:
    925         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    926     };
    927 
    928695    class FunctionCallBracketNode : public ExpressionNode {
    929696    public:
     
    936703
    937704        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    938         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    939         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    940705        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    941706        virtual Precedence precedence() const { return PrecCall; }
     
    957722
    958723        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    959         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    960         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    961         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    962         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    963         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    964         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    965724        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    966725        virtual Precedence precedence() const { return PrecCall; }
    967726
    968727    private:
    969         ALWAYS_INLINE JSValue* inlineEvaluate(OldInterpreterExecState*);
    970 
    971728        RefPtr<ExpressionNode> m_base;
    972729        Identifier m_ident;
     
    1006763
    1007764        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1008         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1009         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1010765        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1011766        virtual Precedence precedence() const { return PrecPostfix; }
    1012         virtual void optimizeForUnnecessaryResult();
    1013     };
    1014 
    1015     class PostIncLocalVarNode : public PostIncResolveNode {
    1016     public:
    1017         PostIncLocalVarNode(int i) KJS_FAST_CALL
    1018             : PostIncResolveNode(PlacementNewAdopt)
    1019         {
    1020             ASSERT(i != missingSymbolMarker());
    1021             m_index = i;
    1022         }
    1023 
    1024         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1025         virtual void optimizeForUnnecessaryResult();
    1026     };
    1027 
    1028     class PostIncConstNode : public PostIncResolveNode {
    1029     public:
    1030         PostIncConstNode(int i) KJS_FAST_CALL
    1031             : PostIncResolveNode(PlacementNewAdopt)
    1032         {
    1033             ASSERT(i != missingSymbolMarker());
    1034             m_index = i;
    1035         }
    1036 
    1037         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1038767    };
    1039768
     
    1052781        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1053782
    1054         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1055         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1056783        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1057784        virtual Precedence precedence() const { return PrecPostfix; }
    1058         virtual void optimizeForUnnecessaryResult();
    1059     };
    1060 
    1061     class PostDecLocalVarNode : public PostDecResolveNode {
    1062     public:
    1063         PostDecLocalVarNode(int i) KJS_FAST_CALL
    1064             : PostDecResolveNode(PlacementNewAdopt)
    1065         {
    1066             ASSERT(i != missingSymbolMarker());
    1067             m_index = i;
    1068         }
    1069 
    1070         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1071         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1072         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1073         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1074         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1075         virtual void optimizeForUnnecessaryResult();
    1076 
    1077     private:
    1078         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1079     };
    1080 
    1081     class PostDecConstNode : public PostDecResolveNode {
    1082     public:
    1083         PostDecConstNode(int i) KJS_FAST_CALL
    1084             : PostDecResolveNode(PlacementNewAdopt)
    1085         {
    1086             ASSERT(i != missingSymbolMarker());
    1087             m_index = i;
    1088         }
    1089 
    1090         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1091785    };
    1092786
     
    1099793        }
    1100794
    1101         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1102795        virtual Precedence precedence() const { return PrecPostfix; }
    1103796
     
    1116809        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1117810
    1118         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1119811        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1120812    };
     
    1129821        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1130822
    1131         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1132823        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1133824    };
     
    1141832        }
    1142833
    1143         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1144834        virtual Precedence precedence() const { return PrecPostfix; }
    1145835
     
    1158848        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1159849
    1160         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1161850        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1162851    };
     
    1171860        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1172861
    1173         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1174862        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1175863    };
     
    1184872
    1185873        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1186         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1187874        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1188875        virtual Precedence precedence() const { return PrecPostfix; }
     
    1208895        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1209896
    1210         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1211         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1212897        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1213898        virtual Precedence precedence() const { return PrecUnary; }
     
    1215900    private:
    1216901        Identifier m_ident;
    1217     };
    1218 
    1219     class LocalVarDeleteNode : public DeleteResolveNode {
    1220     public:
    1221         LocalVarDeleteNode() KJS_FAST_CALL
    1222             : DeleteResolveNode(PlacementNewAdopt)
    1223         {
    1224         }
    1225 
    1226         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1227902    };
    1228903
     
    1237912        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1238913
    1239         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1240         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1241914        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1242915        virtual Precedence precedence() const { return PrecUnary; }
     
    1257930        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1258931
    1259         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1260         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1261932        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1262933        virtual Precedence precedence() const { return PrecUnary; }
     
    1276947        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1277948
    1278         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1279         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1280949        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1281950        virtual Precedence precedence() const { return PrecUnary; }
     
    1294963        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1295964
    1296         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1297         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1298965        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1299966        virtual Precedence precedence() const { return PrecUnary; }
     
    1320987        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1321988
    1322         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1323         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1324989        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    1325990        virtual Precedence precedence() const { return PrecUnary; }
     
    1332997    };
    1333998
    1334     class LocalVarTypeOfNode : public TypeOfResolveNode {
    1335     public:
    1336         LocalVarTypeOfNode(int i) KJS_FAST_CALL
    1337             : TypeOfResolveNode(PlacementNewAdopt)
    1338         {
    1339             m_expectedReturnType = StringType;
    1340             ASSERT(i != missingSymbolMarker());
    1341             m_index = i;
    1342         }
    1343 
    1344         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1345     };
    1346 
    1347999    class TypeOfValueNode : public ExpressionNode {
    13481000    public:
     
    13551007        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    13561008
    1357         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1358         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    13591009        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13601010        virtual Precedence precedence() const { return PrecUnary; }
     
    13781028        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    13791029
    1380         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1381         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    13821030        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13831031        virtual Precedence precedence() const { return PrecUnary; }
    1384     };
    1385 
    1386     class PreIncLocalVarNode : public PreIncResolveNode {
    1387     public:
    1388         PreIncLocalVarNode(int i) KJS_FAST_CALL
    1389             : PreIncResolveNode(PlacementNewAdopt)
    1390         {
    1391             ASSERT(i != missingSymbolMarker());
    1392             m_index = i;
    1393         }
    1394 
    1395         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1396     };
    1397 
    1398     class PreIncConstNode : public PreIncResolveNode {
    1399     public:
    1400         PreIncConstNode(int i) KJS_FAST_CALL
    1401             : PreIncResolveNode(PlacementNewAdopt)
    1402         {
    1403             ASSERT(i != missingSymbolMarker());
    1404             m_index = i;
    1405         }
    1406 
    1407         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    14081032    };
    14091033
     
    14221046        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    14231047
    1424         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1425         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    14261048        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    14271049        virtual Precedence precedence() const { return PrecUnary; }
    1428     };
    1429 
    1430     class PreDecLocalVarNode : public PreDecResolveNode {
    1431     public:
    1432         PreDecLocalVarNode(int i) KJS_FAST_CALL
    1433             : PreDecResolveNode(PlacementNewAdopt)
    1434         {
    1435             ASSERT(i != missingSymbolMarker());
    1436             m_index = i;
    1437         }
    1438 
    1439         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1440     };
    1441 
    1442     class PreDecConstNode : public PreDecResolveNode {
    1443     public:
    1444         PreDecConstNode(int i) KJS_FAST_CALL
    1445             : PreDecResolveNode(PlacementNewAdopt)
    1446         {
    1447             ASSERT(i != missingSymbolMarker());
    1448             m_index = i;
    1449         }
    1450 
    1451         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    14521050    };
    14531051
     
    14601058        }
    14611059
    1462         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    14631060        virtual Precedence precedence() const { return PrecUnary; }
    14641061
     
    14771074        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    14781075
    1479         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    14801076        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    14811077    };
     
    14901086        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    14911087
    1492         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    14931088        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    14941089    };
     
    15021097        }
    15031098
    1504         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    15051099        virtual Precedence precedence() const { return PrecPostfix; }
    15061100
     
    15191113        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    15201114
    1521         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    15221115        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15231116    };
     
    15321125        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    15331126
    1534         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    15351127        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15361128    };
     
    15451137
    15461138        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1547         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    15481139        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15491140        virtual Precedence precedence() const { return PrecUnary; }
     
    15631154
    15641155        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1565         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1566         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1567         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1568         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1569         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1570         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    15711156        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15721157        virtual Precedence precedence() const { return PrecUnary; }
     
    15851170
    15861171        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1587         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1588         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1589         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    15901172        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15911173        virtual Precedence precedence() const { return PrecUnary; }
     
    16041186
    16051187        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1606         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1607         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1608         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1609         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1610         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1611         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    16121188        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    16131189        virtual Precedence precedence() const { return PrecUnary; }
    16141190
    16151191    private:
    1616         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    1617 
    16181192        RefPtr<ExpressionNode> m_expr;
    16191193    };
     
    16281202
    16291203        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1630         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1631         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1632         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    16331204        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    16341205        virtual Precedence precedence() const { return PrecUnary; }
     
    16481219
    16491220        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1650         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1651         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1652         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1653         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1654         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1655         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    16561221        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    16571222        virtual Precedence precedence() const { return PrecMultiplicitave; }
    16581223
    16591224    private:
    1660         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1661 
    16621225        RefPtr<ExpressionNode> m_term1;
    16631226        RefPtr<ExpressionNode> m_term2;
     
    16741237
    16751238        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1676         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1677         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1678         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1679         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1680         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    16811239        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    16821240        virtual Precedence precedence() const { return PrecMultiplicitave; }
    16831241
    16841242    private:
    1685         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1686 
    16871243        RefPtr<ExpressionNode> m_term1;
    16881244        RefPtr<ExpressionNode> m_term2;
     
    16991255
    17001256        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1701         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1702         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1703         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1704         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1705         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1706         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    17071257        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    17081258        virtual Precedence precedence() const { return PrecMultiplicitave; }
    17091259
    17101260    private:
    1711         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1712 
    17131261        RefPtr<ExpressionNode> m_term1;
    17141262        RefPtr<ExpressionNode> m_term2;
     
    17241272
    17251273        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1726         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1727         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1728         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1729         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1730         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    17311274        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    17321275        virtual Precedence precedence() const { return PrecAdditive; }
     
    17421285        RefPtr<ExpressionNode> m_term1;
    17431286        RefPtr<ExpressionNode> m_term2;
    1744 
    1745     private:
    1746         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1747     };
    1748 
    1749     class AddNumbersNode : public AddNode {
    1750     public:
    1751         AddNumbersNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL
    1752             : AddNode(term1, term2, NumberType)
    1753         {
    1754         }
    1755 
    1756         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1757         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1758         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1759         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1760 
    1761     private:
    1762         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1763     };
    1764 
    1765     class AddStringLeftNode : public AddNode {
    1766     public:
    1767         AddStringLeftNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL
    1768             : AddNode(term1, term2, StringType)
    1769         {
    1770         }
    1771 
    1772         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1773     };
    1774 
    1775     class AddStringRightNode : public AddNode {
    1776     public:
    1777         AddStringRightNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL
    1778             : AddNode(term1, term2, StringType)
    1779         {
    1780         }
    1781 
    1782         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1783     };
    1784 
    1785     class AddStringsNode : public AddNode {
    1786     public:
    1787         AddStringsNode(ExpressionNode* term1, ExpressionNode* term2) KJS_FAST_CALL
    1788             : AddNode(term1, term2, StringType)
    1789         {
    1790         }
    1791 
    1792         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    17931287    };
    17941288
     
    18031297
    18041298        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1805         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1806         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1807         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1808         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1809         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    18101299        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    18111300        virtual Precedence precedence() const { return PrecAdditive; }
    18121301
    18131302    private:
    1814         ALWAYS_INLINE double inlineEvaluateToNumber(OldInterpreterExecState*);
    1815 
    18161303        RefPtr<ExpressionNode> m_term1;
    18171304        RefPtr<ExpressionNode> m_term2;
     
    18281315
    18291316        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1830         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1831         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1832         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1833         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1834         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    18351317        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    18361318        virtual Precedence precedence() const { return PrecShift; }
    18371319
    18381320    private:
    1839         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    1840 
    18411321        RefPtr<ExpressionNode> m_term1;
    18421322        RefPtr<ExpressionNode> m_term2;
     
    18531333
    18541334        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1855         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1856         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1857         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1858         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1859         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    18601335        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    18611336        virtual Precedence precedence() const { return PrecShift; }
    18621337
    18631338    private:
    1864         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    1865 
    18661339        RefPtr<ExpressionNode> m_term1;
    18671340        RefPtr<ExpressionNode> m_term2;
     
    18781351
    18791352        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1880         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1881         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1882         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    1883         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    1884         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    18851353        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    18861354        virtual Precedence precedence() const { return PrecShift; }
    1887     private:
    1888         ALWAYS_INLINE uint32_t inlineEvaluateToUInt32(OldInterpreterExecState*);
    1889 
     1355
     1356    private:
    18901357        RefPtr<ExpressionNode> m_term1;
    18911358        RefPtr<ExpressionNode> m_term2;
     
    19021369
    19031370        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1904         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1905         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1906         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    19071371        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    19081372        virtual Precedence precedence() const { return PrecRelational; }
    1909 
    1910     private:
    1911         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    19121373
    19131374    protected:
     
    19161377    };
    19171378
    1918     class LessNumbersNode : public LessNode {
    1919     public:
    1920         LessNumbersNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1921             : LessNode(expr1, expr2)
    1922         {
    1923         }
    1924 
    1925         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1926         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1927 
    1928     private:
    1929         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    1930     };
    1931 
    1932     class LessStringsNode : public LessNode {
    1933     public:
    1934         LessStringsNode(ExpressionNode* expr1, ExpressionNode* expr2) KJS_FAST_CALL
    1935             : LessNode(expr1, expr2)
    1936         {
    1937         }
    1938 
    1939         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1940         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    1941 
    1942     private:
    1943         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    1944     };
    1945 
    19461379    class GreaterNode : public ExpressionNode {
    19471380    public:
     
    19531386
    19541387        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1955         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1956         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1957         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    19581388        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    19591389        virtual Precedence precedence() const { return PrecRelational; }
    19601390
    19611391    private:
    1962         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    1963 
    19641392        RefPtr<ExpressionNode> m_expr1;
    19651393        RefPtr<ExpressionNode> m_expr2;
     
    19751403
    19761404        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1977         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    1978         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    1979         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    19801405        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    19811406        virtual Precedence precedence() const { return PrecRelational; }
    19821407
    19831408    private:
    1984         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    1985 
    19861409        RefPtr<ExpressionNode> m_expr1;
    19871410        RefPtr<ExpressionNode> m_expr2;
     
    19971420
    19981421        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    1999         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2000         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2001         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    20021422        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20031423        virtual Precedence precedence() const { return PrecRelational; }
    20041424
    20051425    private:
    2006         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2007 
    20081426        RefPtr<ExpressionNode> m_expr1;
    20091427        RefPtr<ExpressionNode> m_expr2;
     
    20201438
    20211439        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2022         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2023         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2024         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    20251440        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20261441        virtual Precedence precedence() const { return PrecRelational; }
     
    20411456        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    20421457
    2043         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2044         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2045         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    20461458        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20471459        virtual Precedence precedence() const { return PrecRelational; }
     
    20621474
    20631475        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2064         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2065         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2066         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    20671476        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20681477        virtual Precedence precedence() const { return PrecEquality; }
    20691478
    20701479    private:
    2071         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2072 
    20731480        RefPtr<ExpressionNode> m_expr1;
    20741481        RefPtr<ExpressionNode> m_expr2;
     
    20851492
    20861493        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2087         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2088         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2089         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    20901494        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20911495        virtual Precedence precedence() const { return PrecEquality; }
    20921496
    20931497    private:
    2094         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2095 
    20961498        RefPtr<ExpressionNode> m_expr1;
    20971499        RefPtr<ExpressionNode> m_expr2;
     
    21081510
    21091511        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2110         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2111         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2112         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    21131512        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    21141513        virtual Precedence precedence() const { return PrecEquality; }
    21151514
    21161515    private:
    2117         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2118 
    21191516        RefPtr<ExpressionNode> m_expr1;
    21201517        RefPtr<ExpressionNode> m_expr2;
     
    21311528
    21321529        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2133         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2134         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2135         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    21361530        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    21371531        virtual Precedence precedence() const { return PrecEquality; }
    21381532
    21391533    private:
    2140         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2141 
    21421534        RefPtr<ExpressionNode> m_expr1;
    21431535        RefPtr<ExpressionNode> m_expr2;
     
    21541546
    21551547        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2156         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2157         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2158         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    2159         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    2160         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    2161         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    21621548        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    21631549        virtual Precedence precedence() const { return PrecBitwiseAnd; }
    21641550
    21651551    private:
    2166         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    2167 
    21681552        RefPtr<ExpressionNode> m_expr1;
    21691553        RefPtr<ExpressionNode> m_expr2;
     
    21801564
    21811565        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2182         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2183         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2184         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    2185         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    2186         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    2187         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    21881566        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    21891567        virtual Precedence precedence() const { return PrecBitwiseOr; }
    21901568
    21911569    private:
    2192         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    2193 
    21941570        RefPtr<ExpressionNode> m_expr1;
    21951571        RefPtr<ExpressionNode> m_expr2;
     
    22061582
    22071583        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2208         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2209         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2210         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    2211         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    2212         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    2213         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    22141584        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    22151585        virtual Precedence precedence() const { return PrecBitwiseXor; }
    22161586
    22171587    private:
    2218         ALWAYS_INLINE int32_t inlineEvaluateToInt32(OldInterpreterExecState*);
    2219 
    22201588        RefPtr<ExpressionNode> m_expr1;
    22211589        RefPtr<ExpressionNode> m_expr2;
     
    22351603
    22361604        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2237         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2238         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2239         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    22401605        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    22411606        virtual Precedence precedence() const { return PrecLogicalAnd; }
    22421607
    22431608    private:
    2244         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2245 
    22461609        RefPtr<ExpressionNode> m_expr1;
    22471610        RefPtr<ExpressionNode> m_expr2;
     
    22581621
    22591622        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2260         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2261         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2262         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    22631623        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    22641624        virtual Precedence precedence() const { return PrecLogicalOr; }
    22651625
    22661626    private:
    2267         ALWAYS_INLINE bool inlineEvaluateToBoolean(OldInterpreterExecState*);
    2268 
    22691627        RefPtr<ExpressionNode> m_expr1;
    22701628        RefPtr<ExpressionNode> m_expr2;
     
    22841642
    22851643        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2286         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2287         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2288         virtual bool evaluateToBoolean(OldInterpreterExecState*) KJS_FAST_CALL;
    2289         virtual double evaluateToNumber(OldInterpreterExecState*) KJS_FAST_CALL;
    2290         virtual int32_t evaluateToInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    2291         virtual uint32_t evaluateToUInt32(OldInterpreterExecState*) KJS_FAST_CALL;
    22921644        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    22931645        virtual Precedence precedence() const { return PrecConditional; }
     
    23191671        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    23201672
    2321         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2322         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    23231673        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    23241674        virtual Precedence precedence() const { return PrecAssignment; }
     
    23321682    };
    23331683
    2334     class ReadModifyLocalVarNode : public ReadModifyResolveNode {
    2335     public:
    2336         ReadModifyLocalVarNode(int i) KJS_FAST_CALL
    2337             : ReadModifyResolveNode(PlacementNewAdopt)
    2338         {
    2339             ASSERT(i != missingSymbolMarker());
    2340             m_index = i;
    2341         }
    2342 
    2343         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2344     };
    2345 
    2346     class ReadModifyConstNode : public ReadModifyResolveNode {
    2347     public:
    2348         ReadModifyConstNode(int i) KJS_FAST_CALL
    2349             : ReadModifyResolveNode(PlacementNewAdopt)
    2350         {
    2351             ASSERT(i != missingSymbolMarker());
    2352             m_index = i;
    2353         }
    2354 
    2355         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2356     };
    2357 
    23581684    class AssignResolveNode : public ExpressionNode {
    23591685    public:
     
    23741700        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    23751701
    2376         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2377         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    23781702        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    23791703        virtual Precedence precedence() const { return PrecAssignment; }
     
    23841708        size_t m_index; // Used by ReadModifyLocalVarNode.
    23851709        bool m_rightHasAssignments;
    2386     };
    2387 
    2388     class AssignLocalVarNode : public AssignResolveNode {
    2389     public:
    2390         AssignLocalVarNode(int i) KJS_FAST_CALL
    2391             : AssignResolveNode(PlacementNewAdopt)
    2392         {
    2393             ASSERT(i != missingSymbolMarker());
    2394             m_index = i;
    2395         }
    2396 
    2397         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2398     };
    2399 
    2400     class AssignConstNode : public AssignResolveNode {
    2401     public:
    2402         AssignConstNode() KJS_FAST_CALL
    2403             : AssignResolveNode(PlacementNewAdopt)
    2404         {
    2405         }
    2406 
    2407         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    24081710    };
    24091711
     
    24221724        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    24231725
    2424         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2425         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    24261726        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    24271727        virtual Precedence precedence() const { return PrecAssignment; }
     
    24491749        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    24501750
    2451         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2452         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    24531751        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    24541752        virtual Precedence precedence() const { return PrecAssignment; }
     
    24731771
    24741772        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2475         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2476         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    24771773        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    24781774        virtual Precedence precedence() const { return PrecAssignment; }
     
    24981794        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    24991795
    2500         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2501         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    25021796        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    25031797        virtual Precedence precedence() const { return PrecAssignment; }
     
    25211815
    25221816        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2523         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    25241817        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    25251818        virtual Precedence precedence() const { return PrecAssignment; }
     
    25371830            , m_expr2(expr2)
    25381831        {
    2539             m_expr1->optimizeForUnnecessaryResult();
    2540         }
    2541 
    2542         virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2543         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2544         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
     1832        }
     1833
     1834        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    25451835        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    25461836        virtual Precedence precedence() const { return PrecExpression; }
     
    25641854        ConstDeclNode(const Identifier& ident, ExpressionNode* in) KJS_FAST_CALL;
    25651855
    2566         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2567         virtual KJS::JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    2568         void evaluateSingle(OldInterpreterExecState*) KJS_FAST_CALL;
    25691856        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    25701857        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    25771864        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    25781865        virtual RegisterID* emitCodeSingle(CodeGenerator&) KJS_FAST_CALL;
    2579     private:
    2580         void handleSlowCase(OldInterpreterExecState*, const ScopeChain&, JSValue*) KJS_FAST_CALL NEVER_INLINE;
    25811866    };
    25821867
     
    25881873        }
    25891874
    2590         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2591         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    25921875        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    25931876       
    25941877        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
     1878
    25951879    private:
    25961880        RefPtr<ConstDeclNode> m_next;
     
    26171901
    26181902        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2619         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2620         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    26211903        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    26221904
     
    26351917        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    26361918
    2637         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    26381919        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    26391920        virtual bool isEmptyStatement() const KJS_FAST_CALL { return true; }
     
    26601941
    26611942        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2662         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2663         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    26641943        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    26651944
     
    26771956        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    26781957
    2679         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2680         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    26811958        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    26821959
     
    26941971
    26951972        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2696         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2697         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    26981973        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    26991974
     
    27121987
    27131988        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2714         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2715         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    27161989        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    27171990
     
    27292002
    27302003        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2731         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2732         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    27332004        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    27342005
     
    27472018
    27482019        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2749         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2750         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    27512020        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    27522021
     
    27592028    public:
    27602029        ForNode(ExpressionNode* expr1, ExpressionNode* expr2, ExpressionNode* expr3, StatementNode* statement, bool expr1WasVarDecl) KJS_FAST_CALL
    2761             : m_expr1(expr1 ? expr1 : new PlaceholderTrueNode)
    2762             , m_expr2(expr2 ? expr2 : new PlaceholderTrueNode)
    2763             , m_expr3(expr3 ? expr3 : new PlaceholderTrueNode)
     2030            : m_expr1(expr1)
     2031            , m_expr2(expr2)
     2032            , m_expr3(expr3)
    27642033            , m_statement(statement)
    27652034            , m_expr1WasVarDecl(expr1 && expr1WasVarDecl)
    27662035        {
    2767             ASSERT(m_expr1);
    2768             ASSERT(m_expr2);
    2769             ASSERT(m_expr3);
    27702036            ASSERT(statement);
    2771 
    2772             m_expr1->optimizeForUnnecessaryResult();
    2773             m_expr3->optimizeForUnnecessaryResult();
    2774         }
    2775 
    2776         virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2777         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2778         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
     2037        }
     2038
     2039        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    27792040        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    27802041
     
    27932054       
    27942055        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2795         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2796         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    27972056        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    27982057
     
    28182077       
    28192078        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2820         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    28212079        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28222080
     
    28372095       
    28382096        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2839         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    28402097        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28412098
     
    28522109
    28532110        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2854         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2855         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    28562111        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28572112        virtual bool isReturnNode() const KJS_FAST_CALL { return true; }
     
    28702125
    28712126        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2872         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2873         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    28742127        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28752128
     
    28882141
    28892142        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2890         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2891         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    28922143        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28932144        virtual void pushLabel(const Identifier& ident) KJS_FAST_CALL { m_statement->pushLabel(ident); }
     
    29062157
    29072158        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    2908         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2909         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    29102159        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    29112160
     
    29242173        }
    29252174
    2926         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    2927         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    29282175        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    29292176
     
    29782225       
    29792226    protected:
    2980         void optimizeVariableAccess(OldInterpreterExecState*) KJS_FAST_CALL;
    2981 
    29822227        VarStack m_varStack;
    29832228        FunctionStack m_functionStack;
     
    29952240        virtual ~ProgramNode();
    29962241       
    2997         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    2998 
    29992242        ProgramCodeBlock& code(ScopeChainNode* scopeChain, bool canCreateGlobals) KJS_FAST_CALL
    30002243        {
     
    30102253        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    30112254
    3012         void initializeSymbolTable(OldInterpreterExecState*) KJS_FAST_CALL;
    3013         ALWAYS_INLINE void processDeclarations(OldInterpreterExecState*) KJS_FAST_CALL;
    3014 
    30152255        Vector<size_t> m_varIndexes; // Storage indexes belonging to the nodes in m_varStack. (Recorded to avoid double lookup.)
    30162256        Vector<size_t> m_functionIndexes; // Storage indexes belonging to the nodes in m_functionStack. (Recorded to avoid double lookup.)
     
    30242264        virtual ~EvalNode();
    30252265       
    3026         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    3027 
    30282266        EvalCodeBlock& code(ScopeChainNode* scopeChain) KJS_FAST_CALL
    30292267        {
     
    30362274        EvalNode(SourceElements*, VarStack*, FunctionStack*, bool usesEval, bool needsClosure) KJS_FAST_CALL;
    30372275
    3038         ALWAYS_INLINE void processDeclarations(OldInterpreterExecState*) KJS_FAST_CALL;
    30392276        void generateCode(ScopeChainNode*) KJS_FAST_CALL;
    30402277        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
     
    30992336        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    31002337        FunctionImp* makeFunction(ExecState*, ScopeChainNode*) KJS_FAST_CALL;
    3101         virtual JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    31022338        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    31032339        virtual Precedence precedence() const { return PrecMember; }
     
    31292365        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    31302366
    3131         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    31322367        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    31332368        FunctionImp* makeFunction(ExecState*, ScopeChainNode*) KJS_FAST_CALL;
     
    31582393        }
    31592394
    3160         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    31612395        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    31622396        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    3163 
    3164         JSValue* evaluate(OldInterpreterExecState*) KJS_FAST_CALL;
    3165         JSValue* executeStatements(OldInterpreterExecState*) KJS_FAST_CALL;
    31662397
    31672398        ExpressionNode* expr() const { return m_expr.get(); }
     
    31862417        }
    31872418
    3188         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    31892419        CaseClauseNode* getClause() const KJS_FAST_CALL { return m_clause.get(); }
    31902420        ClauseListNode* getNext() const KJS_FAST_CALL { return m_next.get(); }
     
    32102440        RegisterID* emitCodeForBlock(CodeGenerator&, RegisterID* input, RegisterID* dst = 0) KJS_FAST_CALL;
    32112441
    3212         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    3213         JSValue* executeBlock(OldInterpreterExecState*, JSValue *input) KJS_FAST_CALL;
    32142442        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    32152443        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    32312459        virtual RegisterID* emitCode(CodeGenerator&, RegisterID* = 0) KJS_FAST_CALL;
    32322460
    3233         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    3234         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    32352461        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    32362462
     
    32442470        BreakpointCheckStatement(PassRefPtr<StatementNode>) KJS_FAST_CALL;
    32452471
    3246         virtual JSValue* execute(OldInterpreterExecState*) KJS_FAST_CALL;
    3247         virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    3248         virtual void optimizeVariableAccess(OldInterpreterExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2472        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    32492473
    32502474    private:
Note: See TracChangeset for help on using the changeset viewer.