| Index: src/objects-inl.h | 
| diff --git a/src/objects-inl.h b/src/objects-inl.h | 
| index 8e87fd7b7336c3d2de8b8f998e4254036cc1113f..9d5e264f353bbd4e09509186c0a84a4f7547bb5e 100644 | 
| --- a/src/objects-inl.h | 
| +++ b/src/objects-inl.h | 
| @@ -2396,6 +2396,12 @@ InlineCacheState Code::ic_state() { | 
| } | 
|  | 
|  | 
| +Code::ExtraICState Code::extra_ic_state() { | 
| +  ASSERT(is_inline_cache_stub()); | 
| +  return ExtractExtraICStateFromFlags(flags()); | 
| +} | 
| + | 
| + | 
| PropertyType Code::type() { | 
| ASSERT(ic_state() == MONOMORPHIC); | 
| return ExtractTypeFromFlags(flags()); | 
| @@ -2572,14 +2578,20 @@ bool Code::is_inline_cache_stub() { | 
| Code::Flags Code::ComputeFlags(Kind kind, | 
| InLoopFlag in_loop, | 
| InlineCacheState ic_state, | 
| +                               ExtraICState extra_ic_state, | 
| PropertyType type, | 
| int argc, | 
| InlineCacheHolderFlag holder) { | 
| +  // Extra IC state is only allowed for monomorphic call IC stubs. | 
| +  ASSERT(extra_ic_state == kNoExtraICState || | 
| +         (kind == CALL_IC && (ic_state == MONOMORPHIC || | 
| +                              ic_state == MONOMORPHIC_PROTOTYPE_FAILURE))); | 
| // Compute the bit mask. | 
| int bits = kind << kFlagsKindShift; | 
| if (in_loop) bits |= kFlagsICInLoopMask; | 
| bits |= ic_state << kFlagsICStateShift; | 
| bits |= type << kFlagsTypeShift; | 
| +  bits |= extra_ic_state << kFlagsExtraICStateShift; | 
| bits |= argc << kFlagsArgumentsCountShift; | 
| if (holder == PROTOTYPE_MAP) bits |= kFlagsCacheInPrototypeMapMask; | 
| // Cast to flags and validate result before returning it. | 
| @@ -2588,6 +2600,7 @@ Code::Flags Code::ComputeFlags(Kind kind, | 
| ASSERT(ExtractICStateFromFlags(result) == ic_state); | 
| ASSERT(ExtractICInLoopFromFlags(result) == in_loop); | 
| ASSERT(ExtractTypeFromFlags(result) == type); | 
| +  ASSERT(ExtractExtraICStateFromFlags(result) == extra_ic_state); | 
| ASSERT(ExtractArgumentsCountFromFlags(result) == argc); | 
| return result; | 
| } | 
| @@ -2595,10 +2608,12 @@ Code::Flags Code::ComputeFlags(Kind kind, | 
|  | 
| Code::Flags Code::ComputeMonomorphicFlags(Kind kind, | 
| PropertyType type, | 
| +                                          ExtraICState extra_ic_state, | 
| InlineCacheHolderFlag holder, | 
| InLoopFlag in_loop, | 
| int argc) { | 
| -  return ComputeFlags(kind, in_loop, MONOMORPHIC, type, argc, holder); | 
| +  return ComputeFlags( | 
| +      kind, in_loop, MONOMORPHIC, extra_ic_state, type, argc, holder); | 
| } | 
|  | 
|  | 
| @@ -2614,6 +2629,12 @@ InlineCacheState Code::ExtractICStateFromFlags(Flags flags) { | 
| } | 
|  | 
|  | 
| +Code::ExtraICState Code::ExtractExtraICStateFromFlags(Flags flags) { | 
| +  int bits = (flags & kFlagsExtraICStateMask) >> kFlagsExtraICStateShift; | 
| +  return static_cast<ExtraICState>(bits); | 
| +} | 
| + | 
| + | 
| InLoopFlag Code::ExtractICInLoopFromFlags(Flags flags) { | 
| int bits = (flags & kFlagsICInLoopMask); | 
| return bits != 0 ? IN_LOOP : NOT_IN_LOOP; | 
|  |