| Index: src/ast/ast.h
|
| diff --git a/src/ast/ast.h b/src/ast/ast.h
|
| index 5ce553186c67a5ccec72729d6d553b2254602932..74f054612db44d4bfe5e6cb5386549c8446c7d4c 100644
|
| --- a/src/ast/ast.h
|
| +++ b/src/ast/ast.h
|
| @@ -129,24 +129,28 @@ AST_NODE_LIST(DEF_FORWARD_DECLARATION)
|
|
|
| class FeedbackVectorSlotCache {
|
| public:
|
| - explicit FeedbackVectorSlotCache(Zone* zone)
|
| - : zone_(zone),
|
| - hash_map_(ZoneHashMap::kDefaultHashMapCapacity,
|
| - ZoneAllocationPolicy(zone)) {}
|
| + typedef std::pair<TypeofMode, Variable*> Key;
|
|
|
| - void Put(Variable* variable, FeedbackVectorSlot slot) {
|
| - ZoneHashMap::Entry* entry = hash_map_.LookupOrInsert(
|
| - variable, ComputePointerHash(variable), ZoneAllocationPolicy(zone_));
|
| - entry->value = reinterpret_cast<void*>(slot.ToInt());
|
| + explicit FeedbackVectorSlotCache(Zone* zone) : map_(zone) {}
|
| +
|
| + void Put(TypeofMode typeof_mode, Variable* variable,
|
| + FeedbackVectorSlot slot) {
|
| + Key key = std::make_pair(typeof_mode, variable);
|
| + auto entry = std::make_pair(key, slot);
|
| + map_.insert(entry);
|
| }
|
|
|
| - ZoneHashMap::Entry* Get(Variable* variable) const {
|
| - return hash_map_.Lookup(variable, ComputePointerHash(variable));
|
| + FeedbackVectorSlot Get(TypeofMode typeof_mode, Variable* variable) const {
|
| + Key key = std::make_pair(typeof_mode, variable);
|
| + auto iter = map_.find(key);
|
| + if (iter != map_.end()) {
|
| + return iter->second;
|
| + }
|
| + return FeedbackVectorSlot();
|
| }
|
|
|
| private:
|
| - Zone* zone_;
|
| - ZoneHashMap hash_map_;
|
| + ZoneMap<Key, FeedbackVectorSlot> map_;
|
| };
|
|
|
|
|
| @@ -1695,7 +1699,7 @@ class VariableProxy final : public Expression {
|
| }
|
|
|
| void AssignFeedbackVectorSlots(FeedbackVectorSpec* spec,
|
| - LanguageMode language_mode,
|
| + TypeofMode typeof_mode,
|
| FeedbackVectorSlotCache* cache);
|
|
|
| FeedbackVectorSlot VariableFeedbackSlot() { return variable_feedback_slot_; }
|
|
|