Index: src/compiler/js-operator.cc |
diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc |
index 83bf5573811841044b7d9ff3386435b97641c8f3..f73bd0e71002088c1b6fcd86f431468dd075f0a1 100644 |
--- a/src/compiler/js-operator.cc |
+++ b/src/compiler/js-operator.cc |
@@ -248,7 +248,8 @@ const LoadNamedParameters& LoadNamedParametersOf(const Operator* op) { |
bool operator==(StoreNamedParameters const& lhs, |
StoreNamedParameters const& rhs) { |
- return lhs.language_mode() == rhs.language_mode() && lhs.name() == rhs.name(); |
+ return lhs.language_mode() == rhs.language_mode() && |
+ lhs.name() == rhs.name() && lhs.feedback() == rhs.feedback(); |
} |
@@ -259,7 +260,7 @@ bool operator!=(StoreNamedParameters const& lhs, |
size_t hash_value(StoreNamedParameters const& p) { |
- return base::hash_combine(p.language_mode(), p.name()); |
+ return base::hash_combine(p.language_mode(), p.name(), p.feedback()); |
} |
@@ -274,6 +275,35 @@ const StoreNamedParameters& StoreNamedParametersOf(const Operator* op) { |
} |
+bool operator==(StorePropertyParameters const& lhs, |
+ StorePropertyParameters const& rhs) { |
+ return lhs.language_mode() == rhs.language_mode() && |
+ lhs.feedback() == rhs.feedback(); |
+} |
+ |
+ |
+bool operator!=(StorePropertyParameters const& lhs, |
+ StorePropertyParameters const& rhs) { |
+ return !(lhs == rhs); |
+} |
+ |
+ |
+size_t hash_value(StorePropertyParameters const& p) { |
+ return base::hash_combine(p.language_mode(), p.feedback()); |
+} |
+ |
+ |
+std::ostream& operator<<(std::ostream& os, StorePropertyParameters const& p) { |
+ return os << p.language_mode(); |
+} |
+ |
+ |
+const StorePropertyParameters& StorePropertyParametersOf(const Operator* op) { |
+ DCHECK_EQ(IrOpcode::kJSStoreProperty, op->opcode()); |
+ return OpParameter<StorePropertyParameters>(op); |
+} |
+ |
+ |
bool operator==(CreateClosureParameters const& lhs, |
CreateClosureParameters const& rhs) { |
return lhs.pretenure() == rhs.pretenure() && |
@@ -348,8 +378,7 @@ const CreateClosureParameters& CreateClosureParametersOf(const Operator* op) { |
V(Subtract, Operator::kNoProperties, 2, 1) \ |
V(Multiply, Operator::kNoProperties, 2, 1) \ |
V(Divide, Operator::kNoProperties, 2, 1) \ |
- V(Modulus, Operator::kNoProperties, 2, 1) \ |
- V(StoreProperty, Operator::kNoProperties, 3, 0) |
+ V(Modulus, Operator::kNoProperties, 2, 1) |
struct JSOperatorGlobalCache final { |
@@ -480,9 +509,10 @@ const Operator* JSOperatorBuilder::LoadProperty( |
} |
-const Operator* JSOperatorBuilder::StoreNamed(LanguageMode language_mode, |
- const Unique<Name>& name) { |
- StoreNamedParameters parameters(language_mode, name); |
+const Operator* JSOperatorBuilder::StoreNamed( |
+ LanguageMode language_mode, const Unique<Name>& name, |
+ const ResolvedFeedbackSlot& feedback) { |
+ StoreNamedParameters parameters(language_mode, feedback, name); |
return new (zone()) Operator1<StoreNamedParameters>( // -- |
IrOpcode::kJSStoreNamed, Operator::kNoProperties, // opcode |
"JSStoreNamed", // name |
@@ -491,6 +521,17 @@ const Operator* JSOperatorBuilder::StoreNamed(LanguageMode language_mode, |
} |
+const Operator* JSOperatorBuilder::StoreProperty( |
+ LanguageMode language_mode, const ResolvedFeedbackSlot& feedback) { |
+ StorePropertyParameters parameters(language_mode, feedback); |
+ return new (zone()) Operator1<StorePropertyParameters>( // -- |
+ IrOpcode::kJSStoreProperty, Operator::kNoProperties, // opcode |
+ "JSStoreProperty", // name |
+ 3, 1, 1, 0, 1, 2, // counts |
+ parameters); // parameter |
+} |
+ |
+ |
const Operator* JSOperatorBuilder::DeleteProperty(LanguageMode language_mode) { |
return new (zone()) Operator1<LanguageMode>( // -- |
IrOpcode::kJSDeleteProperty, Operator::kNoProperties, // opcode |