Changeset 27632 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Nov 8, 2007, 9:48:49 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r27623 r27632 1 // -*- c-basic-offset: 2 -*-2 1 /* 3 2 * Copyright (C) 1999-2000 Harri Porten ([email protected]) … … 112 111 }; 113 112 114 class Node {113 class Node : Noncopyable { 115 114 public: 116 115 Node() KJS_FAST_CALL; … … 136 135 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL { } 137 136 138 // Used to optimize those nodes that do extra work when returning a result, even if the result has no semantic relevance139 virtual void optimizeForUnnecessaryResult() { }140 141 137 protected: 142 138 Completion createErrorCompletion(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL; … … 160 156 int m_line : 31; 161 157 bool m_mayHaveDeclarations : 1; 162 private:163 // disallow assignment164 Node& operator=(const Node&) KJS_FAST_CALL;165 Node(const Node &other) KJS_FAST_CALL;166 158 }; 167 159 … … 187 179 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL = 0; 188 180 virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL; 189 }; 181 182 // Used to optimize those nodes that do extra work when returning a result, even if the result has no semantic relevance 183 virtual void optimizeForUnnecessaryResult() { } 184 }; 190 185 191 186 class StatementNode : public Node { … … 240 235 class ImmediateNumberNode : public NumberNode { 241 236 public: 242 ImmediateNumberNode(JSValue* v, double d) KJS_FAST_CALL : NumberNode(d), m_value(v) { ASSERT(v == JSImmediate::from Double(d)); }237 ImmediateNumberNode(JSValue* v, double d) KJS_FAST_CALL : NumberNode(d), m_value(v) { ASSERT(v == JSImmediate::from(d)); } 243 238 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 244 239 245 virtual void setValue(double d) KJS_FAST_CALL { m_double = d; m_value = JSImmediate::from Double(d); ASSERT(m_value); }240 virtual void setValue(double d) KJS_FAST_CALL { m_double = d; m_value = JSImmediate::from(d); ASSERT(m_value); } 246 241 private: 247 242 JSValue* m_value; … … 322 317 }; 323 318 324 class ElementNode : public ExpressionNode {319 class ElementNode : public Node { 325 320 public: 326 321 ElementNode(int e, ExpressionNode* n) KJS_FAST_CALL : elision(e), node(n) { } 327 322 ElementNode(ElementNode* l, int e, ExpressionNode* n) KJS_FAST_CALL 328 323 : elision(e), node(n) { l->next = this; } 329 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 330 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 331 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 324 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 325 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 326 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 327 332 328 PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return next.release(); } 333 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 329 330 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 331 334 332 private: 335 333 friend class ArrayNode; … … 356 354 }; 357 355 358 class PropertyNode : public ExpressionNode {356 class PropertyNode : public Node { 359 357 public: 360 358 enum Type { Constant, Getter, Setter }; … … 362 360 : m_name(n), assign(a), type(t) { } 363 361 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 364 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 365 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 362 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 363 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 364 365 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 366 const Identifier& name() const { return m_name; } 367 368 private: 366 369 friend class PropertyListNode; 367 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }368 const Identifier& name() const { return m_name; }369 private:370 370 Identifier m_name; 371 371 RefPtr<ExpressionNode> assign; … … 373 373 }; 374 374 375 class PropertyListNode : public ExpressionNode {375 class PropertyListNode : public Node { 376 376 public: 377 377 PropertyListNode(PropertyNode* n) KJS_FAST_CALL … … 380 380 : node(n) { l->next = this; } 381 381 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 382 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 383 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 382 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 383 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 384 385 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 384 386 PassRefPtr<PropertyListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 385 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 387 386 388 private: 387 389 friend class ObjectLiteralNode; … … 440 442 }; 441 443 442 class ArgumentListNode : public ExpressionNode {444 class ArgumentListNode : public Node { 443 445 public: 444 446 ArgumentListNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) { } … … 446 448 : expr(e) { l->next = this; } 447 449 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 448 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 450 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 451 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 452 449 453 void evaluateList(ExecState*, List&) KJS_FAST_CALL; 450 virtual void streamTo(SourceStream&) const KJS_FAST_CALL;451 454 PassRefPtr<ArgumentListNode> releaseNext() KJS_FAST_CALL { return next.release(); } 452 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 455 453 456 private: 454 457 friend class ArgumentsNode; … … 457 460 }; 458 461 459 class ArgumentsNode : public ExpressionNode {462 class ArgumentsNode : public Node { 460 463 public: 461 464 ArgumentsNode() KJS_FAST_CALL { } … … 463 466 : listNode(l) { } 464 467 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 465 virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL; 468 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 469 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 470 466 471 void evaluateList(ExecState* exec, List& list) KJS_FAST_CALL { if (listNode) listNode->evaluateList(exec, list); } 467 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 468 virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; } 472 469 473 private: 470 474 RefPtr<ArgumentListNode> listNode; … … 560 564 }; 561 565 562 566 class PrePostResolveNode : public ExpressionNode { 563 567 public: 564 568 PrePostResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {} … … 634 638 }; 635 639 636 640 class PostfixBracketNode : public ExpressionNode { 637 641 public: 638 642 PostfixBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : m_base(b), m_subscript(s) {}
Note:
See TracChangeset
for help on using the changeset viewer.