Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 46d91a05f131349428b2cafca81673ab3c4e142d..3070806a3998a598bd63d98244dde493b8dcb3a6 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -1658,50 +1658,42 @@ void FullCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) { |
__ Push(rax); // Save result on the stack |
result_saved = true; |
} |
- switch (property->kind()) { |
- case ObjectLiteral::Property::CONSTANT: |
- UNREACHABLE(); |
- case ObjectLiteral::Property::MATERIALIZED_LITERAL: |
- ASSERT(!CompileTimeValue::IsCompileTimeValue(value)); |
- // Fall through. |
- case ObjectLiteral::Property::COMPUTED: |
- if (key->value()->IsInternalizedString()) { |
- if (property->emit_store()) { |
+ if (!property->emit_store()) { |
+ VisitForEffect(value); |
+ } else { |
+ switch (property->kind()) { |
+ case ObjectLiteral::Property::CONSTANT: |
+ UNREACHABLE(); |
+ case ObjectLiteral::Property::MATERIALIZED_LITERAL: |
+ ASSERT(!CompileTimeValue::IsCompileTimeValue(value)); |
+ // Fall through. |
+ case ObjectLiteral::Property::COMPUTED: |
+ if (key->value()->IsInternalizedString()) { |
VisitForAccumulatorValue(value); |
__ Move(rcx, key->value()); |
__ movp(rdx, Operand(rsp, 0)); |
CallStoreIC(key->LiteralFeedbackId()); |
PrepareForBailoutForId(key->id(), NO_REGISTERS); |
} else { |
- VisitForEffect(value); |
+ __ Push(Operand(rsp, 0)); // Duplicate receiver. |
+ VisitForStackValue(key); |
+ VisitForStackValue(value); |
+ __ Push(Smi::FromInt(NONE)); // PropertyAttributes |
+ __ CallRuntime(Runtime::kSetProperty, 4); |
} |
break; |
- } |
- __ Push(Operand(rsp, 0)); // Duplicate receiver. |
- VisitForStackValue(key); |
- VisitForStackValue(value); |
- if (property->emit_store()) { |
- __ Push(Smi::FromInt(NONE)); // PropertyAttributes |
- __ CallRuntime(Runtime::kSetProperty, 4); |
- } else { |
- __ Drop(3); |
- } |
- break; |
- case ObjectLiteral::Property::PROTOTYPE: |
- __ Push(Operand(rsp, 0)); // Duplicate receiver. |
- VisitForStackValue(value); |
- if (property->emit_store()) { |
+ case ObjectLiteral::Property::PROTOTYPE: |
+ __ Push(Operand(rsp, 0)); // Duplicate receiver. |
+ VisitForStackValue(value); |
__ CallRuntime(Runtime::kSetPrototype, 2); |
- } else { |
- __ Drop(2); |
- } |
- break; |
- case ObjectLiteral::Property::GETTER: |
- accessor_table.lookup(key)->second->getter = value; |
- break; |
- case ObjectLiteral::Property::SETTER: |
- accessor_table.lookup(key)->second->setter = value; |
- break; |
+ break; |
+ case ObjectLiteral::Property::GETTER: |
+ accessor_table.lookup(key)->second->getter = value; |
+ break; |
+ case ObjectLiteral::Property::SETTER: |
+ accessor_table.lookup(key)->second->setter = value; |
+ break; |
+ } |
} |
} |