Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index b787f69c50cb3a79bda22b3cd27de0dcb8c5ff03..224e0c79961c975beb4a0ce071387e06a0c972b6 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -2721,10 +2721,9 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
Comment cmnt(masm_, "[ Call"); |
Expression* callee = expr->expression(); |
- VariableProxy* proxy = callee->AsVariableProxy(); |
- Property* property = callee->AsProperty(); |
+ Call::CallType call_type = expr->GetCallType(isolate()); |
- if (proxy != NULL && proxy->var()->is_possibly_eval(isolate())) { |
+ if (call_type == Call::POSSIBLY_EVAL_CALL) { |
// In a call to eval, we first call %ResolvePossiblyDirectEval to |
// resolve the function we need to call and the receiver of the |
// call. Then we call the resolved function using the given |
@@ -2763,13 +2762,15 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
// Restore context register. |
__ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
context()->DropAndPlug(1, r0); |
- } else if (proxy != NULL && proxy->var()->IsUnallocated()) { |
+ } else if (call_type == Call::GLOBAL_CALL) { |
// Push global object as receiver for the call IC. |
__ ldr(r0, GlobalObjectOperand()); |
__ push(r0); |
+ VariableProxy* proxy = callee->AsVariableProxy(); |
EmitCallWithIC(expr, proxy->name(), CONTEXTUAL); |
- } else if (proxy != NULL && proxy->var()->IsLookupSlot()) { |
+ } else if (call_type == Call::LOOKUP_SLOT_CALL) { |
// Call to a lookup slot (dynamically introduced variable). |
+ VariableProxy* proxy = callee->AsVariableProxy(); |
Label slow, done; |
{ PreservePositionScope scope(masm()->positions_recorder()); |
@@ -2806,7 +2807,8 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
// The receiver is either the global receiver or an object found |
// by LoadContextSlot. |
EmitCallWithStub(expr); |
- } else if (property != NULL) { |
+ } else if (call_type == Call::PROPERTY_CALL) { |
+ Property* property = callee->AsProperty(); |
{ PreservePositionScope scope(masm()->positions_recorder()); |
VisitForStackValue(property->obj()); |
} |
@@ -2818,6 +2820,7 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
EmitKeyedCallWithIC(expr, property->key()); |
} |
} else { |
+ ASSERT(call_type == Call::OTHER_CALL); |
// Call to an arbitrary expression not handled specially above. |
{ PreservePositionScope scope(masm()->positions_recorder()); |
VisitForStackValue(callee); |