| Index: src/codegen-arm.cc
|
| ===================================================================
|
| --- src/codegen-arm.cc (revision 542)
|
| +++ src/codegen-arm.cc (working copy)
|
| @@ -415,6 +415,13 @@
|
| }
|
|
|
|
|
| +void CodeGenerator::LoadGlobalReceiver(Register s) {
|
| + __ ldr(s, ContextOperand(cp, Context::GLOBAL_INDEX));
|
| + __ ldr(s, FieldMemOperand(s, GlobalObject::kGlobalReceiverOffset));
|
| + __ push(s);
|
| +}
|
| +
|
| +
|
| // TODO(1241834): Get rid of this function in favor of just using Load, now
|
| // that we have the INSIDE_TYPEOF typeof state. => Need to handle global
|
| // variables w/o reference errors elsewhere.
|
| @@ -2220,8 +2227,11 @@
|
| // Push the name of the function and the receiver onto the stack.
|
| __ mov(r0, Operand(var->name()));
|
| __ push(r0);
|
| - LoadGlobal();
|
|
|
| + // TODO(120): use JSGlobalObject for function lookup and inline cache,
|
| + // and use global proxy as 'this' for invocation.
|
| + LoadGlobalReceiver(r0);
|
| +
|
| // Load the arguments.
|
| for (int i = 0; i < args->length(); i++) Load(args->at(i));
|
|
|
| @@ -2308,7 +2318,10 @@
|
| // Load the function.
|
| Load(function);
|
| // Pass the global object as the receiver.
|
| - LoadGlobal();
|
| +
|
| + // TODO(120): use JSGlobalObject for function lookup and inline cache,
|
| + // and use global proxy as 'this' for invocation.
|
| + LoadGlobalReceiver(r0);
|
| // Call the function.
|
| CallWithArguments(args, node->position());
|
| __ push(r0);
|
| @@ -2328,7 +2341,7 @@
|
| // Compute function to call and use the global object as the
|
| // receiver.
|
| Load(node->expression());
|
| - LoadGlobal();
|
| + LoadGlobalReceiver(r0);
|
|
|
| // Push the arguments ("left-to-right") on the stack.
|
| ZoneList<Expression*>* args = node->arguments();
|
| @@ -2873,12 +2886,11 @@
|
| // inlining a null check instead of calling the (very) general
|
| // runtime routine for checking equality.
|
|
|
| - bool left_is_null =
|
| - left->AsLiteral() != NULL && left->AsLiteral()->IsNull();
|
| - bool right_is_null =
|
| - right->AsLiteral() != NULL && right->AsLiteral()->IsNull();
|
| -
|
| if (op == Token::EQ || op == Token::EQ_STRICT) {
|
| + bool left_is_null =
|
| + left->AsLiteral() != NULL && left->AsLiteral()->IsNull();
|
| + bool right_is_null =
|
| + right->AsLiteral() != NULL && right->AsLiteral()->IsNull();
|
| // The 'null' value is only equal to 'null' or 'undefined'.
|
| if (left_is_null || right_is_null) {
|
| Load(left_is_null ? right : left);
|
|
|