Chromium Code Reviews| Index: src/crankshaft/hydrogen.cc |
| diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc |
| index 959e409500ab66ffe93613f83f68c7d16e3162ec..81b651d32c608c7cbc1a16354fadf57f9efe095c 100644 |
| --- a/src/crankshaft/hydrogen.cc |
| +++ b/src/crankshaft/hydrogen.cc |
| @@ -5500,6 +5500,7 @@ void HOptimizedGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
| if (info.CanAccessMonomorphic()) { |
| HValue* checked_literal = Add<HCheckMaps>(literal, map); |
| DCHECK(!info.IsAccessorConstant()); |
| + info.MarkAsInitializingStore(); |
| store = BuildMonomorphicAccess( |
| &info, literal, checked_literal, value, |
| BailoutId::None(), BailoutId::None()); |
| @@ -5741,9 +5742,8 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( |
| } |
| // This is a normal store. |
| - instr = New<HStoreNamedField>( |
| - checked_object->ActualValue(), field_access, value, |
| - transition_to_field ? INITIALIZING_STORE : STORE_TO_INITIALIZED_ENTRY); |
| + instr = New<HStoreNamedField>(checked_object->ActualValue(), field_access, |
| + value, info->StoreMode()); |
| } |
| if (transition_to_field) { |
| @@ -5754,6 +5754,17 @@ HInstruction* HOptimizedGraphBuilder::BuildStoreNamedField( |
| return instr; |
| } |
| +void HOptimizedGraphBuilder::PropertyAccessInfo::MarkAsInitializingStore() { |
| + DCHECK_EQ(STORE, access_type_); |
| + store_mode_ = INITIALIZING_STORE; |
| +} |
| + |
| +StoreFieldOrKeyedMode HOptimizedGraphBuilder::PropertyAccessInfo::StoreMode() { |
| + DCHECK_EQ(STORE, access_type_); |
| + if (IsTransition()) return INITIALIZING_STORE; |
|
Toon Verwaest
2017/01/16 11:53:31
if IsTransition() is true, store_mode_ should just
Igor Sheludko
2017/01/16 12:02:59
Done.
|
| + return store_mode_; |
| +} |
| + |
| Handle<FieldType> |
| HOptimizedGraphBuilder::PropertyAccessInfo::GetFieldTypeFromMap( |
| Handle<Map> map) const { |