| 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_AST_H_ | 5 #ifndef V8_AST_AST_H_ |
| 6 #define V8_AST_AST_H_ | 6 #define V8_AST_AST_H_ |
| 7 | 7 |
| 8 #include "src/ast/ast-types.h" | 8 #include "src/ast/ast-types.h" |
| 9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
| 10 #include "src/ast/modules.h" | 10 #include "src/ast/modules.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 class Statement; | 122 class Statement; |
| 123 class TypeFeedbackOracle; | 123 class TypeFeedbackOracle; |
| 124 | 124 |
| 125 #define DEF_FORWARD_DECLARATION(type) class type; | 125 #define DEF_FORWARD_DECLARATION(type) class type; |
| 126 AST_NODE_LIST(DEF_FORWARD_DECLARATION) | 126 AST_NODE_LIST(DEF_FORWARD_DECLARATION) |
| 127 #undef DEF_FORWARD_DECLARATION | 127 #undef DEF_FORWARD_DECLARATION |
| 128 | 128 |
| 129 | 129 |
| 130 class FeedbackVectorSlotCache { | 130 class FeedbackVectorSlotCache { |
| 131 public: | 131 public: |
| 132 explicit FeedbackVectorSlotCache(Zone* zone) | 132 typedef std::pair<TypeofMode, Variable*> Key; |
| 133 : zone_(zone), | |
| 134 hash_map_(ZoneHashMap::kDefaultHashMapCapacity, | |
| 135 ZoneAllocationPolicy(zone)) {} | |
| 136 | 133 |
| 137 void Put(Variable* variable, FeedbackVectorSlot slot) { | 134 explicit FeedbackVectorSlotCache(Zone* zone) : map_(zone) {} |
| 138 ZoneHashMap::Entry* entry = hash_map_.LookupOrInsert( | 135 |
| 139 variable, ComputePointerHash(variable), ZoneAllocationPolicy(zone_)); | 136 void Put(TypeofMode typeof_mode, Variable* variable, |
| 140 entry->value = reinterpret_cast<void*>(slot.ToInt()); | 137 FeedbackVectorSlot slot) { |
| 138 Key key = std::make_pair(typeof_mode, variable); |
| 139 auto entry = std::make_pair(key, slot); |
| 140 map_.insert(entry); |
| 141 } | 141 } |
| 142 | 142 |
| 143 ZoneHashMap::Entry* Get(Variable* variable) const { | 143 FeedbackVectorSlot Get(TypeofMode typeof_mode, Variable* variable) const { |
| 144 return hash_map_.Lookup(variable, ComputePointerHash(variable)); | 144 Key key = std::make_pair(typeof_mode, variable); |
| 145 auto iter = map_.find(key); |
| 146 if (iter != map_.end()) { |
| 147 return iter->second; |
| 148 } |
| 149 return FeedbackVectorSlot(); |
| 145 } | 150 } |
| 146 | 151 |
| 147 private: | 152 private: |
| 148 Zone* zone_; | 153 ZoneMap<Key, FeedbackVectorSlot> map_; |
| 149 ZoneHashMap hash_map_; | |
| 150 }; | 154 }; |
| 151 | 155 |
| 152 | 156 |
| 153 class AstProperties final BASE_EMBEDDED { | 157 class AstProperties final BASE_EMBEDDED { |
| 154 public: | 158 public: |
| 155 enum Flag { | 159 enum Flag { |
| 156 kNoFlags = 0, | 160 kNoFlags = 0, |
| 157 kDontSelfOptimize = 1 << 0, | 161 kDontSelfOptimize = 1 << 0, |
| 158 kMustUseIgnitionTurbo = 1 << 1 | 162 kMustUseIgnitionTurbo = 1 << 1 |
| 159 }; | 163 }; |
| (...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1688 } | 1692 } |
| 1689 | 1693 |
| 1690 // Bind this proxy to the variable var. | 1694 // Bind this proxy to the variable var. |
| 1691 void BindTo(Variable* var); | 1695 void BindTo(Variable* var); |
| 1692 | 1696 |
| 1693 bool UsesVariableFeedbackSlot() const { | 1697 bool UsesVariableFeedbackSlot() const { |
| 1694 return var()->IsUnallocated() || var()->IsLookupSlot(); | 1698 return var()->IsUnallocated() || var()->IsLookupSlot(); |
| 1695 } | 1699 } |
| 1696 | 1700 |
| 1697 void AssignFeedbackVectorSlots(FeedbackVectorSpec* spec, | 1701 void AssignFeedbackVectorSlots(FeedbackVectorSpec* spec, |
| 1698 LanguageMode language_mode, | 1702 TypeofMode typeof_mode, |
| 1699 FeedbackVectorSlotCache* cache); | 1703 FeedbackVectorSlotCache* cache); |
| 1700 | 1704 |
| 1701 FeedbackVectorSlot VariableFeedbackSlot() { return variable_feedback_slot_; } | 1705 FeedbackVectorSlot VariableFeedbackSlot() { return variable_feedback_slot_; } |
| 1702 | 1706 |
| 1703 static int num_ids() { return parent_num_ids() + 1; } | 1707 static int num_ids() { return parent_num_ids() + 1; } |
| 1704 BailoutId BeforeId() const { return BailoutId(local_id(0)); } | 1708 BailoutId BeforeId() const { return BailoutId(local_id(0)); } |
| 1705 void set_next_unresolved(VariableProxy* next) { next_unresolved_ = next; } | 1709 void set_next_unresolved(VariableProxy* next) { next_unresolved_ = next; } |
| 1706 VariableProxy* next_unresolved() { return next_unresolved_; } | 1710 VariableProxy* next_unresolved() { return next_unresolved_; } |
| 1707 | 1711 |
| 1708 private: | 1712 private: |
| (...skipping 1946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3655 : NULL; \ | 3659 : NULL; \ |
| 3656 } | 3660 } |
| 3657 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3661 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 3658 #undef DECLARE_NODE_FUNCTIONS | 3662 #undef DECLARE_NODE_FUNCTIONS |
| 3659 | 3663 |
| 3660 | 3664 |
| 3661 } // namespace internal | 3665 } // namespace internal |
| 3662 } // namespace v8 | 3666 } // namespace v8 |
| 3663 | 3667 |
| 3664 #endif // V8_AST_AST_H_ | 3668 #endif // V8_AST_AST_H_ |
| OLD | NEW |