Chromium Code Reviews| Index: src/hydrogen-instructions.cc |
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
| index 889ebfd05fc6f47a4cb835269ab29ddbd686f02e..81227d90c8a2fa038cee20c0efeea5ee20c2cdff 100644 |
| --- a/src/hydrogen-instructions.cc |
| +++ b/src/hydrogen-instructions.cc |
| @@ -3583,8 +3583,7 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) { |
| filler_map->FinalizeUniqueness(); // TODO(titzer): should be init'd a'ready |
| filler_map->InsertAfter(free_space_instr); |
| HInstruction* store_map = HStoreNamedField::New(zone, context(), |
| - free_space_instr, HObjectAccess::ForMap(), filler_map, |
| - INITIALIZING_STORE); |
| + free_space_instr, HObjectAccess::ForMap(), filler_map); |
| store_map->SetFlag(HValue::kHasNoObservableSideEffects); |
| store_map->InsertAfter(filler_map); |
| @@ -3595,10 +3594,10 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) { |
| zone, context(), free_space_size, Representation::Smi(), store_map); |
| // Must force Smi representation for x64 (see comment above). |
| HObjectAccess access = |
| - HObjectAccess::ForJSObjectOffset(FreeSpace::kSizeOffset, |
| - Representation::Smi()); |
| + HObjectAccess::ForJSObjectOffsetUnsafe(FreeSpace::kSizeOffset, |
| + Representation::Smi()); |
|
Toon Verwaest
2014/02/03 13:51:32
filler_map
Igor Sheludko
2014/02/03 17:57:05
Done.
|
| HStoreNamedField* store_size = HStoreNamedField::New(zone, context(), |
| - free_space_instr, access, filler_size, INITIALIZING_STORE); |
| + free_space_instr, access, filler_size); |
| store_size->SetFlag(HValue::kHasNoObservableSideEffects); |
| store_size->InsertAfter(filler_size); |
| filler_free_space_size_ = store_size; |
| @@ -3608,10 +3607,10 @@ void HAllocate::CreateFreeSpaceFiller(int32_t free_space_size) { |
| void HAllocate::ClearNextMapWord(int offset) { |
| if (MustClearNextMapWord()) { |
| Zone* zone = block()->zone(); |
| - HObjectAccess access = HObjectAccess::ForJSObjectOffset(offset); |
| + HObjectAccess access = HObjectAccess::ForJSObjectOffsetUnsafe(offset); |
| HStoreNamedField* clear_next_map = |
| HStoreNamedField::New(zone, context(), this, access, |
| - block()->graph()->GetConstant0(), INITIALIZING_STORE); |
| + block()->graph()->GetConstant0()); |
| clear_next_map->ClearAllSideEffects(); |
| clear_next_map->InsertAfter(this); |
| } |
| @@ -4235,7 +4234,7 @@ HObjectAccess HObjectAccess::ForFixedArrayHeader(int offset) { |
| } |
| -HObjectAccess HObjectAccess::ForJSObjectOffset(int offset, |
| +HObjectAccess HObjectAccess::ForJSObjectOffset(Handle<Map> map, int offset, |
| Representation representation) { |
| ASSERT(offset >= 0); |
| Portion portion = kInobject; |
| @@ -4245,7 +4244,15 @@ HObjectAccess HObjectAccess::ForJSObjectOffset(int offset, |
| } else if (offset == JSObject::kMapOffset) { |
| portion = kMaps; |
| } |
| - return HObjectAccess(portion, offset, representation); |
| + bool existing_inobject_property = true; |
| + if (!map.is_null()) { |
|
Toon Verwaest
2014/02/03 13:51:32
I think you should use map->instance_size() - map-
Igor Sheludko
2014/02/03 17:57:05
Done.
|
| + int inobject_property_index = map->GetInObjectPropertyIndex(offset); |
| + // Negative property indexes are correctly handled here. |
| + existing_inobject_property = |
| + inobject_property_index < map->NumberOfFields(); |
| + } |
| + return HObjectAccess(portion, offset, representation, Handle<String>::null(), |
| + false, existing_inobject_property); |
| } |
| @@ -4297,7 +4304,8 @@ HObjectAccess HObjectAccess::ForJSArrayOffset(int offset) { |
| HObjectAccess HObjectAccess::ForBackingStoreOffset(int offset, |
| Representation representation) { |
| ASSERT(offset >= 0); |
| - return HObjectAccess(kBackingStore, offset, representation); |
| + return HObjectAccess(kBackingStore, offset, representation, |
| + Handle<String>::null(), false, false); |
| } |
| @@ -4322,11 +4330,12 @@ HObjectAccess HObjectAccess::ForField(Handle<Map> map, |
| // Negative property indices are in-object properties, indexed |
| // from the end of the fixed part of the object. |
| int offset = (index * kPointerSize) + map->instance_size(); |
| - return HObjectAccess(kInobject, offset, representation, name); |
| + return HObjectAccess(kInobject, offset, representation, name, false, true); |
| } else { |
| // Non-negative property indices are in the properties array. |
| int offset = (index * kPointerSize) + FixedArray::kHeaderSize; |
| - return HObjectAccess(kBackingStore, offset, representation, name); |
| + return HObjectAccess(kBackingStore, offset, representation, name, |
| + false, false); |
| } |
| } |