| Index: src/ic/keyed-store-generic.cc
|
| diff --git a/src/ic/keyed-store-generic.cc b/src/ic/keyed-store-generic.cc
|
| index cf1c49f0c897304788c7134572b5413eb062fa05..549bb6af39fabd4be9e7005492256700e246a108 100644
|
| --- a/src/ic/keyed-store-generic.cc
|
| +++ b/src/ic/keyed-store-generic.cc
|
| @@ -452,6 +452,8 @@ void KeyedStoreGenericAssembler::EmitGenericElementStore(
|
|
|
| // Out-of-capacity accesses (index >= capacity) jump here. Additionally,
|
| // an ElementsKind transition might be necessary.
|
| + // The index can also be negative at this point! Jump to the runtime in that
|
| + // case to convert it to a named property.
|
| Bind(&if_grow);
|
| {
|
| Comment("Grow backing store");
|
| @@ -747,6 +749,8 @@ void KeyedStoreGenericAssembler::KeyedStoreGeneric(LanguageMode language_mode) {
|
| Node* context = Parameter(Descriptor::kContext);
|
|
|
| Variable var_index(this, MachineType::PointerRepresentation());
|
| + Variable var_unique(this, MachineRepresentation::kTagged);
|
| + var_unique.Bind(name); // Dummy initialization.
|
| Label if_index(this), if_unique_name(this), slow(this);
|
|
|
| GotoIf(TaggedIsSmi(receiver), &slow);
|
| @@ -758,7 +762,7 @@ void KeyedStoreGenericAssembler::KeyedStoreGeneric(LanguageMode language_mode) {
|
| Int32Constant(LAST_CUSTOM_ELEMENTS_RECEIVER)),
|
| &slow);
|
|
|
| - TryToName(name, &if_index, &var_index, &if_unique_name, &slow);
|
| + TryToName(name, &if_index, &var_index, &if_unique_name, &var_unique, &slow);
|
|
|
| Bind(&if_index);
|
| {
|
| @@ -770,8 +774,8 @@ void KeyedStoreGenericAssembler::KeyedStoreGeneric(LanguageMode language_mode) {
|
| Bind(&if_unique_name);
|
| {
|
| Comment("key is unique name");
|
| - KeyedStoreGenericAssembler::StoreICParameters p(context, receiver, name,
|
| - value, slot, vector);
|
| + StoreICParameters p(context, receiver, var_unique.value(), value, slot,
|
| + vector);
|
| EmitGenericPropertyStore(receiver, receiver_map, &p, &slow, language_mode);
|
| }
|
|
|
|
|