| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 9d5bf17b936a44b966ac658fa5e12310f26d12d7..c452791e7525ef682ef28ed78f18f80e16ca7b60 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -753,7 +753,7 @@ void CallICBase::UpdateCaches(LookupResult* lookup,
|
| if (code->ic_state() != MONOMORPHIC) {
|
| Map* map = target()->FindFirstMap();
|
| if (map != NULL) {
|
| - isolate()->stub_cache()->Set(*name, map, target());
|
| + UpdateMegamorphicCache(map, *name, target());
|
| }
|
| }
|
| set_target(*code);
|
| @@ -765,7 +765,7 @@ void CallICBase::UpdateCaches(LookupResult* lookup,
|
| ? Handle<JSObject>::cast(object)
|
| : Handle<JSObject>(JSObject::cast(object->GetPrototype()));
|
| // Update the stub cache.
|
| - isolate()->stub_cache()->Set(*name, cache_object->map(), *code);
|
| + UpdateMegamorphicCache(cache_object->map(), *name, *code);
|
| break;
|
| }
|
| case DEBUG_STUB:
|
| @@ -972,7 +972,6 @@ void IC::PatchCache(State state,
|
| case UNINITIALIZED:
|
| case PREMONOMORPHIC:
|
| case MONOMORPHIC_PROTOTYPE_FAILURE:
|
| - case POLYMORPHIC:
|
| set_target(*code);
|
| break;
|
| case MONOMORPHIC:
|
| @@ -995,6 +994,16 @@ void IC::PatchCache(State state,
|
| // Update the stub cache.
|
| UpdateMegamorphicCache(receiver->map(), *name, *code);
|
| break;
|
| + case POLYMORPHIC:
|
| + // When trying to patch a polymorphic stub with anything other than
|
| + // another polymorphic stub, go generic.
|
| + // TODO(verwaest): Currently we always go generic since no polymorphic
|
| + // stubs enter this code path. Replace with proper updating once named
|
| + // load/store can also be polymorphic.
|
| + set_target((strict_mode == kStrictMode)
|
| + ? *generic_stub_strict()
|
| + : *generic_stub());
|
| + break;
|
| case GENERIC:
|
| case DEBUG_STUB:
|
| break;
|
|
|