Chromium Code Reviews| Index: src/stub-cache.cc | 
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc | 
| index 06edc0d6871d652ba6e5248a53370a0c6883a54a..5476e90bcae40de1e2cb7c40ef9cd9797910780f 100644 | 
| --- a/src/stub-cache.cc | 
| +++ b/src/stub-cache.cc | 
| @@ -117,10 +117,12 @@ Handle<Code> StubCache::FindHandler(Handle<Name> name, | 
| Code::Kind kind, | 
| InlineCacheHolderFlag cache_holder, | 
| StrictModeFlag strict_mode) { | 
| - Code::ExtraICState extra_ic_state = Code::kNoExtraICState; | 
| - if (kind == Code::STORE_IC || kind == Code::KEYED_STORE_IC) { | 
| - extra_ic_state = Code::ComputeExtraICState( | 
| - STANDARD_STORE, strict_mode); | 
| + Code::ExtraICState extra_ic_state = IC::kNoExtraICState; | 
| + if (kind == Code::STORE_IC) { | 
| + extra_ic_state = StoreIC::ComputeExtraICState(strict_mode); | 
| + } else if (kind == Code::KEYED_STORE_IC) { | 
| + extra_ic_state = KeyedStoreIC::ComputeExtraICState(strict_mode, | 
| + STANDARD_STORE); | 
| } | 
| Code::Flags flags = Code::ComputeMonomorphicFlags( | 
| Code::HANDLER, extra_ic_state, cache_holder, Code::NORMAL, kind); | 
| @@ -131,10 +133,11 @@ Handle<Code> StubCache::FindHandler(Handle<Name> name, | 
| } | 
| -Handle<Code> StubCache::ComputeMonomorphicIC(Handle<Name> name, | 
| - Handle<Type> type, | 
| - Handle<Code> handler, | 
| - StrictModeFlag strict_mode) { | 
| +Handle<Code> StubCache::ComputeMonomorphicIC( | 
| + Handle<Name> name, | 
| + Handle<Type> type, | 
| + Handle<Code> handler, | 
| + Code::ExtraICState extra_ic_state) { | 
| Code::Kind kind = handler->handler_kind(); | 
| InlineCacheHolderFlag flag = IC::GetCodeCacheFlag(*type); | 
| @@ -146,7 +149,7 @@ Handle<Code> StubCache::ComputeMonomorphicIC(Handle<Name> name, | 
| bool can_be_cached = !type->Is(Type::String()); | 
| if (can_be_cached) { | 
| stub_holder = IC::GetCodeCacheHolder(flag, *type, isolate()); | 
| - ic = FindIC(name, stub_holder, kind, strict_mode, flag); | 
| + ic = FindIC(name, stub_holder, kind, extra_ic_state, flag); | 
| if (!ic.is_null()) return ic; | 
| } | 
| @@ -157,10 +160,12 @@ Handle<Code> StubCache::ComputeMonomorphicIC(Handle<Name> name, | 
| KeyedLoadStubCompiler ic_compiler(isolate(), flag); | 
| ic = ic_compiler.CompileMonomorphicIC(type, handler, name); | 
| } else if (kind == Code::STORE_IC) { | 
| + StrictModeFlag strict_mode = StoreIC::GetStrictMode(extra_ic_state); | 
| StoreStubCompiler ic_compiler(isolate(), strict_mode); | 
| ic = ic_compiler.CompileMonomorphicIC(type, handler, name); | 
| } else { | 
| ASSERT(kind == Code::KEYED_STORE_IC); | 
| + StrictModeFlag strict_mode = StoreIC::GetStrictMode(extra_ic_state); | 
| KeyedStoreStubCompiler ic_compiler(isolate(), strict_mode, STANDARD_STORE); | 
| ic = ic_compiler.CompileMonomorphicIC(type, handler, name); | 
| } | 
| @@ -225,7 +230,7 @@ Handle<Code> StubCache::ComputeKeyedStoreElement( | 
| StrictModeFlag strict_mode, | 
| KeyedAccessStoreMode store_mode) { | 
| Code::ExtraICState extra_state = | 
| - Code::ComputeExtraICState(store_mode, strict_mode); | 
| + KeyedStoreIC::ComputeExtraICState(strict_mode, store_mode); | 
| Code::Flags flags = Code::ComputeMonomorphicFlags( | 
| Code::KEYED_STORE_IC, extra_state); | 
| @@ -243,7 +248,8 @@ Handle<Code> StubCache::ComputeKeyedStoreElement( | 
| Handle<Code> code = compiler.CompileStoreElement(receiver_map); | 
| Map::UpdateCodeCache(receiver_map, name, code); | 
| - ASSERT(Code::GetKeyedAccessStoreMode(code->extra_ic_state()) == store_mode); | 
| + ASSERT(KeyedStoreIC::GetKeyedAccessStoreMode(code->extra_ic_state()) | 
| + == store_mode); | 
| return code; | 
| } | 
| @@ -424,7 +430,8 @@ Code* StubCache::FindCallInitialize(int argc, | 
| Code::Kind kind) { | 
| Code::ExtraICState extra_state = | 
| CallICBase::StringStubState::encode(DEFAULT_STRING_STUB) | | 
| - CallICBase::Contextual::encode(mode == RelocInfo::CODE_TARGET_CONTEXT); | 
| + CallICBase::Contextual::encode(mode == RelocInfo::CODE_TARGET_CONTEXT | 
| + ? CONTEXTUAL : NOT_CONTEXTUAL); | 
| Code::Flags flags = | 
| Code::ComputeFlags(kind, UNINITIALIZED, extra_state, Code::NORMAL, argc); | 
| UnseededNumberDictionary* dictionary = | 
| @@ -443,7 +450,8 @@ Handle<Code> StubCache::ComputeCallInitialize(int argc, | 
| Code::Kind kind) { | 
| Code::ExtraICState extra_state = | 
| CallICBase::StringStubState::encode(DEFAULT_STRING_STUB) | | 
| - CallICBase::Contextual::encode(mode == RelocInfo::CODE_TARGET_CONTEXT); | 
| + CallICBase::Contextual::encode(mode == RelocInfo::CODE_TARGET_CONTEXT | 
| + ? CONTEXTUAL : NOT_CONTEXTUAL); | 
| 
 
Toon Verwaest
2013/11/28 09:58:47
nit: indent by 4 extra spaces
 
mvstanton
2013/11/28 11:23:11
Fixed in both places.
 
 | 
| Code::Flags flags = | 
| Code::ComputeFlags(kind, UNINITIALIZED, extra_state, Code::NORMAL, argc); | 
| Handle<UnseededNumberDictionary> cache = | 
| @@ -507,7 +515,7 @@ Handle<Code> StubCache::ComputeCallNormal(int argc, | 
| Handle<Code> StubCache::ComputeCallArguments(int argc) { | 
| Code::Flags flags = | 
| Code::ComputeFlags(Code::KEYED_CALL_IC, MEGAMORPHIC, | 
| - Code::kNoExtraICState, Code::NORMAL, argc); | 
| + IC::kNoExtraICState, Code::NORMAL, argc); | 
| Handle<UnseededNumberDictionary> cache = | 
| isolate_->factory()->non_monomorphic_cache(); | 
| int entry = cache->FindEntry(isolate_, flags); | 
| @@ -637,8 +645,8 @@ Handle<Code> StubCache::ComputeStoreElementPolymorphic( | 
| store_mode == STORE_NO_TRANSITION_HANDLE_COW); | 
| Handle<PolymorphicCodeCache> cache = | 
| isolate_->factory()->polymorphic_code_cache(); | 
| - Code::ExtraICState extra_state = Code::ComputeExtraICState(store_mode, | 
| - strict_mode); | 
| + Code::ExtraICState extra_state = KeyedStoreIC::ComputeExtraICState( | 
| + strict_mode, store_mode); | 
| Code::Flags flags = | 
| Code::ComputeFlags(Code::KEYED_STORE_IC, POLYMORPHIC, extra_state); | 
| Handle<Object> probe = cache->Lookup(receiver_maps, flags); | 
| @@ -1075,7 +1083,7 @@ Handle<Code> StubCompiler::CompileCallDebugPrepareStepIn(Code::Flags flags) { | 
| Code::Kind kind = Code::ExtractKindFromFlags(flags); | 
| if (kind == Code::CALL_IC) { | 
| // For the debugger extra ic state is irrelevant. | 
| - CallIC::GenerateMiss(masm(), argc, Code::kNoExtraICState); | 
| + CallIC::GenerateMiss(masm(), argc, IC::kNoExtraICState); | 
| } else { | 
| KeyedCallIC::GenerateMiss(masm(), argc); | 
| } |