Index: src/compiler/js-operator.cc |
diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc |
index 1966724a86a1ab2df7a5cfe5579e79ee51e70e3b..a0f3d3972ed3dd8a165b5056325598ee6537942a 100644 |
--- a/src/compiler/js-operator.cc |
+++ b/src/compiler/js-operator.cc |
@@ -256,9 +256,66 @@ const LoadNamedParameters& LoadNamedParametersOf(const Operator* op) { |
} |
-const LoadNamedParameters& LoadGlobalParametersOf(const Operator* op) { |
+bool operator==(LoadGlobalParameters const& lhs, |
+ LoadGlobalParameters const& rhs) { |
+ return lhs.name() == rhs.name() && lhs.feedback() == rhs.feedback() && |
+ lhs.contextual_mode() == rhs.contextual_mode() && |
+ lhs.slot_index() == rhs.slot_index(); |
+} |
+ |
+ |
+bool operator!=(LoadGlobalParameters const& lhs, |
+ LoadGlobalParameters const& rhs) { |
+ return !(lhs == rhs); |
+} |
+ |
+ |
+size_t hash_value(LoadGlobalParameters const& p) { |
+ return base::hash_combine(p.name(), p.contextual_mode(), p.slot_index()); |
+} |
+ |
+ |
+std::ostream& operator<<(std::ostream& os, LoadGlobalParameters const& p) { |
+ return os << Brief(*p.name().handle()) << ", " << p.contextual_mode() |
+ << ", slot: " << p.slot_index(); |
+} |
+ |
+ |
+const LoadGlobalParameters& LoadGlobalParametersOf(const Operator* op) { |
DCHECK_EQ(IrOpcode::kJSLoadGlobal, op->opcode()); |
- return OpParameter<LoadNamedParameters>(op); |
+ return OpParameter<LoadGlobalParameters>(op); |
+} |
+ |
+ |
+bool operator==(StoreGlobalParameters const& lhs, |
+ StoreGlobalParameters const& rhs) { |
+ return lhs.language_mode() == rhs.language_mode() && |
+ lhs.name() == rhs.name() && lhs.feedback() == rhs.feedback() && |
+ lhs.slot_index() == rhs.slot_index(); |
+} |
+ |
+ |
+bool operator!=(StoreGlobalParameters const& lhs, |
+ StoreGlobalParameters const& rhs) { |
+ return !(lhs == rhs); |
+} |
+ |
+ |
+size_t hash_value(StoreGlobalParameters const& p) { |
+ return base::hash_combine(p.language_mode(), p.name(), p.feedback(), |
+ p.slot_index()); |
+} |
+ |
+ |
+std::ostream& operator<<(std::ostream& os, StoreGlobalParameters const& p) { |
+ return os << p.language_mode() << ", " << Brief(*p.name().handle()) |
+ << ", slot: " << p.slot_index(); |
+} |
+ |
+ |
+const StoreGlobalParameters& StoreGlobalParametersOf(const Operator* op) { |
+ DCHECK_EQ(IrOpcode::kJSStoreGlobal, op->opcode()); |
+ return OpParameter<StoreGlobalParameters>(op); |
} |
@@ -291,12 +348,6 @@ const StoreNamedParameters& StoreNamedParametersOf(const Operator* op) { |
} |
-const StoreNamedParameters& StoreGlobalParametersOf(const Operator* op) { |
- DCHECK_EQ(IrOpcode::kJSStoreGlobal, op->opcode()); |
- return OpParameter<StoreNamedParameters>(op); |
-} |
- |
- |
bool operator==(StorePropertyParameters const& lhs, |
StorePropertyParameters const& rhs) { |
return lhs.language_mode() == rhs.language_mode() && |
@@ -568,24 +619,26 @@ const Operator* JSOperatorBuilder::DeleteProperty(LanguageMode language_mode) { |
const Operator* JSOperatorBuilder::LoadGlobal(const Unique<Name>& name, |
const VectorSlotPair& feedback, |
- ContextualMode contextual_mode) { |
- LoadNamedParameters parameters(name, feedback, SLOPPY, contextual_mode); |
- return new (zone()) Operator1<LoadNamedParameters>( // -- |
+ ContextualMode contextual_mode, |
+ int slot_index) { |
+ LoadGlobalParameters parameters(name, feedback, contextual_mode, slot_index); |
+ return new (zone()) Operator1<LoadGlobalParameters>( // -- |
IrOpcode::kJSLoadGlobal, Operator::kNoProperties, // opcode |
"JSLoadGlobal", // name |
- 2, 1, 1, 1, 1, 2, // counts |
+ 3, 1, 1, 1, 1, 2, // counts |
parameters); // parameter |
} |
const Operator* JSOperatorBuilder::StoreGlobal(LanguageMode language_mode, |
const Unique<Name>& name, |
- const VectorSlotPair& feedback) { |
- StoreNamedParameters parameters(language_mode, feedback, name); |
- return new (zone()) Operator1<StoreNamedParameters>( // -- |
+ const VectorSlotPair& feedback, |
+ int slot_index) { |
+ StoreGlobalParameters parameters(language_mode, feedback, name, slot_index); |
+ return new (zone()) Operator1<StoreGlobalParameters>( // -- |
IrOpcode::kJSStoreGlobal, Operator::kNoProperties, // opcode |
"JSStoreGlobal", // name |
- 3, 1, 1, 0, 1, 2, // counts |
+ 4, 1, 1, 0, 1, 2, // counts |
parameters); // parameter |
} |