Index: src/compiler/js-operator.h |
diff --git a/src/compiler/js-operator.h b/src/compiler/js-operator.h |
index c4103381fd46c059d1e77e4e2daf67e83bc7be19..401f1f0b30e3e4629529c3d30de65d28c3b1c003 100644 |
--- a/src/compiler/js-operator.h |
+++ b/src/compiler/js-operator.h |
@@ -115,23 +115,34 @@ class VectorSlotPair { |
bool operator==(VectorSlotPair const& lhs, VectorSlotPair const& rhs); |
+// For (Load|Store)Named operators, the mode of the IC that needs |
+// to be called. This is needed because (Load|Store)Property nodes can be |
+// reduced to named versions, but still need to call the correct original |
+// IC mode because of the layout of feedback vectors. |
+enum PropertyICMode { NAMED, KEYED }; |
+ |
// Defines the property being loaded from an object by a named load. This is |
// used as a parameter by JSLoadNamed operators. |
class LoadNamedParameters final { |
public: |
LoadNamedParameters(const Unique<Name>& name, const VectorSlotPair& feedback, |
- ContextualMode contextual_mode) |
- : name_(name), contextual_mode_(contextual_mode), feedback_(feedback) {} |
+ ContextualMode contextual_mode, PropertyICMode load_ic) |
+ : name_(name), |
+ feedback_(feedback), |
+ contextual_mode_(contextual_mode), |
+ load_ic_(load_ic) {} |
const Unique<Name>& name() const { return name_; } |
ContextualMode contextual_mode() const { return contextual_mode_; } |
+ PropertyICMode load_ic() const { return load_ic_; } |
const VectorSlotPair& feedback() const { return feedback_; } |
private: |
const Unique<Name> name_; |
- const ContextualMode contextual_mode_; |
const VectorSlotPair feedback_; |
+ const ContextualMode contextual_mode_; |
+ const PropertyICMode load_ic_; |
}; |
bool operator==(LoadNamedParameters const&, LoadNamedParameters const&); |
@@ -171,15 +182,18 @@ const LoadPropertyParameters& LoadPropertyParametersOf(const Operator* op); |
// used as a parameter by JSStoreNamed operators. |
class StoreNamedParameters final { |
public: |
- StoreNamedParameters(LanguageMode language_mode, const Unique<Name>& name) |
- : language_mode_(language_mode), name_(name) {} |
+ StoreNamedParameters(LanguageMode language_mode, const Unique<Name>& name, |
+ PropertyICMode store_ic) |
+ : language_mode_(language_mode), name_(name), store_ic_(store_ic) {} |
LanguageMode language_mode() const { return language_mode_; } |
const Unique<Name>& name() const { return name_; } |
+ PropertyICMode store_ic() const { return store_ic_; } |
private: |
const LanguageMode language_mode_; |
const Unique<Name> name_; |
+ const PropertyICMode store_ic_; |
}; |
bool operator==(StoreNamedParameters const&, StoreNamedParameters const&); |
@@ -237,11 +251,13 @@ class JSOperatorBuilder final : public ZoneObject { |
const Operator* LoadProperty(const VectorSlotPair& feedback); |
const Operator* LoadNamed(const Unique<Name>& name, |
const VectorSlotPair& feedback, |
- ContextualMode contextual_mode = NOT_CONTEXTUAL); |
+ ContextualMode contextual_mode = NOT_CONTEXTUAL, |
+ PropertyICMode load_ic = NAMED); |
const Operator* StoreProperty(LanguageMode language_mode); |
const Operator* StoreNamed(LanguageMode language_mode, |
- const Unique<Name>& name); |
+ const Unique<Name>& name, |
+ PropertyICMode store_ic = NAMED); |
const Operator* DeleteProperty(LanguageMode language_mode); |