| Index: src/ic/handler-compiler.cc
|
| diff --git a/src/ic/handler-compiler.cc b/src/ic/handler-compiler.cc
|
| index 4d9d46acda7e44fb618b2f628294d5515efb8507..f552d51f00c2917e224d0144be7901dff8a97775 100644
|
| --- a/src/ic/handler-compiler.cc
|
| +++ b/src/ic/handler-compiler.cc
|
| @@ -524,7 +524,7 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreCallback(
|
|
|
|
|
| void ElementHandlerCompiler::CompileElementHandlers(
|
| - MapHandleList* receiver_maps, CodeHandleList* handlers) {
|
| + MapHandleList* receiver_maps, CodeHandleList* handlers, Strength strength) {
|
| for (int i = 0; i < receiver_maps->length(); ++i) {
|
| Handle<Map> receiver_map = receiver_maps->at(i);
|
| Handle<Code> cached_stub;
|
| @@ -540,8 +540,10 @@ void ElementHandlerCompiler::CompileElementHandlers(
|
| // No need to check for an elements-free prototype chain here, the
|
| // generated stub code needs to check that dynamically anyway.
|
| bool convert_hole_to_undefined =
|
| - is_js_array && elements_kind == FAST_HOLEY_ELEMENTS &&
|
| - *receiver_map == isolate()->get_initial_js_array_map(elements_kind);
|
| + (is_js_array && elements_kind == FAST_HOLEY_ELEMENTS &&
|
| + *receiver_map ==
|
| + isolate()->get_initial_js_array_map(elements_kind)) &&
|
| + !is_strong(strength);
|
|
|
| if (receiver_map->has_indexed_interceptor()) {
|
| cached_stub = LoadIndexedInterceptorStub(isolate()).GetCode();
|
| @@ -554,7 +556,9 @@ void ElementHandlerCompiler::CompileElementHandlers(
|
| convert_hole_to_undefined).GetCode();
|
| } else {
|
| DCHECK(elements_kind == DICTIONARY_ELEMENTS);
|
| - cached_stub = LoadDictionaryElementStub(isolate()).GetCode();
|
| + LoadICState state = LoadICState(
|
| + is_strong(strength) ? LoadICState::kStrongModeState : 0);
|
| + cached_stub = LoadDictionaryElementStub(isolate(), state).GetCode();
|
| }
|
| }
|
|
|
|
|