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 1645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 | 1656 |
1657 class Property final : public Expression { | 1657 class Property final : public Expression { |
1658 public: | 1658 public: |
1659 DECLARE_NODE_TYPE(Property) | 1659 DECLARE_NODE_TYPE(Property) |
1660 | 1660 |
1661 bool IsValidReferenceExpression() const override { return true; } | 1661 bool IsValidReferenceExpression() const override { return true; } |
1662 | 1662 |
1663 Expression* obj() const { return obj_; } | 1663 Expression* obj() const { return obj_; } |
1664 Expression* key() const { return key_; } | 1664 Expression* key() const { return key_; } |
1665 | 1665 |
1666 static int num_ids() { return parent_num_ids() + 2; } | 1666 static int num_ids() { return parent_num_ids() + 1; } |
1667 BailoutId LoadId() const { return BailoutId(local_id(0)); } | 1667 BailoutId LoadId() const { return BailoutId(local_id(0)); } |
1668 TypeFeedbackId PropertyFeedbackId() { return TypeFeedbackId(local_id(1)); } | |
1669 | 1668 |
1670 bool IsStringAccess() const { | 1669 bool IsStringAccess() const { |
1671 return IsStringAccessField::decode(bit_field_); | 1670 return IsStringAccessField::decode(bit_field_); |
1672 } | 1671 } |
1673 | 1672 |
1674 // Type feedback information. | 1673 // Type feedback information. |
1675 bool IsMonomorphic() override { return receiver_types_.length() == 1; } | 1674 bool IsMonomorphic() override { return receiver_types_.length() == 1; } |
1676 SmallMapList* GetReceiverTypes() override { return &receiver_types_; } | 1675 SmallMapList* GetReceiverTypes() override { return &receiver_types_; } |
1677 KeyedAccessStoreMode GetStoreMode() const override { return STANDARD_STORE; } | 1676 KeyedAccessStoreMode GetStoreMode() const override { return STANDARD_STORE; } |
1678 IcCheckType GetKeyType() const override { | 1677 IcCheckType GetKeyType() const override { |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1965 callruntime_feedback_slot_ = slot; | 1964 callruntime_feedback_slot_ = slot; |
1966 } | 1965 } |
1967 Code::Kind FeedbackICSlotKind(int index) override { return Code::LOAD_IC; } | 1966 Code::Kind FeedbackICSlotKind(int index) override { return Code::LOAD_IC; } |
1968 | 1967 |
1969 FeedbackVectorICSlot CallRuntimeFeedbackSlot() { | 1968 FeedbackVectorICSlot CallRuntimeFeedbackSlot() { |
1970 DCHECK(!HasCallRuntimeFeedbackSlot() || | 1969 DCHECK(!HasCallRuntimeFeedbackSlot() || |
1971 !callruntime_feedback_slot_.IsInvalid()); | 1970 !callruntime_feedback_slot_.IsInvalid()); |
1972 return callruntime_feedback_slot_; | 1971 return callruntime_feedback_slot_; |
1973 } | 1972 } |
1974 | 1973 |
1975 static int num_ids() { return parent_num_ids() + 1; } | 1974 static int num_ids() { return parent_num_ids(); } |
1976 TypeFeedbackId CallRuntimeFeedbackId() const { | |
1977 return TypeFeedbackId(local_id(0)); | |
1978 } | |
1979 | 1975 |
1980 protected: | 1976 protected: |
1981 CallRuntime(Zone* zone, const AstRawString* name, | 1977 CallRuntime(Zone* zone, const AstRawString* name, |
1982 const Runtime::Function* function, | 1978 const Runtime::Function* function, |
1983 ZoneList<Expression*>* arguments, int pos) | 1979 ZoneList<Expression*>* arguments, int pos) |
1984 : Expression(zone, pos), | 1980 : Expression(zone, pos), |
1985 raw_name_(name), | 1981 raw_name_(name), |
1986 function_(function), | 1982 function_(function), |
1987 arguments_(arguments), | 1983 arguments_(arguments), |
1988 callruntime_feedback_slot_(FeedbackVectorICSlot::Invalid()) {} | 1984 callruntime_feedback_slot_(FeedbackVectorICSlot::Invalid()) {} |
1989 static int parent_num_ids() { return Expression::num_ids(); } | 1985 static int parent_num_ids() { return Expression::num_ids(); } |
1990 | 1986 |
1991 private: | 1987 private: |
1992 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | |
1993 | |
1994 const AstRawString* raw_name_; | 1988 const AstRawString* raw_name_; |
1995 const Runtime::Function* function_; | 1989 const Runtime::Function* function_; |
1996 ZoneList<Expression*>* arguments_; | 1990 ZoneList<Expression*>* arguments_; |
1997 FeedbackVectorICSlot callruntime_feedback_slot_; | 1991 FeedbackVectorICSlot callruntime_feedback_slot_; |
1998 }; | 1992 }; |
1999 | 1993 |
2000 | 1994 |
2001 class UnaryOperation final : public Expression { | 1995 class UnaryOperation final : public Expression { |
2002 public: | 1996 public: |
2003 DECLARE_NODE_TYPE(UnaryOperation) | 1997 DECLARE_NODE_TYPE(UnaryOperation) |
(...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2690 ThisFunction(Zone* zone, int pos) : Expression(zone, pos) {} | 2684 ThisFunction(Zone* zone, int pos) : Expression(zone, pos) {} |
2691 }; | 2685 }; |
2692 | 2686 |
2693 | 2687 |
2694 class SuperReference final : public Expression { | 2688 class SuperReference final : public Expression { |
2695 public: | 2689 public: |
2696 DECLARE_NODE_TYPE(SuperReference) | 2690 DECLARE_NODE_TYPE(SuperReference) |
2697 | 2691 |
2698 VariableProxy* this_var() const { return this_var_; } | 2692 VariableProxy* this_var() const { return this_var_; } |
2699 | 2693 |
2700 static int num_ids() { return parent_num_ids() + 1; } | 2694 static int num_ids() { return parent_num_ids(); } |
2701 TypeFeedbackId HomeObjectFeedbackId() { return TypeFeedbackId(local_id(0)); } | |
2702 | 2695 |
2703 // Type feedback information. | 2696 // Type feedback information. |
2704 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( | 2697 virtual FeedbackVectorRequirements ComputeFeedbackRequirements( |
2705 Isolate* isolate, const ICSlotCache* cache) override { | 2698 Isolate* isolate, const ICSlotCache* cache) override { |
2706 return FeedbackVectorRequirements(0, 1); | 2699 return FeedbackVectorRequirements(0, 1); |
2707 } | 2700 } |
2708 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, | 2701 void SetFirstFeedbackICSlot(FeedbackVectorICSlot slot, |
2709 ICSlotCache* cache) override { | 2702 ICSlotCache* cache) override { |
2710 homeobject_feedback_slot_ = slot; | 2703 homeobject_feedback_slot_ = slot; |
2711 } | 2704 } |
2712 Code::Kind FeedbackICSlotKind(int index) override { return Code::LOAD_IC; } | 2705 Code::Kind FeedbackICSlotKind(int index) override { return Code::LOAD_IC; } |
2713 | 2706 |
2714 FeedbackVectorICSlot HomeObjectFeedbackSlot() { | 2707 FeedbackVectorICSlot HomeObjectFeedbackSlot() { |
2715 DCHECK(!homeobject_feedback_slot_.IsInvalid()); | 2708 DCHECK(!homeobject_feedback_slot_.IsInvalid()); |
2716 return homeobject_feedback_slot_; | 2709 return homeobject_feedback_slot_; |
2717 } | 2710 } |
2718 | 2711 |
2719 protected: | 2712 protected: |
2720 SuperReference(Zone* zone, VariableProxy* this_var, int pos) | 2713 SuperReference(Zone* zone, VariableProxy* this_var, int pos) |
2721 : Expression(zone, pos), | 2714 : Expression(zone, pos), |
2722 this_var_(this_var), | 2715 this_var_(this_var), |
2723 homeobject_feedback_slot_(FeedbackVectorICSlot::Invalid()) { | 2716 homeobject_feedback_slot_(FeedbackVectorICSlot::Invalid()) { |
2724 DCHECK(this_var->is_this()); | 2717 DCHECK(this_var->is_this()); |
2725 } | 2718 } |
2726 static int parent_num_ids() { return Expression::num_ids(); } | 2719 static int parent_num_ids() { return Expression::num_ids(); } |
2727 | 2720 |
2728 private: | 2721 private: |
2729 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | |
2730 | |
2731 VariableProxy* this_var_; | 2722 VariableProxy* this_var_; |
2732 FeedbackVectorICSlot homeobject_feedback_slot_; | 2723 FeedbackVectorICSlot homeobject_feedback_slot_; |
2733 }; | 2724 }; |
2734 | 2725 |
2735 | 2726 |
2736 #undef DECLARE_NODE_TYPE | 2727 #undef DECLARE_NODE_TYPE |
2737 | 2728 |
2738 | 2729 |
2739 // ---------------------------------------------------------------------------- | 2730 // ---------------------------------------------------------------------------- |
2740 // Regular expressions | 2731 // Regular expressions |
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3506 | 3497 |
3507 private: | 3498 private: |
3508 Zone* zone_; | 3499 Zone* zone_; |
3509 AstValueFactory* ast_value_factory_; | 3500 AstValueFactory* ast_value_factory_; |
3510 }; | 3501 }; |
3511 | 3502 |
3512 | 3503 |
3513 } } // namespace v8::internal | 3504 } } // namespace v8::internal |
3514 | 3505 |
3515 #endif // V8_AST_H_ | 3506 #endif // V8_AST_H_ |
OLD | NEW |