| Index: src/stub-cache.cc
 | 
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc
 | 
| index a2bb810266de0699ba4b58bbe3b54cd46a0f8cc7..eec879983b281408d85b1819c49733335e9d6150 100644
 | 
| --- a/src/stub-cache.cc
 | 
| +++ b/src/stub-cache.cc
 | 
| @@ -165,66 +165,29 @@ Handle<Code> StubCache::FindStoreHandler(Handle<Name> name,
 | 
|  }
 | 
|  
 | 
|  
 | 
| -Handle<Code> StubCache::ComputeMonomorphicLoadIC(Handle<HeapObject> receiver,
 | 
| -                                                 Handle<Code> handler,
 | 
| -                                                 Handle<Name> name) {
 | 
| +Handle<Code> StubCache::ComputeMonomorphicIC(Handle<HeapObject> receiver,
 | 
| +                                             Handle<Code> handler,
 | 
| +                                             Handle<Name> name,
 | 
| +                                             StrictModeFlag strict_mode) {
 | 
| +  Code::Kind kind = handler->handler_kind();
 | 
|    Handle<Map> map(receiver->map());
 | 
| -  Handle<Code> ic = FindIC(name, map, Code::LOAD_IC, handler->type());
 | 
| +  Handle<Code> ic = FindIC(name, map, kind, handler->type(), strict_mode);
 | 
|    if (!ic.is_null()) return ic;
 | 
|  
 | 
| -  LoadStubCompiler ic_compiler(isolate());
 | 
| -  ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| -
 | 
| -  HeapObject::UpdateMapCodeCache(receiver, name, ic);
 | 
| -  return ic;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -Handle<Code> StubCache::ComputeMonomorphicKeyedLoadIC(
 | 
| -    Handle<HeapObject> receiver,
 | 
| -    Handle<Code> handler,
 | 
| -    Handle<Name> name) {
 | 
| -  Handle<Map> map(receiver->map());
 | 
| -  Handle<Code> ic = FindIC(name, map, Code::KEYED_LOAD_IC, handler->type());
 | 
| -  if (!ic.is_null()) return ic;
 | 
| -
 | 
| -  KeyedLoadStubCompiler ic_compiler(isolate());
 | 
| -  ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| -
 | 
| -  HeapObject::UpdateMapCodeCache(receiver, name, ic);
 | 
| -  return ic;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -Handle<Code> StubCache::ComputeMonomorphicStoreIC(Handle<HeapObject> receiver,
 | 
| -                                                  Handle<Code> handler,
 | 
| -                                                  Handle<Name> name,
 | 
| -                                                  StrictModeFlag strict_mode) {
 | 
| -  Handle<Map> map(receiver->map());
 | 
| -  Handle<Code> ic = FindIC(
 | 
| -      name, map, Code::STORE_IC, handler->type(), strict_mode);
 | 
| -  if (!ic.is_null()) return ic;
 | 
| -
 | 
| -  StoreStubCompiler ic_compiler(isolate(), strict_mode);
 | 
| -  ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| -
 | 
| -  HeapObject::UpdateMapCodeCache(receiver, name, ic);
 | 
| -  return ic;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -Handle<Code> StubCache::ComputeMonomorphicKeyedStoreIC(
 | 
| -    Handle<HeapObject> receiver,
 | 
| -    Handle<Code> handler,
 | 
| -    Handle<Name> name,
 | 
| -    StrictModeFlag strict_mode) {
 | 
| -  Handle<Map> map(receiver->map());
 | 
| -  Handle<Code> ic = FindIC(
 | 
| -      name, map, Code::KEYED_STORE_IC, handler->type(), strict_mode);
 | 
| -  if (!ic.is_null()) return ic;
 | 
| -
 | 
| -  KeyedStoreStubCompiler ic_compiler(isolate(), strict_mode, STANDARD_STORE);
 | 
| -  ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| +  if (kind == Code::LOAD_IC) {
 | 
| +    LoadStubCompiler ic_compiler(isolate());
 | 
| +    ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| +  } else if (kind == Code::KEYED_LOAD_IC) {
 | 
| +    KeyedLoadStubCompiler ic_compiler(isolate());
 | 
| +    ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| +  } else if (kind == Code::STORE_IC) {
 | 
| +    StoreStubCompiler ic_compiler(isolate(), strict_mode);
 | 
| +    ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| +  } else {
 | 
| +    ASSERT(kind == Code::KEYED_STORE_IC);
 | 
| +    KeyedStoreStubCompiler ic_compiler(isolate(), strict_mode, STANDARD_STORE);
 | 
| +    ic = ic_compiler.CompileMonomorphicIC(map, handler, name);
 | 
| +  }
 | 
|  
 | 
|    HeapObject::UpdateMapCodeCache(receiver, name, ic);
 | 
|    return ic;
 | 
| @@ -1072,30 +1035,25 @@ Handle<Code> StubCache::ComputeLoadElementPolymorphic(
 | 
|  }
 | 
|  
 | 
|  
 | 
| -Handle<Code> StubCache::ComputePolymorphicLoadIC(MapHandleList* receiver_maps,
 | 
| -                                                 CodeHandleList* handlers,
 | 
| -                                                 int number_of_valid_maps,
 | 
| -                                                 Handle<Name> name) {
 | 
| -  LoadStubCompiler ic_compiler(isolate_);
 | 
| -  Code::StubType type = number_of_valid_maps == 1 ? handlers->at(0)->type()
 | 
| +Handle<Code> StubCache::ComputePolymorphicIC(MapHandleList* receiver_maps,
 | 
| +                                             CodeHandleList* handlers,
 | 
| +                                             int number_of_valid_maps,
 | 
| +                                             Handle<Name> name,
 | 
| +                                             StrictModeFlag strict_mode) {
 | 
| +  Handle<Code> handler = handlers->at(0);
 | 
| +  Code::Kind kind = handler->handler_kind();
 | 
| +  Code::StubType type = number_of_valid_maps == 1 ? handler->type()
 | 
|                                                    : Code::NORMAL;
 | 
| -  Handle<Code> ic = ic_compiler.CompilePolymorphicIC(
 | 
| -      receiver_maps, handlers, name, type, PROPERTY);
 | 
| -  return ic;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -Handle<Code> StubCache::ComputePolymorphicStoreIC(MapHandleList* receiver_maps,
 | 
| -                                                  CodeHandleList* handlers,
 | 
| -                                                  int number_of_valid_maps,
 | 
| -                                                  Handle<Name> name,
 | 
| -                                                  StrictModeFlag strict_mode) {
 | 
| -  StoreStubCompiler ic_compiler(isolate_, strict_mode);
 | 
| -  Code::StubType type = number_of_valid_maps == 1 ? handlers->at(0)->type()
 | 
| -                                                  : Code::NORMAL;
 | 
| -  Handle<Code> ic = ic_compiler.CompilePolymorphicIC(
 | 
| -      receiver_maps, handlers, name, type, PROPERTY);
 | 
| -  return ic;
 | 
| +  if (kind == Code::LOAD_IC) {
 | 
| +    LoadStubCompiler ic_compiler(isolate_);
 | 
| +    return ic_compiler.CompilePolymorphicIC(
 | 
| +        receiver_maps, handlers, name, type, PROPERTY);
 | 
| +  } else {
 | 
| +    ASSERT(kind == Code::STORE_IC);
 | 
| +    StoreStubCompiler ic_compiler(isolate_, strict_mode);
 | 
| +    return ic_compiler.CompilePolymorphicIC(
 | 
| +        receiver_maps, handlers, name, type, PROPERTY);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -1973,8 +1931,7 @@ Handle<Code> BaseLoadStoreStubCompiler::GetICCode(Code::Kind kind,
 | 
|                                                    Code::StubType type,
 | 
|                                                    Handle<Name> name,
 | 
|                                                    InlineCacheState state) {
 | 
| -  Code::Flags flags = Code::ComputeFlags(
 | 
| -      kind, state, extra_state(), type);
 | 
| +  Code::Flags flags = Code::ComputeFlags(kind, state, extra_state(), type);
 | 
|    Handle<Code> code = GetCodeWithFlags(flags, name);
 | 
|    PROFILE(isolate(), CodeCreateEvent(log_kind(code), *code, *name));
 | 
|    JitEvent(name, code);
 | 
| @@ -1982,22 +1939,9 @@ Handle<Code> BaseLoadStoreStubCompiler::GetICCode(Code::Kind kind,
 | 
|  }
 | 
|  
 | 
|  
 | 
| -Handle<Code> BaseLoadStubCompiler::GetCode(Code::Kind kind,
 | 
| -                                           Code::StubType type,
 | 
| -                                           Handle<Name> name) {
 | 
| -  ASSERT(type != Code::NORMAL);
 | 
| -  Code::Flags flags = Code::ComputeFlags(
 | 
| -      Code::HANDLER, MONOMORPHIC, Code::kNoExtraICState, type, kind);
 | 
| -  Handle<Code> code = GetCodeWithFlags(flags, name);
 | 
| -  PROFILE(isolate(), CodeCreateEvent(log_kind(code), *code, *name));
 | 
| -  JitEvent(name, code);
 | 
| -  return code;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -Handle<Code> BaseStoreStubCompiler::GetCode(Code::Kind kind,
 | 
| -                                            Code::StubType type,
 | 
| -                                            Handle<Name> name) {
 | 
| +Handle<Code> BaseLoadStoreStubCompiler::GetCode(Code::Kind kind,
 | 
| +                                                Code::StubType type,
 | 
| +                                                Handle<Name> name) {
 | 
|    ASSERT(type != Code::NORMAL);
 | 
|    Code::Flags flags = Code::ComputeFlags(
 | 
|        Code::HANDLER, MONOMORPHIC, extra_state(), type, kind);
 | 
| 
 |