Chromium Code Reviews| Index: src/type-feedback-vector.h |
| diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h |
| index 378c26a9809023b21c58e8f2ddee72ffbec41f2a..fb6df27726716356213973b52536d9890308c2d1 100644 |
| --- a/src/type-feedback-vector.h |
| +++ b/src/type-feedback-vector.h |
| @@ -24,7 +24,8 @@ enum class FeedbackVectorSlotKind { |
| CALL_IC, |
| LOAD_IC, |
| - LOAD_GLOBAL_IC, |
| + LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC, |
| + LOAD_GLOBAL_INSIDE_TYPEOF_IC, |
| KEYED_LOAD_IC, |
| STORE_SLOPPY_IC, |
| STORE_STRICT_IC, |
| @@ -50,7 +51,8 @@ inline bool IsLoadICKind(FeedbackVectorSlotKind kind) { |
| } |
| inline bool IsLoadGlobalICKind(FeedbackVectorSlotKind kind) { |
| - return kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC; |
| + return kind == FeedbackVectorSlotKind::LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC || |
| + kind == FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC; |
| } |
| inline bool IsKeyedLoadICKind(FeedbackVectorSlotKind kind) { |
| @@ -67,6 +69,13 @@ inline bool IsKeyedStoreICKind(FeedbackVectorSlotKind kind) { |
| kind == FeedbackVectorSlotKind::KEYED_STORE_STRICT_IC; |
| } |
| +inline TypeofMode GetTypeofModeFromICKind(FeedbackVectorSlotKind kind) { |
| + DCHECK(IsLoadGlobalICKind(kind)); |
| + return (kind == FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC) |
| + ? INSIDE_TYPEOF |
| + : NOT_INSIDE_TYPEOF; |
| +} |
| + |
| inline LanguageMode GetLanguageModeFromICKind(FeedbackVectorSlotKind kind) { |
| DCHECK(IsStoreICKind(kind) || IsKeyedStoreICKind(kind)); |
| return (kind == FeedbackVectorSlotKind::STORE_SLOPPY_IC || |
| @@ -89,8 +98,11 @@ class FeedbackVectorSpecBase { |
| return AddSlot(FeedbackVectorSlotKind::LOAD_IC); |
| } |
| - FeedbackVectorSlot AddLoadGlobalICSlot() { |
| - return AddSlot(FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
| + FeedbackVectorSlot AddLoadGlobalICSlot(TypeofMode typeof_mode) { |
| + return AddSlot( |
| + typeof_mode == INSIDE_TYPEOF |
| + ? FeedbackVectorSlotKind::LOAD_GLOBAL_INSIDE_TYPEOF_IC |
| + : FeedbackVectorSlotKind::LOAD_GLOBAL_NOT_INSIDE_TYPEOF_IC); |
| } |
| FeedbackVectorSlot AddCreateClosureSlot() { |
| @@ -313,6 +325,11 @@ class TypeFeedbackVector : public FixedArray { |
| #undef DEFINE_SLOT_KIND_PREDICATE |
| // Returns language mode encoded into kind of given slot. |
|
Michael Starzinger
2017/02/06 13:26:17
nit: s/language mode/typeof mode/
|
| + inline TypeofMode GetTypeofMode(FeedbackVectorSlot slot) const { |
| + return GetTypeofModeFromICKind(GetKind(slot)); |
| + } |
| + |
| + // Returns language mode encoded into kind of given slot. |
| inline LanguageMode GetLanguageMode(FeedbackVectorSlot slot) const { |
| return GetLanguageModeFromICKind(GetKind(slot)); |
| } |
| @@ -344,10 +361,6 @@ class TypeFeedbackVector : public FixedArray { |
| // garbage collection (e.g., for patching the cache). |
| static inline Symbol* RawUninitializedSentinel(Isolate* isolate); |
| - static const int kDummyLoadICSlot = 0; |
| - |
| - static Handle<TypeFeedbackVector> DummyVector(Isolate* isolate); |
| - |
| private: |
| void ClearSlotsImpl(SharedFunctionInfo* shared, bool force_clear); |
| @@ -529,10 +542,6 @@ class LoadICNexus : public FeedbackNexus { |
| : FeedbackNexus(vector, slot) { |
| DCHECK(vector->IsLoadIC(slot)); |
| } |
| - explicit LoadICNexus(Isolate* isolate) |
| - : FeedbackNexus( |
| - TypeFeedbackVector::DummyVector(isolate), |
| - FeedbackVectorSlot(TypeFeedbackVector::kDummyLoadICSlot)) {} |
| LoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| : FeedbackNexus(vector, slot) { |
| DCHECK(vector->IsLoadIC(slot)); |