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


Ignore:
Timestamp:
Nov 13, 2007, 12:02:44 AM (18 years ago)
Author:
[email protected]
Message:

2007-11-12 Eric Seidel <[email protected]>

Reviewed by Oliver.

Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
Fix a few missing evaluateToBoolean methods
Deploy all evaluateTo* functions to more nodes to avoid slowdowns
http://bugs.webkit.org/show_bug.cgi?id=15950

SunSpider claims this is at least a 1.4% speedup.

  • kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32): (KJS::JSImmediate::toDouble): (KJS::JSImmediate::getUInt32):
  • kjs/nodes.cpp: (KJS::ExpressionNode::evaluateToNumber): (KJS::ExpressionNode::evaluateToInt32): (KJS::ExpressionNode::evaluateToUInt32): (KJS::NumberNode::evaluateToInt32): (KJS::NumberNode::evaluateToUInt32): (KJS::ImmediateNumberNode::evaluateToInt32): (KJS::ImmediateNumberNode::evaluateToUInt32): (KJS::ResolveNode::evaluate): (KJS::ResolveNode::evaluateToNumber): (KJS::ResolveNode::evaluateToBoolean): (KJS::ResolveNode::evaluateToInt32): (KJS::ResolveNode::evaluateToUInt32): (KJS::LocalVarAccessNode::evaluateToInt32): (KJS::LocalVarAccessNode::evaluateToUInt32): (KJS::BracketAccessorNode::evaluateToNumber): (KJS::BracketAccessorNode::evaluateToBoolean): (KJS::BracketAccessorNode::evaluateToInt32): (KJS::BracketAccessorNode::evaluateToUInt32): (KJS::DotAccessorNode::inlineEvaluate): (KJS::DotAccessorNode::evaluate): (KJS::DotAccessorNode::evaluateToNumber): (KJS::DotAccessorNode::evaluateToBoolean): (KJS::DotAccessorNode::evaluateToInt32): (KJS::DotAccessorNode::evaluateToUInt32): (KJS::NewExprNode::inlineEvaluate): (KJS::NewExprNode::evaluate): (KJS::NewExprNode::evaluateToNumber): (KJS::NewExprNode::evaluateToBoolean): (KJS::NewExprNode::evaluateToInt32): (KJS::NewExprNode::evaluateToUInt32): (KJS::FunctionCallResolveNode::inlineEvaluate): (KJS::FunctionCallResolveNode::evaluate): (KJS::FunctionCallResolveNode::evaluateToNumber): (KJS::FunctionCallResolveNode::evaluateToBoolean): (KJS::FunctionCallResolveNode::evaluateToInt32): (KJS::FunctionCallResolveNode::evaluateToUInt32): (KJS::LocalVarFunctionCallNode::evaluate): (KJS::LocalVarFunctionCallNode::evaluateToNumber): (KJS::LocalVarFunctionCallNode::evaluateToBoolean): (KJS::LocalVarFunctionCallNode::evaluateToInt32): (KJS::LocalVarFunctionCallNode::evaluateToUInt32): (KJS::FunctionCallDotNode::evaluate): (KJS::FunctionCallDotNode::evaluateToNumber): (KJS::FunctionCallDotNode::evaluateToBoolean): (KJS::FunctionCallDotNode::evaluateToInt32): (KJS::FunctionCallDotNode::evaluateToUInt32): (KJS::PostDecLocalVarNode::inlineEvaluateToNumber): (KJS::PostDecLocalVarNode::evaluateToNumber): (KJS::PostDecLocalVarNode::evaluateToBoolean): (KJS::PostDecLocalVarNode::evaluateToInt32): (KJS::PostDecLocalVarNode::evaluateToUInt32): (KJS::typeStringForValue): (KJS::UnaryPlusNode::evaluate): (KJS::UnaryPlusNode::evaluateToBoolean): (KJS::UnaryPlusNode::evaluateToNumber): (KJS::UnaryPlusNode::evaluateToInt32): (KJS::BitwiseNotNode::inlineEvaluateToInt32): (KJS::BitwiseNotNode::evaluate): (KJS::BitwiseNotNode::evaluateToNumber): (KJS::BitwiseNotNode::evaluateToBoolean): (KJS::BitwiseNotNode::evaluateToInt32): (KJS::MultNode::evaluateToBoolean): (KJS::MultNode::evaluateToInt32): (KJS::MultNode::evaluateToUInt32): (KJS::DivNode::evaluateToInt32): (KJS::DivNode::evaluateToUInt32): (KJS::ModNode::evaluateToBoolean): (KJS::ModNode::evaluateToInt32): (KJS::ModNode::evaluateToUInt32): (KJS::AddNode::evaluateToNumber): (KJS::AddNode::evaluateToInt32): (KJS::AddNode::evaluateToUInt32): (KJS::AddNumbersNode::evaluateToInt32): (KJS::AddNumbersNode::evaluateToUInt32): (KJS::SubNode::evaluateToInt32): (KJS::SubNode::evaluateToUInt32): (KJS::LeftShiftNode::inlineEvaluateToInt32): (KJS::LeftShiftNode::evaluate): (KJS::LeftShiftNode::evaluateToNumber): (KJS::LeftShiftNode::evaluateToInt32): (KJS::RightShiftNode::inlineEvaluateToInt32): (KJS::RightShiftNode::evaluate): (KJS::RightShiftNode::evaluateToNumber): (KJS::RightShiftNode::evaluateToInt32): (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32): (KJS::UnsignedRightShiftNode::evaluate): (KJS::UnsignedRightShiftNode::evaluateToNumber): (KJS::UnsignedRightShiftNode::evaluateToInt32): (KJS::LessNode::inlineEvaluateToBoolean): (KJS::LessNode::evaluate): (KJS::LessNode::evaluateToBoolean): (KJS::LessNumbersNode::inlineEvaluateToBoolean): (KJS::LessNumbersNode::evaluate): (KJS::LessNumbersNode::evaluateToBoolean): (KJS::LessStringsNode::inlineEvaluateToBoolean): (KJS::LessStringsNode::evaluate): (KJS::BitAndNode::evaluate): (KJS::BitAndNode::inlineEvaluateToInt32): (KJS::BitAndNode::evaluateToNumber): (KJS::BitAndNode::evaluateToBoolean): (KJS::BitAndNode::evaluateToInt32): (KJS::BitXOrNode::inlineEvaluateToInt32): (KJS::BitXOrNode::evaluate): (KJS::BitXOrNode::evaluateToNumber): (KJS::BitXOrNode::evaluateToBoolean): (KJS::BitXOrNode::evaluateToInt32): (KJS::BitOrNode::inlineEvaluateToInt32): (KJS::BitOrNode::evaluate): (KJS::BitOrNode::evaluateToNumber): (KJS::BitOrNode::evaluateToBoolean): (KJS::BitOrNode::evaluateToInt32): (KJS::ConditionalNode::evaluateToNumber): (KJS::ConditionalNode::evaluateToInt32): (KJS::ConditionalNode::evaluateToUInt32): (KJS::valueForReadModifyAssignment): (KJS::AssignExprNode::evaluate): (KJS::AssignExprNode::evaluateToBoolean): (KJS::AssignExprNode::evaluateToNumber): (KJS::AssignExprNode::evaluateToInt32): (KJS::VarDeclNode::handleSlowCase):
  • kjs/nodes.h: (KJS::FunctionCallResolveNode::precedence): (KJS::AddNode::precedence): (KJS::AddNode::): (KJS::LessNumbersNode::): (KJS::LessStringsNode::):
  • kjs/value.cpp: (KJS::JSValue::toInt32SlowCase): (KJS::JSValue::toUInt32SlowCase):
  • kjs/value.h: (KJS::JSValue::asCell): (KJS::JSValue::toInt32): (KJS::JSValue::toUInt32):
File:
1 edited

Legend:

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

    r27703 r27747  
    181181        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL = 0;
    182182        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     183        virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     184        virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    183185        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
    184186
     
    235237    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
    236238    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     239    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     240    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    237241    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    238242    virtual Precedence precedence() const { return PrecPrimary; }
     
    250254      ImmediateNumberNode(JSValue* v, double d) KJS_FAST_CALL : NumberNode(d), m_value(v) { ASSERT(v == JSImmediate::from(d)); }
    251255      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     256      virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     257      virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    252258     
    253259      virtual void setValue(double d) KJS_FAST_CALL { m_double = d; m_value = JSImmediate::from(d); ASSERT(m_value); }
     
    307313
    308314    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     315    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     316    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     317    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     318    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    309319    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    310320    virtual Precedence precedence() const { return PrecPrimary; }
     
    315325
    316326  protected:
     327    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    317328    Identifier ident;
    318329    size_t index; // Used by LocalVarAccessNode.
     
    331342    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
    332343    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     344    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     345    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    333346  private:
    334347    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
     
    429442    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
    430443    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     444    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     445    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    431446    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    432447    virtual Precedence precedence() const { return PrecMember; }
     
    448463    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    449464    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     465    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     466    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     467    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     468    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    450469    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    451470    virtual Precedence precedence() const { return PrecMember; }
     
    457476
    458477  private:
     478    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    459479    RefPtr<ExpressionNode> expr;
    460480    Identifier ident;
     
    500520    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    501521    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     522    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     523    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     524    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
     525    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
    502526    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    503527    virtual Precedence precedence() const { return PrecLeftHandSide; }
    504528  private:
     529    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    505530    RefPtr<ExpressionNode> expr;
    506531    RefPtr<ArgumentsNode> args;
     
    536561    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    537562    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     563    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     564    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     565    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     566    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    538567    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    539568    virtual Precedence precedence() const { return PrecCall; }
    540569
    541570  protected:
     571    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    542572    Identifier ident;
    543573    RefPtr<ArgumentsNode> args;
     
    555585
    556586    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     587    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     588    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     589    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     590    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
     591  private:
     592    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    557593  };
    558594
     
    575611    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    576612    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     613    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     614    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     615    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     616    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    577617    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    578618    virtual Precedence precedence() const { return PrecCall; }
    579   protected:
     619  private:
     620    ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    580621    RefPtr<ExpressionNode> base;
    581622    Identifier ident;
     
    654695
    655696    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     697    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     698    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     699    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     700    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    656701    virtual void optimizeForUnnecessaryResult();
     702  private:
     703    ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*);
    657704  };
    658705
     
    9811028    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    9821029    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1030    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1031    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1032    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1033    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    9831034    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    9841035    virtual Precedence precedence() const { return PrecUnary; }
     
    10041055    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10051056    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1057    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1058    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1059    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1060    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10061061    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10071062    virtual Precedence precedence() const { return PrecUnary; }
    10081063  private:
     1064    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    10091065    RefPtr<ExpressionNode> expr;
    10101066  };
     
    10281084      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10291085      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1086      virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1087      virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1088      virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10301089      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10311090      virtual Precedence precedence() const { return PrecMultiplicitave; }
     
    10421101      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10431102      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1103      virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1104      virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10441105      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10451106      virtual Precedence precedence() const { return PrecMultiplicitave; }
     
    10561117      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10571118      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1119      virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1120      virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1121      virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10581122      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10591123      virtual Precedence precedence() const { return PrecMultiplicitave; }
     
    10701134    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10711135    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1136    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1137    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10721138    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    10731139    virtual Precedence precedence() const { return PrecAdditive; }
     
    10761142    RefPtr<ExpressionNode> term1;
    10771143    RefPtr<ExpressionNode> term2;
     1144  private:
     1145    ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*);
    10781146  };
    10791147
     
    10831151        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10841152        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1153        virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1154        virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    10851155    private:
    10861156        ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    11111181      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11121182      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1183      virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1184      virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    11131185      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11141186      virtual Precedence precedence() const { return PrecAdditive; }
     
    11251197    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11261198    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1199    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1200    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1201    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    11271202    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11281203    virtual Precedence precedence() const { return PrecShift; }
    11291204  private:
     1205    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    11301206    RefPtr<ExpressionNode> term1;
    11311207    RefPtr<ExpressionNode> term2;
     
    11381214    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11391215    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1216    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1217    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1218    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    11401219    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11411220    virtual Precedence precedence() const { return PrecShift; }
    11421221  private:
     1222    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    11431223    RefPtr<ExpressionNode> term1;
    11441224    RefPtr<ExpressionNode> term2;
     
    11511231    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11521232    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1233    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1234    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1235    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    11531236    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11541237    virtual Precedence precedence() const { return PrecShift; }
    11551238  private:
     1239    ALWAYS_INLINE uint32_t inlineEvaluateToUInt32(ExecState*);
    11561240    RefPtr<ExpressionNode> term1;
    11571241    RefPtr<ExpressionNode> term2;
     
    11671251    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    11681252    virtual Precedence precedence() const { return PrecRelational; }
     1253  private:
     1254    ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*);
    11691255  protected:
    11701256    RefPtr<ExpressionNode> expr1;
     
    11751261    public:
    11761262        LessNumbersNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    1177         : LessNode(e1, e2) {}
     1263            : LessNode(e1, e2) {}
    11781264        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1265        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1266    private:
     1267        ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*);
    11791268    };
    11801269
     
    11821271    public:
    11831272        LessStringsNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    1184         : LessNode(e1, e2) {}
     1273            : LessNode(e1, e2) {}
    11851274        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1275        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1276    private:
     1277        ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*);
    11861278    };
    11871279
     
    13181410    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13191411    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1412    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1413    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1414    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1415    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    13201416    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13211417    virtual Precedence precedence() const { return PrecBitwiseAnd; }
    13221418  private:
     1419    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    13231420    RefPtr<ExpressionNode> expr1;
    13241421    RefPtr<ExpressionNode> expr2;
     
    13311428    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13321429    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1430    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1431    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1432    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1433    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    13331434    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13341435    virtual Precedence precedence() const { return PrecBitwiseOr; }
    13351436  private:
     1437    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    13361438    RefPtr<ExpressionNode> expr1;
    13371439    RefPtr<ExpressionNode> expr2;
     
    13441446    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13451447    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1448    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1449    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1450    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1451    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    13461452    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13471453    virtual Precedence precedence() const { return PrecBitwiseXor; }
    13481454  private:
     1455    ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    13491456    RefPtr<ExpressionNode> expr1;
    13501457    RefPtr<ExpressionNode> expr2;
     
    13641471    virtual Precedence precedence() const { return PrecLogicalAnd; }
    13651472  private:
     1473        ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    13661474    RefPtr<ExpressionNode> expr1;
    13671475    RefPtr<ExpressionNode> expr2;
     
    13781486    virtual Precedence precedence() const { return PrecLogicalOr; }
    13791487  private:
     1488        ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);
    13801489    RefPtr<ExpressionNode> expr1;
    13811490    RefPtr<ExpressionNode> expr2;
     
    13921501    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13931502    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1503    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1504    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1505    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    13941506    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    13951507    virtual Precedence precedence() const { return PrecConditional; }
     
    15671679    virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    15681680    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     1681    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     1682    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     1683    virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     1684    virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
    15691685    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    15701686    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
Note: See TracChangeset for help on using the changeset viewer.