Changeset 27589 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Nov 7, 2007, 11:58:15 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r27501 r27589 6 6 * Copyright (C) 2007 Cameron Zwarich ([email protected]) 7 7 * Copyright (C) 2007 Maks Orlovich 8 * Copyright (C) 2007 Eric Seidel <[email protected]> 8 9 * 9 10 * This library is free software; you can redistribute it and/or … … 117 118 virtual ~Node(); 118 119 119 virtual JSValue *evaluate(ExecState *exec) KJS_FAST_CALL = 0; 120 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL = 0; 121 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 120 122 UString toString() const KJS_FAST_CALL; 121 123 int lineNo() const KJS_FAST_CALL { return m_line; } … … 126 128 127 129 virtual bool isNumber() const KJS_FAST_CALL { return false; } 128 virtual bool isImmediateValue() const KJS_FAST_CALL { return false; }129 130 virtual bool isLocation() const KJS_FAST_CALL { return false; } 130 131 virtual bool isResolveNode() const KJS_FAST_CALL { return false; } … … 210 211 class NumberNode : public Node { 211 212 public: 212 NumberNode(double v) KJS_FAST_CALL : val(v) {} 213 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 213 NumberNode(double v) KJS_FAST_CALL : m_double(v) {} 214 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 215 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 214 216 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 215 217 virtual Precedence precedence() const { return PrecPrimary; } 216 218 217 219 virtual bool isNumber() const KJS_FAST_CALL { return true; } 218 double value() const KJS_FAST_CALL { return val; }219 v oid setValue(double v) KJS_FAST_CALL { val = v; }220 pr ivate:221 double val;220 double value() const KJS_FAST_CALL { return m_double; } 221 virtual void setValue(double d) KJS_FAST_CALL { m_double = d; } 222 protected: 223 double m_double; 222 224 }; 223 225 224 class ImmediateNumberNode : public Node { 225 public: 226 ImmediateNumberNode(JSValue* v) KJS_FAST_CALL : m_value(v) {} 227 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 228 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 229 virtual Precedence precedence() const { return PrecPrimary; } 226 class ImmediateNumberNode : public NumberNode { 227 public: 228 ImmediateNumberNode(JSValue* v, double d) KJS_FAST_CALL : NumberNode(d), m_value(v) { ASSERT(v == JSImmediate::fromDouble(d)); } 229 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 230 230 231 virtual bool isImmediateValue() const KJS_FAST_CALL { return true; } 232 double value() const KJS_FAST_CALL { return JSImmediate::toDouble(m_value); } 233 void setValue(double v) KJS_FAST_CALL { m_value = JSImmediate::fromDouble(v); ASSERT(m_value); } 231 virtual void setValue(double d) KJS_FAST_CALL { m_double = d; m_value = JSImmediate::fromDouble(d); ASSERT(m_value); } 234 232 private: 235 233 JSValue* m_value; … … 239 237 public: 240 238 StringNode(const UString *v) KJS_FAST_CALL { value = *v; } 241 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 239 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 240 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 242 241 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 243 242 virtual Precedence precedence() const { return PrecPrimary; } … … 304 303 } 305 304 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 305 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 306 private: 307 ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*); 306 308 }; 307 309 … … 390 392 BracketAccessorNode(Node *e1, Node *e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {} 391 393 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 392 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 394 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 395 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 393 396 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 394 397 virtual Precedence precedence() const { return PrecMember; } … … 400 403 401 404 private: 405 ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*); 402 406 RefPtr<Node> expr1; 403 407 RefPtr<Node> expr2; … … 950 954 NegateNode(Node *e) KJS_FAST_CALL : expr(e) {} 951 955 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 952 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 956 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 957 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 953 958 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 954 959 virtual Precedence precedence() const { return PrecUnary; } … … 983 988 MultNode(Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 984 989 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 985 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 990 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 991 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 986 992 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 987 993 virtual Precedence precedence() const { return PrecMultiplicitave; } 988 994 private: 995 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 989 996 RefPtr<Node> term1; 990 997 RefPtr<Node> term2; … … 995 1002 DivNode(Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 996 1003 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 997 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1004 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1005 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 998 1006 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 999 1007 virtual Precedence precedence() const { return PrecMultiplicitave; } 1000 1008 private: 1009 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1001 1010 RefPtr<Node> term1; 1002 1011 RefPtr<Node> term2; … … 1007 1016 ModNode(Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1008 1017 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1009 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1018 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1019 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 1010 1020 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1011 1021 virtual Precedence precedence() const { return PrecMultiplicitave; } 1012 1022 private: 1023 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1013 1024 RefPtr<Node> term1; 1014 1025 RefPtr<Node> term2; … … 1019 1030 AddNode(Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1020 1031 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1021 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1022 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1023 virtual Precedence precedence() const { return PrecAdditive; } 1032 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1033 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 1034 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1035 virtual Precedence precedence() const { return PrecAdditive; } 1024 1036 private: 1025 1037 RefPtr<Node> term1; … … 1031 1043 SubNode(Node *t1, Node *t2) KJS_FAST_CALL : term1(t1), term2(t2) {} 1032 1044 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1033 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1045 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 1046 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 1034 1047 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 1035 1048 virtual Precedence precedence() const { return PrecAdditive; } 1036 1049 private: 1050 ALWAYS_INLINE double inlineEvaluateToNumber(ExecState*); 1037 1051 RefPtr<Node> term1; 1038 1052 RefPtr<Node> term2;
Note:
See TracChangeset
for help on using the changeset viewer.