| Index: src/codegen-arm.cc
|
| ===================================================================
|
| --- src/codegen-arm.cc (revision 1583)
|
| +++ src/codegen-arm.cc (working copy)
|
| @@ -30,6 +30,7 @@
|
| #include "bootstrapper.h"
|
| #include "codegen-inl.h"
|
| #include "debug.h"
|
| +#include "parser.h"
|
| #include "register-allocator-inl.h"
|
| #include "runtime.h"
|
| #include "scopes.h"
|
| @@ -2752,7 +2753,7 @@
|
| case ObjectLiteral::Property::CONSTANT:
|
| break;
|
| case ObjectLiteral::Property::MATERIALIZED_LITERAL:
|
| - if (property->value()->AsMaterializedLiteral()->is_simple()) break;
|
| + if (CompileTimeValue::IsCompileTimeValue(property->value())) break;
|
| // else fall through
|
| case ObjectLiteral::Property::COMPUTED: // fall through
|
| case ObjectLiteral::Property::PROTOTYPE: {
|
| @@ -2878,26 +2879,29 @@
|
| for (int i = 0; i < node->values()->length(); i++) {
|
| Expression* value = node->values()->at(i);
|
|
|
| - // If value is literal the property value is already
|
| - // set in the boilerplate object.
|
| - if (value->AsLiteral() == NULL) {
|
| - // The property must be set by generated code.
|
| - LoadAndSpill(value);
|
| - frame_->EmitPop(r0);
|
| + // If value is a literal the property value is already set in the
|
| + // boilerplate object.
|
| + if (value->AsLiteral() != NULL) continue;
|
| + // If value is a materialized literal the property value is already set
|
| + // in the boilerplate object if it is simple.
|
| + if (CompileTimeValue::IsCompileTimeValue(value)) continue;
|
|
|
| - // Fetch the object literal
|
| - __ ldr(r1, frame_->Top());
|
| - // Get the elements array.
|
| - __ ldr(r1, FieldMemOperand(r1, JSObject::kElementsOffset));
|
| + // The property must be set by generated code.
|
| + LoadAndSpill(value);
|
| + frame_->EmitPop(r0);
|
|
|
| - // Write to the indexed properties array.
|
| - int offset = i * kPointerSize + Array::kHeaderSize;
|
| - __ str(r0, FieldMemOperand(r1, offset));
|
| + // Fetch the object literal.
|
| + __ ldr(r1, frame_->Top());
|
| + // Get the elements array.
|
| + __ ldr(r1, FieldMemOperand(r1, JSObject::kElementsOffset));
|
|
|
| - // Update the write barrier for the array address.
|
| - __ mov(r3, Operand(offset));
|
| - __ RecordWrite(r1, r3, r2);
|
| - }
|
| + // Write to the indexed properties array.
|
| + int offset = i * kPointerSize + Array::kHeaderSize;
|
| + __ str(r0, FieldMemOperand(r1, offset));
|
| +
|
| + // Update the write barrier for the array address.
|
| + __ mov(r3, Operand(offset));
|
| + __ RecordWrite(r1, r3, r2);
|
| }
|
| ASSERT(frame_->height() == original_height + 1);
|
| }
|
|
|