Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index 731714138b66b82a62b8ab55032edc3596f526dd..f87728b7e09653c2b1506454a942c48f7e25d368 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -497,12 +497,14 @@ MaybeObject* StubCache::ComputeKeyedLoadPixelArray(JSObject* receiver) { |
MaybeObject* StubCache::ComputeStoreField(String* name, |
JSObject* receiver, |
int field_index, |
- Map* transition) { |
+ Map* transition, |
+ Code::ExtraICState extra_ic_state) { |
PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; |
- Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type); |
+ Code::Flags flags = Code::ComputeMonomorphicFlags( |
+ Code::STORE_IC, type, extra_ic_state); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- StoreStubCompiler compiler; |
+ StoreStubCompiler compiler(extra_ic_state); |
{ MaybeObject* maybe_code = |
compiler.CompileStoreField(receiver, field_index, transition, name); |
if (!maybe_code->ToObject(&code)) return maybe_code; |
@@ -608,18 +610,22 @@ MaybeObject* StubCache::ComputeKeyedLoadOrStoreExternalArray( |
} |
-MaybeObject* StubCache::ComputeStoreNormal() { |
- return Builtins::builtin(Builtins::StoreIC_Normal); |
+MaybeObject* StubCache::ComputeStoreNormal(Code::ExtraICState extra_ic_state) { |
+ return Builtins::builtin(extra_ic_state == StoreIC::kStoreICStrict |
+ ? Builtins::StoreIC_Normal_Strict |
+ : Builtins::StoreIC_Normal); |
} |
MaybeObject* StubCache::ComputeStoreGlobal(String* name, |
GlobalObject* receiver, |
- JSGlobalPropertyCell* cell) { |
- Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, NORMAL); |
+ JSGlobalPropertyCell* cell, |
+ Code::ExtraICState extra_ic_state) { |
+ Code::Flags flags = Code::ComputeMonomorphicFlags( |
+ Code::STORE_IC, NORMAL, extra_ic_state); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- StoreStubCompiler compiler; |
+ StoreStubCompiler compiler(extra_ic_state); |
{ MaybeObject* maybe_code = |
compiler.CompileStoreGlobal(receiver, cell, name); |
if (!maybe_code->ToObject(&code)) return maybe_code; |
@@ -636,14 +642,17 @@ MaybeObject* StubCache::ComputeStoreGlobal(String* name, |
} |
-MaybeObject* StubCache::ComputeStoreCallback(String* name, |
- JSObject* receiver, |
- AccessorInfo* callback) { |
+MaybeObject* StubCache::ComputeStoreCallback( |
+ String* name, |
+ JSObject* receiver, |
+ AccessorInfo* callback, |
+ Code::ExtraICState extra_ic_state) { |
ASSERT(v8::ToCData<Address>(callback->setter()) != 0); |
- Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, CALLBACKS); |
+ Code::Flags flags = Code::ComputeMonomorphicFlags( |
+ Code::STORE_IC, CALLBACKS, extra_ic_state); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- StoreStubCompiler compiler; |
+ StoreStubCompiler compiler(extra_ic_state); |
{ MaybeObject* maybe_code = |
compiler.CompileStoreCallback(receiver, callback, name); |
if (!maybe_code->ToObject(&code)) return maybe_code; |
@@ -660,13 +669,15 @@ MaybeObject* StubCache::ComputeStoreCallback(String* name, |
} |
-MaybeObject* StubCache::ComputeStoreInterceptor(String* name, |
- JSObject* receiver) { |
- Code::Flags flags = |
- Code::ComputeMonomorphicFlags(Code::STORE_IC, INTERCEPTOR); |
+MaybeObject* StubCache::ComputeStoreInterceptor( |
+ String* name, |
+ JSObject* receiver, |
+ Code::ExtraICState extra_ic_state) { |
+ Code::Flags flags = Code::ComputeMonomorphicFlags( |
+ Code::STORE_IC, INTERCEPTOR, extra_ic_state); |
Object* code = receiver->map()->FindInCodeCache(name, flags); |
if (code->IsUndefined()) { |
- StoreStubCompiler compiler; |
+ StoreStubCompiler compiler(extra_ic_state); |
{ MaybeObject* maybe_code = |
compiler.CompileStoreInterceptor(receiver, name); |
if (!maybe_code->ToObject(&code)) return maybe_code; |
@@ -1637,7 +1648,8 @@ MaybeObject* KeyedLoadStubCompiler::GetCode(PropertyType type, String* name) { |
MaybeObject* StoreStubCompiler::GetCode(PropertyType type, String* name) { |
- Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type); |
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::STORE_IC, type, |
+ extra_ic_state_); |
MaybeObject* result = GetCodeWithFlags(flags, name); |
if (!result->IsFailure()) { |
PROFILE(CodeCreateEvent(Logger::STORE_IC_TAG, |