| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_AST_H_ | 5 #ifndef V8_AST_H_ |
| 6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 V(Property) \ | 80 V(Property) \ |
| 81 V(Call) \ | 81 V(Call) \ |
| 82 V(CallNew) \ | 82 V(CallNew) \ |
| 83 V(CallRuntime) \ | 83 V(CallRuntime) \ |
| 84 V(UnaryOperation) \ | 84 V(UnaryOperation) \ |
| 85 V(CountOperation) \ | 85 V(CountOperation) \ |
| 86 V(BinaryOperation) \ | 86 V(BinaryOperation) \ |
| 87 V(CompareOperation) \ | 87 V(CompareOperation) \ |
| 88 V(Spread) \ | 88 V(Spread) \ |
| 89 V(ThisFunction) \ | 89 V(ThisFunction) \ |
| 90 V(SuperReference) \ | 90 V(SuperPropertyReference) \ |
| 91 V(SuperCallReference) \ |
| 91 V(CaseClause) | 92 V(CaseClause) |
| 92 | 93 |
| 93 #define AST_NODE_LIST(V) \ | 94 #define AST_NODE_LIST(V) \ |
| 94 DECLARATION_NODE_LIST(V) \ | 95 DECLARATION_NODE_LIST(V) \ |
| 95 STATEMENT_NODE_LIST(V) \ | 96 STATEMENT_NODE_LIST(V) \ |
| 96 EXPRESSION_NODE_LIST(V) | 97 EXPRESSION_NODE_LIST(V) |
| 97 | 98 |
| 98 // Forward declarations | 99 // Forward declarations |
| 99 class AstNodeFactory; | 100 class AstNodeFactory; |
| 100 class AstVisitor; | 101 class AstVisitor; |
| (...skipping 1652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1753 bit_field_ = KeyTypeField::update(bit_field_, key_type); | 1754 bit_field_ = KeyTypeField::update(bit_field_, key_type); |
| 1754 } | 1755 } |
| 1755 void set_inline_cache_state(InlineCacheState state) { | 1756 void set_inline_cache_state(InlineCacheState state) { |
| 1756 bit_field_ = InlineCacheStateField::update(bit_field_, state); | 1757 bit_field_ = InlineCacheStateField::update(bit_field_, state); |
| 1757 } | 1758 } |
| 1758 void mark_for_call() { | 1759 void mark_for_call() { |
| 1759 bit_field_ = IsForCallField::update(bit_field_, true); | 1760 bit_field_ = IsForCallField::update(bit_field_, true); |
| 1760 } | 1761 } |
| 1761 bool is_for_call() const { return IsForCallField::decode(bit_field_); } | 1762 bool is_for_call() const { return IsForCallField::decode(bit_field_); } |
| 1762 | 1763 |
| 1763 bool IsSuperAccess() { | 1764 bool IsSuperAccess() { return obj()->IsSuperPropertyReference(); } |
| 1764 return obj()->IsSuperReference(); | |
| 1765 } | |
| 1766 | 1765 |
| 1767 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 1766 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
| 1768 Isolate* isolate, const ICSlotCache* cache) override { | 1767 Isolate* isolate, const ICSlotCache* cache) override { |
| 1769 return FeedbackVectorRequirements(0, 1); | 1768 return FeedbackVectorRequirements(0, 1); |
| 1770 } | 1769 } |
| 1771 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 1770 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
| 1772 ICSlotCache* cache) override { | 1771 ICSlotCache* cache) override { |
| 1773 property_feedback_slot_ = slot; | 1772 property_feedback_slot_ = slot; |
| 1774 } | 1773 } |
| 1775 Code::Kind FeedbackICSlotKind(int index) override { | 1774 Code::Kind FeedbackICSlotKind(int index) override { |
| (...skipping 1008 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2784 | 2783 |
| 2785 class ThisFunction final : public Expression { | 2784 class ThisFunction final : public Expression { |
| 2786 public: | 2785 public: |
| 2787 DECLARE_NODE_TYPE(ThisFunction) | 2786 DECLARE_NODE_TYPE(ThisFunction) |
| 2788 | 2787 |
| 2789 protected: | 2788 protected: |
| 2790 ThisFunction(Zone* zone, int pos) : Expression(zone, pos) {} | 2789 ThisFunction(Zone* zone, int pos) : Expression(zone, pos) {} |
| 2791 }; | 2790 }; |
| 2792 | 2791 |
| 2793 | 2792 |
| 2794 class SuperReference final : public Expression { | 2793 class SuperPropertyReference final : public Expression { |
| 2795 public: | 2794 public: |
| 2796 DECLARE_NODE_TYPE(SuperReference) | 2795 DECLARE_NODE_TYPE(SuperPropertyReference) |
| 2797 | 2796 |
| 2798 VariableProxy* this_var() const { return this_var_; } | 2797 VariableProxy* this_var() const { return this_var_; } |
| 2799 VariableProxy* home_object_var() const { return home_object_var_; } | 2798 VariableProxy* home_object_var() const { return home_object_var_; } |
| 2800 | 2799 |
| 2801 protected: | 2800 protected: |
| 2802 SuperReference(Zone* zone, VariableProxy* this_var, | 2801 SuperPropertyReference(Zone* zone, VariableProxy* this_var, |
| 2803 VariableProxy* home_object_var, int pos) | 2802 VariableProxy* home_object_var, int pos) |
| 2804 : Expression(zone, pos), | 2803 : Expression(zone, pos), |
| 2805 this_var_(this_var), | 2804 this_var_(this_var), |
| 2806 home_object_var_(home_object_var) { | 2805 home_object_var_(home_object_var) { |
| 2807 DCHECK(this_var->is_this()); | 2806 DCHECK(this_var->is_this()); |
| 2808 DCHECK(home_object_var->raw_name()->IsOneByteEqualTo(".home_object")); | 2807 DCHECK(home_object_var->raw_name()->IsOneByteEqualTo(".home_object")); |
| 2809 } | 2808 } |
| 2810 | 2809 |
| 2811 private: | 2810 private: |
| 2812 VariableProxy* this_var_; | 2811 VariableProxy* this_var_; |
| 2813 VariableProxy* home_object_var_; | 2812 VariableProxy* home_object_var_; |
| 2814 }; | 2813 }; |
| 2815 | 2814 |
| 2816 | 2815 |
| 2816 class SuperCallReference final : public Expression { |
| 2817 public: |
| 2818 DECLARE_NODE_TYPE(SuperCallReference) |
| 2819 |
| 2820 VariableProxy* this_var() const { return this_var_; } |
| 2821 VariableProxy* new_target_var() const { return new_target_var_; } |
| 2822 VariableProxy* this_function_var() const { return this_function_var_; } |
| 2823 |
| 2824 protected: |
| 2825 SuperCallReference(Zone* zone, VariableProxy* this_var, |
| 2826 VariableProxy* new_target_var, |
| 2827 VariableProxy* this_function_var, int pos) |
| 2828 : Expression(zone, pos), |
| 2829 this_var_(this_var), |
| 2830 new_target_var_(new_target_var), |
| 2831 this_function_var_(this_function_var) { |
| 2832 DCHECK(this_var->is_this()); |
| 2833 DCHECK(new_target_var->raw_name()->IsOneByteEqualTo("new.target")); |
| 2834 DCHECK(this_function_var->raw_name()->IsOneByteEqualTo(".this_function")); |
| 2835 } |
| 2836 |
| 2837 private: |
| 2838 VariableProxy* this_var_; |
| 2839 VariableProxy* new_target_var_; |
| 2840 VariableProxy* this_function_var_; |
| 2841 }; |
| 2842 |
| 2843 |
| 2817 #undef DECLARE_NODE_TYPE | 2844 #undef DECLARE_NODE_TYPE |
| 2818 | 2845 |
| 2819 | 2846 |
| 2820 // ---------------------------------------------------------------------------- | 2847 // ---------------------------------------------------------------------------- |
| 2821 // Regular expressions | 2848 // Regular expressions |
| 2822 | 2849 |
| 2823 | 2850 |
| 2824 class RegExpVisitor BASE_EMBEDDED { | 2851 class RegExpVisitor BASE_EMBEDDED { |
| 2825 public: | 2852 public: |
| 2826 virtual ~RegExpVisitor() { } | 2853 virtual ~RegExpVisitor() { } |
| (...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3574 NativeFunctionLiteral* NewNativeFunctionLiteral(const AstRawString* name, | 3601 NativeFunctionLiteral* NewNativeFunctionLiteral(const AstRawString* name, |
| 3575 v8::Extension* extension, | 3602 v8::Extension* extension, |
| 3576 int pos) { | 3603 int pos) { |
| 3577 return new (zone_) NativeFunctionLiteral(zone_, name, extension, pos); | 3604 return new (zone_) NativeFunctionLiteral(zone_, name, extension, pos); |
| 3578 } | 3605 } |
| 3579 | 3606 |
| 3580 ThisFunction* NewThisFunction(int pos) { | 3607 ThisFunction* NewThisFunction(int pos) { |
| 3581 return new (zone_) ThisFunction(zone_, pos); | 3608 return new (zone_) ThisFunction(zone_, pos); |
| 3582 } | 3609 } |
| 3583 | 3610 |
| 3584 SuperReference* NewSuperReference(VariableProxy* this_var, | 3611 SuperPropertyReference* NewSuperPropertyReference( |
| 3585 VariableProxy* home_object_var, int pos) { | 3612 VariableProxy* this_var, VariableProxy* home_object_var, int pos) { |
| 3586 return new (zone_) SuperReference(zone_, this_var, home_object_var, pos); | 3613 return new (zone_) |
| 3614 SuperPropertyReference(zone_, this_var, home_object_var, pos); |
| 3615 } |
| 3616 |
| 3617 SuperCallReference* NewSuperCallReference(VariableProxy* this_var, |
| 3618 VariableProxy* new_target_var, |
| 3619 VariableProxy* this_function_var, |
| 3620 int pos) { |
| 3621 return new (zone_) SuperCallReference(zone_, this_var, new_target_var, |
| 3622 this_function_var, pos); |
| 3587 } | 3623 } |
| 3588 | 3624 |
| 3589 private: | 3625 private: |
| 3590 Zone* zone_; | 3626 Zone* zone_; |
| 3591 AstValueFactory* ast_value_factory_; | 3627 AstValueFactory* ast_value_factory_; |
| 3592 }; | 3628 }; |
| 3593 | 3629 |
| 3594 | 3630 |
| 3595 } } // namespace v8::internal | 3631 } } // namespace v8::internal |
| 3596 | 3632 |
| 3597 #endif // V8_AST_H_ | 3633 #endif // V8_AST_H_ |
| OLD | NEW |