Index: src/ia32/full-codegen-ia32.cc |
diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc |
index 14e3df61d10a867966d0f69c945263a4fb8f73bb..4422e4eeec68192539da7af069c5733b69ba3360 100644 |
--- a/src/ia32/full-codegen-ia32.cc |
+++ b/src/ia32/full-codegen-ia32.cc |
@@ -2673,10 +2673,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 arguments. |
@@ -2711,12 +2710,14 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
__ mov(esi, Operand(ebp, StandardFrameConstants::kContextOffset)); |
context()->DropAndPlug(1, eax); |
- } else if (proxy != NULL && proxy->var()->IsUnallocated()) { |
+ } else if (call_type == Call::GLOBAL_CALL) { |
// Push global object as receiver for the call IC. |
__ push(GlobalObjectOperand()); |
+ 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()); |
// Generate code for loading from variables potentially shadowed by |
@@ -2750,7 +2751,8 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
// 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()); |
} |
@@ -2763,6 +2765,7 @@ void FullCodeGenerator::VisitCall(Call* expr) { |
} |
} else { |
+ ASSERT(call_type == Call::OTHER_CALL); |
// Call to an arbitrary expression not handled specially above. |
{ PreservePositionScope scope(masm()->positions_recorder()); |
VisitForStackValue(callee); |