| Index: src/ic.cc | 
| diff --git a/src/ic.cc b/src/ic.cc | 
| index 557a48381c2fa6fc94c8e87616abd3b47e52a1b1..9f55bd817bda3626715ffadba08df3d0899684f0 100644 | 
| --- a/src/ic.cc | 
| +++ b/src/ic.cc | 
| @@ -89,9 +89,10 @@ void IC::TraceIC(const char* type, | 
| } | 
| } | 
| JavaScriptFrame::PrintTop(isolate(), stdout, false, true); | 
| -    Code::ExtraICState extra_state = new_target->extra_ic_state(); | 
| +    ExtraICState extra_state = new_target->extra_ic_state(); | 
| const char* modifier = | 
| -        GetTransitionMarkModifier(Code::GetKeyedAccessStoreMode(extra_state)); | 
| +        GetTransitionMarkModifier( | 
| +            KeyedStoreIC::GetKeyedAccessStoreMode(extra_state)); | 
| PrintF(" (%c->%c%s)", | 
| TransitionMarkFromState(state()), | 
| TransitionMarkFromState(new_state), | 
| @@ -532,7 +533,7 @@ void StoreIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| if (IsCleared(target)) return; | 
| SetTargetAtAddress(address, | 
| *pre_monomorphic_stub( | 
| -          isolate, Code::GetStrictMode(target->extra_ic_state()))); | 
| +          isolate, StoreIC::GetStrictMode(target->extra_ic_state()))); | 
| } | 
|  | 
|  | 
| @@ -540,7 +541,7 @@ void KeyedStoreIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| if (IsCleared(target)) return; | 
| SetTargetAtAddress(address, | 
| *pre_monomorphic_stub( | 
| -          isolate, Code::GetStrictMode(target->extra_ic_state()))); | 
| +          isolate, StoreIC::GetStrictMode(target->extra_ic_state()))); | 
| } | 
|  | 
|  | 
| @@ -822,7 +823,7 @@ MaybeObject* KeyedCallIC::LoadFunction(Handle<Object> object, | 
|  | 
| if (stub.is_null()) { | 
| stub = isolate()->stub_cache()->ComputeCallMegamorphic( | 
| -          argc, Code::KEYED_CALL_IC, Code::kNoExtraICState); | 
| +          argc, Code::KEYED_CALL_IC, kNoExtraICState); | 
| if (object->IsJSObject()) { | 
| Handle<JSObject> receiver = Handle<JSObject>::cast(object); | 
| if (receiver->elements()->map() == | 
| @@ -1005,7 +1006,7 @@ bool IC::UpdatePolymorphicIC(Handle<Type> type, | 
| } | 
|  | 
| Handle<Code> ic = isolate()->stub_cache()->ComputePolymorphicIC( | 
| -      &types, &handlers, number_of_valid_types, name, strict_mode()); | 
| +      &types, &handlers, number_of_valid_types, name, extra_ic_state()); | 
| set_target(*ic); | 
| return true; | 
| } | 
| @@ -1043,7 +1044,7 @@ void IC::UpdateMonomorphicIC(Handle<Type> type, | 
| Handle<String> name) { | 
| if (!handler->is_handler()) return set_target(*handler); | 
| Handle<Code> ic = isolate()->stub_cache()->ComputeMonomorphicIC( | 
| -      name, type, handler, strict_mode()); | 
| +      name, type, handler, extra_ic_state()); | 
| set_target(*ic); | 
| } | 
|  | 
| @@ -1177,8 +1178,12 @@ Handle<Code> IC::ComputeHandler(LookupResult* lookup, | 
| Handle<HeapObject> stub_holder(GetCodeCacheHolder( | 
| isolate(), *object, cache_holder)); | 
|  | 
| +  StrictModeFlag strict_mode = kNonStrictMode; | 
| +  if (kind() == Code::STORE_IC || kind() == Code::KEYED_STORE_IC) { | 
| +    strict_mode = StoreIC::GetStrictMode(extra_ic_state()); | 
| +  } | 
| Handle<Code> code = isolate()->stub_cache()->FindHandler( | 
| -      name, handle(stub_holder->map()), kind(), cache_holder, strict_mode()); | 
| +      name, handle(stub_holder->map()), kind(), cache_holder, strict_mode); | 
| if (!code.is_null()) return code; | 
|  | 
| code = CompileHandler(lookup, object, name, value, cache_holder); | 
| @@ -1753,7 +1758,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver, | 
| // superset of the original IC. Handle those here if the receiver map hasn't | 
| // changed or it has transitioned to a more general kind. | 
| KeyedAccessStoreMode old_store_mode = | 
| -      Code::GetKeyedAccessStoreMode(target()->extra_ic_state()); | 
| +      KeyedStoreIC::GetKeyedAccessStoreMode(target()->extra_ic_state()); | 
| Handle<Map> previous_receiver_map = target_receiver_maps.at(0); | 
| if (state() == MONOMORPHIC) { | 
| // If the "old" and "new" maps are in the same elements map family, stay | 
| @@ -2344,7 +2349,7 @@ const char* BinaryOpIC::GetName(TypeInfo type_info) { | 
|  | 
|  | 
| MaybeObject* BinaryOpIC::Transition(Handle<Object> left, Handle<Object> right) { | 
| -  Code::ExtraICState extra_ic_state = target()->extended_extra_ic_state(); | 
| +  ExtraICState extra_ic_state = target()->extended_extra_ic_state(); | 
| BinaryOpStub stub(extra_ic_state); | 
|  | 
| Handle<Type> left_type = stub.GetLeftType(isolate()); | 
| @@ -2637,7 +2642,7 @@ RUNTIME_FUNCTION(Code*, CompareIC_Miss) { | 
|  | 
| void CompareNilIC::Clear(Address address, Code* target) { | 
| if (IsCleared(target)) return; | 
| -  Code::ExtraICState state = target->extended_extra_ic_state(); | 
| +  ExtraICState state = target->extended_extra_ic_state(); | 
|  | 
| CompareNilICStub stub(state, HydrogenCodeStub::UNINITIALIZED); | 
| stub.ClearState(); | 
| @@ -2659,7 +2664,7 @@ MaybeObject* CompareNilIC::DoCompareNilSlow(NilValue nil, | 
|  | 
|  | 
| MaybeObject* CompareNilIC::CompareNil(Handle<Object> object) { | 
| -  Code::ExtraICState extra_ic_state = target()->extended_extra_ic_state(); | 
| +  ExtraICState extra_ic_state = target()->extended_extra_ic_state(); | 
|  | 
| CompareNilICStub stub(extra_ic_state); | 
|  | 
|  |