Index: src/ic/ic-compiler.cc |
diff --git a/src/ic/ic-compiler.cc b/src/ic/ic-compiler.cc |
index f597083e631be5e9aa49adcab9dbcf58a0225581..dfee0127c6a9d8e8893087490a0a8738aea3cba4 100644 |
--- a/src/ic/ic-compiler.cc |
+++ b/src/ic/ic-compiler.cc |
@@ -110,7 +110,15 @@ Handle<Code> PropertyICCompiler::ComputeKeyedLoadMonomorphic( |
Handle<Code> PropertyICCompiler::ComputeKeyedLoadMonomorphicHandler( |
Handle<Map> receiver_map) { |
Isolate* isolate = receiver_map->GetIsolate(); |
+ bool is_js_array = receiver_map->instance_type() == JS_ARRAY_TYPE; |
ElementsKind elements_kind = receiver_map->elements_kind(); |
+ |
+ // 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); |
+ |
Handle<Code> stub; |
if (receiver_map->has_indexed_interceptor()) { |
stub = LoadIndexedInterceptorStub(isolate).GetCode(); |
@@ -122,9 +130,8 @@ Handle<Code> PropertyICCompiler::ComputeKeyedLoadMonomorphicHandler( |
} else if (receiver_map->has_fast_elements() || |
receiver_map->has_external_array_elements() || |
receiver_map->has_fixed_typed_array_elements()) { |
- stub = LoadFastElementStub(isolate, |
- receiver_map->instance_type() == JS_ARRAY_TYPE, |
- elements_kind).GetCode(); |
+ stub = LoadFastElementStub(isolate, is_js_array, elements_kind, |
+ convert_hole_to_undefined).GetCode(); |
} else { |
stub = LoadDictionaryElementStub(isolate).GetCode(); |
} |