Index: src/stub-cache.h |
diff --git a/src/stub-cache.h b/src/stub-cache.h |
index c70b1ff6187e1057d3abad95a08decbf04769899..ebf0bd3c917b5e06ba80f0a4bedb5bd1703def23 100644 |
--- a/src/stub-cache.h |
+++ b/src/stub-cache.h |
@@ -364,8 +364,10 @@ enum IcCheckType { ELEMENT, PROPERTY }; |
// The stub compilers compile stubs for the stub cache. |
class StubCompiler BASE_EMBEDDED { |
public: |
- explicit StubCompiler(Isolate* isolate) |
- : isolate_(isolate), masm_(isolate, NULL, 256), failure_(NULL) { } |
+ explicit StubCompiler(Isolate* isolate, |
+ ExtraICState extra_ic_state = kNoExtraICState) |
+ : isolate_(isolate), extra_ic_state_(extra_ic_state), |
+ masm_(isolate, NULL, 256), failure_(NULL) { } |
// Functions to compile either CallIC or KeyedCallIC. The specific kind |
// is extracted from the code flags. |
@@ -489,6 +491,8 @@ class StubCompiler BASE_EMBEDDED { |
Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); |
Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<Name> name); |
+ ExtraICState extra_state() { return extra_ic_state_; } |
+ |
MacroAssembler* masm() { return &masm_; } |
void set_failure(Failure* failure) { failure_ = failure; } |
@@ -504,6 +508,7 @@ class StubCompiler BASE_EMBEDDED { |
private: |
Isolate* isolate_; |
+ const ExtraICState extra_ic_state_; |
MacroAssembler masm_; |
Failure* failure_; |
}; |
@@ -516,8 +521,11 @@ class BaseLoadStoreStubCompiler: public StubCompiler { |
public: |
BaseLoadStoreStubCompiler(Isolate* isolate, |
Code::Kind kind, |
+ ExtraICState extra_ic_state = kNoExtraICState, |
InlineCacheHolderFlag cache_holder = OWN_MAP) |
- : StubCompiler(isolate), kind_(kind), cache_holder_(cache_holder) { |
+ : StubCompiler(isolate, extra_ic_state), |
+ kind_(kind), |
+ cache_holder_(cache_holder) { |
InitializeRegisters(); |
} |
virtual ~BaseLoadStoreStubCompiler() { } |
@@ -589,7 +597,6 @@ class BaseLoadStoreStubCompiler: public StubCompiler { |
} |
void JitEvent(Handle<Name> name, Handle<Code> code); |
- virtual ExtraICState extra_state() { return kNoExtraICState; } |
virtual Register receiver() = 0; |
virtual Register name() = 0; |
virtual Register scratch1() = 0; |
@@ -609,9 +616,11 @@ class BaseLoadStoreStubCompiler: public StubCompiler { |
class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
public: |
LoadStubCompiler(Isolate* isolate, |
+ ExtraICState extra_ic_state = kNoExtraICState, |
InlineCacheHolderFlag cache_holder = OWN_MAP, |
Code::Kind kind = Code::LOAD_IC) |
- : BaseLoadStoreStubCompiler(isolate, kind, cache_holder) { } |
+ : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state, |
+ cache_holder) { } |
virtual ~LoadStubCompiler() { } |
Handle<Code> CompileLoadField(Handle<Type> type, |
@@ -708,8 +717,10 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
class KeyedLoadStubCompiler: public LoadStubCompiler { |
public: |
KeyedLoadStubCompiler(Isolate* isolate, |
+ ExtraICState extra_ic_state = kNoExtraICState, |
InlineCacheHolderFlag cache_holder = OWN_MAP) |
- : LoadStubCompiler(isolate, cache_holder, Code::KEYED_LOAD_IC) { } |
+ : LoadStubCompiler(isolate, extra_ic_state, cache_holder, |
+ Code::KEYED_LOAD_IC) { } |
Handle<Code> CompileLoadElement(Handle<Map> receiver_map); |
@@ -732,10 +743,9 @@ class KeyedLoadStubCompiler: public LoadStubCompiler { |
class StoreStubCompiler: public BaseLoadStoreStubCompiler { |
public: |
StoreStubCompiler(Isolate* isolate, |
- StrictModeFlag strict_mode, |
+ ExtraICState extra_ic_state, |
Code::Kind kind = Code::STORE_IC) |
- : BaseLoadStoreStubCompiler(isolate, kind), |
- strict_mode_(strict_mode) { } |
+ : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state) {} |
virtual ~StoreStubCompiler() { } |
@@ -826,16 +836,11 @@ class StoreStubCompiler: public BaseLoadStoreStubCompiler { |
virtual Register scratch1() { return registers_[3]; } |
virtual Register scratch2() { return registers_[4]; } |
virtual Register scratch3() { return registers_[5]; } |
- StrictModeFlag strict_mode() { return strict_mode_; } |
- virtual ExtraICState extra_state() { |
- return StoreIC::ComputeExtraICState(strict_mode_); |
- } |
protected: |
static Register* registers(); |
private: |
- StrictModeFlag strict_mode_; |
friend class BaseLoadStoreStubCompiler; |
}; |
@@ -843,10 +848,8 @@ class StoreStubCompiler: public BaseLoadStoreStubCompiler { |
class KeyedStoreStubCompiler: public StoreStubCompiler { |
public: |
KeyedStoreStubCompiler(Isolate* isolate, |
- StrictModeFlag strict_mode, |
- KeyedAccessStoreMode store_mode) |
- : StoreStubCompiler(isolate, strict_mode, Code::KEYED_STORE_IC), |
- store_mode_(store_mode) { } |
+ ExtraICState extra_ic_state) |
+ : StoreStubCompiler(isolate, extra_ic_state, Code::KEYED_STORE_IC) {} |
Handle<Code> CompileStoreElement(Handle<Map> receiver_map); |
@@ -859,11 +862,12 @@ class KeyedStoreStubCompiler: public StoreStubCompiler { |
static void GenerateStoreDictionaryElement(MacroAssembler* masm); |
protected: |
- virtual ExtraICState extra_state() { |
- return KeyedStoreIC::ComputeExtraICState(strict_mode(), store_mode_); |
- } |
static Register* registers(); |
+ KeyedAccessStoreMode store_mode() { |
+ return KeyedStoreIC::GetKeyedAccessStoreMode(extra_state()); |
+ } |
+ |
private: |
Register transition_map() { |
return registers()[3]; |
@@ -872,7 +876,6 @@ class KeyedStoreStubCompiler: public StoreStubCompiler { |
virtual void GenerateNameCheck(Handle<Name> name, |
Register name_reg, |
Label* miss); |
- KeyedAccessStoreMode store_mode_; |
friend class BaseLoadStoreStubCompiler; |
}; |
@@ -1000,7 +1003,6 @@ class CallStubCompiler: public StubCompiler { |
const ParameterCount arguments_; |
const Code::Kind kind_; |
- const ExtraICState extra_state_; |
const InlineCacheHolderFlag cache_holder_; |
}; |