| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 1961e403ce113ad50b59b082f53b27ad68992bf5..b6199831f007633fecaf7c87f28432a18fe6b380 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -4443,7 +4443,7 @@ HCheckMaps* HOptimizedGraphBuilder::AddCheckMap(HValue* object,
|
|
|
|
|
| HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| - HValue* object,
|
| + HValue* checked_object,
|
| Handle<String> name,
|
| HValue* value,
|
| Handle<Map> map,
|
| @@ -4495,11 +4495,12 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| AddStoreMapConstant(heap_number, isolate()->factory()->heap_number_map());
|
| Add<HStoreNamedField>(heap_number, HObjectAccess::ForHeapNumberValue(),
|
| value);
|
| - instr = New<HStoreNamedField>(object, heap_number_access,
|
| - heap_number);
|
| + instr = New<HStoreNamedField>(checked_object,
|
| + heap_number_access,
|
| + heap_number);
|
| } else {
|
| // Already holds a HeapNumber; load the box and write its value field.
|
| - HInstruction* heap_number = Add<HLoadNamedField>(object,
|
| + HInstruction* heap_number = Add<HLoadNamedField>(checked_object,
|
| heap_number_access);
|
| heap_number->set_type(HType::HeapNumber());
|
| instr = New<HStoreNamedField>(heap_number,
|
| @@ -4508,7 +4509,7 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField(
|
| }
|
| } else {
|
| // This is a normal store.
|
| - instr = New<HStoreNamedField>(object, field_access, value);
|
| + instr = New<HStoreNamedField>(checked_object, field_access, value);
|
| }
|
|
|
| if (transition_to_field) {
|
| @@ -4545,8 +4546,8 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedMonomorphic(
|
| // Handle a store to a known field.
|
| LookupResult lookup(isolate());
|
| if (ComputeLoadStoreField(map, name, &lookup, true)) {
|
| - AddCheckMap(object, map);
|
| - return BuildStoreNamedField(object, name, value, map, &lookup);
|
| + HCheckMaps* checked_object = AddCheckMap(object, map);
|
| + return BuildStoreNamedField(checked_object, name, value, map, &lookup);
|
| }
|
|
|
| // No luck, do a generic store.
|
| @@ -4808,11 +4809,11 @@ bool HOptimizedGraphBuilder::TryStorePolymorphicAsMonomorphic(
|
|
|
| // Everything matched; can use monomorphic store.
|
| BuildCheckHeapObject(object);
|
| - Add<HCheckMaps>(object, types);
|
| + HCheckMaps* checked_object = Add<HCheckMaps>(object, types);
|
| HInstruction* store;
|
| CHECK_ALIVE_OR_RETURN(
|
| store = BuildStoreNamedField(
|
| - object, name, store_value, types->at(count - 1), &lookup),
|
| + checked_object, name, store_value, types->at(count - 1), &lookup),
|
| true);
|
| if (!ast_context()->IsEffect()) Push(result_value);
|
| store->set_position(position);
|
| @@ -4861,7 +4862,7 @@ void HOptimizedGraphBuilder::HandlePolymorphicStoreNamedField(
|
| set_current_block(if_true);
|
| HInstruction* instr;
|
| CHECK_ALIVE(instr = BuildStoreNamedField(
|
| - object, name, store_value, map, &lookup));
|
| + compare, name, store_value, map, &lookup));
|
| instr->set_position(position);
|
| // Goto will add the HSimulate for the store.
|
| AddInstruction(instr);
|
|
|