| Index: src/arm/fast-codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/fast-codegen-arm.cc (revision 3430)
|
| +++ src/arm/fast-codegen-arm.cc (working copy)
|
| @@ -657,32 +657,15 @@
|
|
|
| void FastCodeGenerator::VisitObjectLiteral(ObjectLiteral* expr) {
|
| Comment cmnt(masm_, "[ ObjectLiteral");
|
| - Label boilerplate_exists;
|
| __ ldr(r2, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| - // r2 = literal array (0).
|
| __ ldr(r2, FieldMemOperand(r2, JSFunction::kLiteralsOffset));
|
| - int literal_offset =
|
| - FixedArray::kHeaderSize + expr->literal_index() * kPointerSize;
|
| - __ ldr(r0, FieldMemOperand(r2, literal_offset));
|
| - // Check whether we need to materialize the object literal boilerplate.
|
| - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
|
| - __ cmp(r0, Operand(ip));
|
| - __ b(ne, &boilerplate_exists);
|
| - // Create boilerplate if it does not exist.
|
| - // r1 = literal index (1).
|
| __ mov(r1, Operand(Smi::FromInt(expr->literal_index())));
|
| - // r0 = constant properties (2).
|
| __ mov(r0, Operand(expr->constant_properties()));
|
| __ stm(db_w, sp, r2.bit() | r1.bit() | r0.bit());
|
| - __ CallRuntime(Runtime::kCreateObjectLiteralBoilerplate, 3);
|
| - __ bind(&boilerplate_exists);
|
| - // r0 contains boilerplate.
|
| - // Clone boilerplate.
|
| - __ push(r0);
|
| if (expr->depth() > 1) {
|
| - __ CallRuntime(Runtime::kCloneLiteralBoilerplate, 1);
|
| + __ CallRuntime(Runtime::kCreateObjectLiteral, 3);
|
| } else {
|
| - __ CallRuntime(Runtime::kCloneShallowLiteralBoilerplate, 1);
|
| + __ CallRuntime(Runtime::kCreateObjectLiteralShallow, 3);
|
| }
|
|
|
| // If result_saved == true: The result is saved on top of the
|
| @@ -783,32 +766,15 @@
|
|
|
| void FastCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
|
| Comment cmnt(masm_, "[ ArrayLiteral");
|
| - Label make_clone;
|
| -
|
| - // Fetch the function's literals array.
|
| __ ldr(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| __ ldr(r3, FieldMemOperand(r3, JSFunction::kLiteralsOffset));
|
| - // Check if the literal's boilerplate has been instantiated.
|
| - int offset =
|
| - FixedArray::kHeaderSize + (expr->literal_index() * kPointerSize);
|
| - __ ldr(r0, FieldMemOperand(r3, offset));
|
| - __ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
|
| - __ cmp(r0, ip);
|
| - __ b(&make_clone, ne);
|
| -
|
| - // Instantiate the boilerplate.
|
| __ mov(r2, Operand(Smi::FromInt(expr->literal_index())));
|
| __ mov(r1, Operand(expr->literals()));
|
| __ stm(db_w, sp, r3.bit() | r2.bit() | r1.bit());
|
| - __ CallRuntime(Runtime::kCreateArrayLiteralBoilerplate, 3);
|
| -
|
| - __ bind(&make_clone);
|
| - // Clone the boilerplate.
|
| - __ push(r0);
|
| if (expr->depth() > 1) {
|
| - __ CallRuntime(Runtime::kCloneLiteralBoilerplate, 1);
|
| + __ CallRuntime(Runtime::kCreateArrayLiteral, 3);
|
| } else {
|
| - __ CallRuntime(Runtime::kCloneShallowLiteralBoilerplate, 1);
|
| + __ CallRuntime(Runtime::kCreateArrayLiteralShallow, 3);
|
| }
|
|
|
| bool result_saved = false; // Is the result saved to the stack?
|
|
|