| Index: src/ic/arm64/ic-arm64.cc
|
| diff --git a/src/ic/arm64/ic-arm64.cc b/src/ic/arm64/ic-arm64.cc
|
| index 13dd3913aedecfa1269663903c6702e71bda2d4e..41e1678b7ca1ed04d1309b60f90446432bcee6eb 100644
|
| --- a/src/ic/arm64/ic-arm64.cc
|
| +++ b/src/ic/arm64/ic-arm64.cc
|
| @@ -657,9 +657,12 @@ void KeyedStoreIC::GenerateMegamorphic(MacroAssembler* masm,
|
| Register instance_type = x10;
|
| __ CompareInstanceType(receiver_map, instance_type, JS_ARRAY_TYPE);
|
| __ B(eq, &array);
|
| - // Check that the object is some kind of JSObject.
|
| - __ Cmp(instance_type, FIRST_JS_OBJECT_TYPE);
|
| - __ B(lt, &slow);
|
| + // Check that the object is some kind of JS object EXCEPT JS Value type. In
|
| + // the case that the object is a value-wrapper object, we enter the runtime
|
| + // system to make sure that indexing into string objects works as intended.
|
| + STATIC_ASSERT(JS_VALUE_TYPE < JS_OBJECT_TYPE);
|
| + __ Cmp(instance_type, JS_OBJECT_TYPE);
|
| + __ B(lo, &slow);
|
|
|
| // Object case: Check key against length in the elements array.
|
| __ Ldr(elements, FieldMemOperand(receiver, JSObject::kElementsOffset));
|
|
|