Changeset 27501 in webkit for trunk/JavaScriptCore/kjs/nodes.h
- Timestamp:
- Nov 6, 2007, 10:03:20 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/nodes.h
r27394 r27501 143 143 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL { } 144 144 145 // Used to optimize those nodes that do extra work when returning a result, even if the result has no semantic relevance 146 virtual void optimizeForUnnecessaryResult() { } 147 145 148 protected: 146 149 Completion createErrorCompletion(ExecState *, ErrorType, const char *msg) KJS_FAST_CALL; … … 539 542 }; 540 543 541 class P ostIncResolveNode : public Node {542 public: 543 P ostIncResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {}544 545 P ostIncResolveNode(PlacementNewAdoptType) KJS_FAST_CALL544 class PrePostResolveNode : public Node { 545 public: 546 PrePostResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {} 547 548 PrePostResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 546 549 : Node(PlacementNewAdopt) 547 550 , m_ident(PlacementNewAdopt) 548 551 { 549 552 } 553 554 protected: 555 Identifier m_ident; 556 size_t m_index; // Used by LocalVarPostfixNode. 557 }; 558 559 class PostIncResolveNode : public PrePostResolveNode { 560 public: 561 PostIncResolveNode(const Identifier& i) KJS_FAST_CALL : PrePostResolveNode(i) {} 562 563 PostIncResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 564 : PrePostResolveNode(PlacementNewAdopt) 565 { 566 } 550 567 551 568 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; … … 553 570 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 554 571 virtual Precedence precedence() const { return PrecPostfix; } 555 556 protected: 557 Identifier m_ident; 558 size_t index; // Used by LocalVarPostfixNode. 572 virtual void optimizeForUnnecessaryResult(); 573 559 574 }; 560 575 … … 565 580 { 566 581 ASSERT(i != missingSymbolMarker()); 567 index = i; 568 } 569 570 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 571 }; 572 573 class PostDecResolveNode : public Node { 574 public: 575 PostDecResolveNode(const Identifier& i) KJS_FAST_CALL : m_ident(i) {} 582 m_index = i; 583 } 584 585 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 586 virtual void optimizeForUnnecessaryResult(); 587 }; 588 589 class PostDecResolveNode : public PrePostResolveNode { 590 public: 591 PostDecResolveNode(const Identifier& i) KJS_FAST_CALL : PrePostResolveNode(i) {} 576 592 577 593 PostDecResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 578 : Node(PlacementNewAdopt) 579 , m_ident(PlacementNewAdopt) 594 : PrePostResolveNode(PlacementNewAdopt) 580 595 { 581 596 } … … 585 600 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 586 601 virtual Precedence precedence() const { return PrecPostfix; } 587 588 protected: 589 Identifier m_ident; 590 size_t index; // Used by LocalVarPostfixNode. 602 virtual void optimizeForUnnecessaryResult(); 591 603 }; 592 604 … … 597 609 { 598 610 ASSERT(i != missingSymbolMarker()); 599 index = i; 600 } 601 602 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 611 m_index = i; 612 } 613 614 JSValue* evaluate(ExecState*) KJS_FAST_CALL; 615 virtual void optimizeForUnnecessaryResult(); 603 616 }; 604 617 … … 792 805 }; 793 806 794 class PreIncResolveNode : public Node {807 class PreIncResolveNode : public PrePostResolveNode { 795 808 public: 796 809 PreIncResolveNode(const Identifier &s) KJS_FAST_CALL 797 : m_ident(s)810 : PrePostResolveNode(s) 798 811 { 799 812 } 800 813 801 814 PreIncResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 802 : Node(PlacementNewAdopt) 803 , m_ident(PlacementNewAdopt) 815 : PrePostResolveNode(PlacementNewAdopt) 804 816 { 805 817 } … … 810 822 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 811 823 virtual Precedence precedence() const { return PrecUnary; } 812 813 protected:814 Identifier m_ident;815 size_t m_index; // Used by LocalVarPrefixNode.816 824 }; 817 825 … … 828 836 }; 829 837 830 class PreDecResolveNode : public Node {838 class PreDecResolveNode : public PrePostResolveNode { 831 839 public: 832 840 PreDecResolveNode(const Identifier &s) KJS_FAST_CALL 833 : m_ident(s)841 : PrePostResolveNode(s) 834 842 { 835 843 } 836 844 837 845 PreDecResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 838 : Node(PlacementNewAdopt) 839 , m_ident(PlacementNewAdopt) 846 : PrePostResolveNode(PlacementNewAdopt) 840 847 { 841 848 } … … 846 853 virtual void streamTo(SourceStream&) const KJS_FAST_CALL; 847 854 virtual Precedence precedence() const { return PrecUnary; } 848 849 protected:850 Identifier m_ident;851 size_t m_index; // Used by LocalVarPrefixNode.852 855 }; 853 856 … … 1562 1565 public: 1563 1566 ForNode(Node* e1, Node* e2, Node* e3, StatementNode* s) KJS_FAST_CALL : 1564 expr1(e1), expr2(e2), expr3(e3), statement(s) { m_mayHaveDeclarations = true; } 1567 expr1(e1), expr2(e2), expr3(e3), statement(s) 1568 { 1569 m_mayHaveDeclarations = true; 1570 if (expr3) 1571 expr3->optimizeForUnnecessaryResult(); 1572 } 1573 1565 1574 virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL; 1566 1575 virtual Completion execute(ExecState*) KJS_FAST_CALL;
Note:
See TracChangeset
for help on using the changeset viewer.