| 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,
|
|
|