Index: src/arm/fast-codegen-arm.cc |
=================================================================== |
--- src/arm/fast-codegen-arm.cc (revision 3642) |
+++ src/arm/fast-codegen-arm.cc (working copy) |
@@ -662,13 +662,13 @@ |
__ mov(r0, Operand(boilerplate)); |
__ stm(db_w, sp, cp.bit() | r0.bit()); |
__ CallRuntime(Runtime::kNewClosure, 2); |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |
void FastCodeGenerator::VisitVariableProxy(VariableProxy* expr) { |
Comment cmnt(masm_, "[ VariableProxy"); |
- EmitVariableLoad(expr->var(), expr->context()); |
+ EmitVariableLoad(expr->var(), context_); |
} |
@@ -768,7 +768,7 @@ |
__ stm(db_w, sp, r4.bit() | r3.bit() | r2.bit() | r1.bit()); |
__ CallRuntime(Runtime::kMaterializeRegExpLiteral, 4); |
__ bind(&done); |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |
@@ -840,9 +840,9 @@ |
} |
if (result_saved) { |
- ApplyTOS(expr->context()); |
+ ApplyTOS(context_); |
} else { |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |
} |
@@ -893,9 +893,9 @@ |
} |
if (result_saved) { |
- ApplyTOS(expr->context()); |
+ ApplyTOS(context_); |
} else { |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |
} |
@@ -1007,7 +1007,7 @@ |
__ pop(r0); |
} |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} |
@@ -1042,7 +1042,7 @@ |
} |
// Receiver and key are still on stack. |
- DropAndApply(2, expr->context(), r0); |
+ DropAndApply(2, context_, r0); |
} |
@@ -1056,12 +1056,12 @@ |
if (key->IsPropertyName()) { |
EmitNamedPropertyLoad(expr); |
// Drop receiver left on the stack by IC. |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} else { |
VisitForValue(expr->key(), kStack); |
EmitKeyedPropertyLoad(expr); |
// Drop key and receiver left on the stack by IC. |
- DropAndApply(2, expr->context(), r0); |
+ DropAndApply(2, context_, r0); |
} |
} |
@@ -1083,7 +1083,7 @@ |
// Restore context register. |
__ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
// Discard the function left on TOS. |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} |
@@ -1101,7 +1101,7 @@ |
// Restore context register. |
__ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
// Discard the function left on TOS. |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} |
@@ -1207,7 +1207,7 @@ |
__ Call(construct_builtin, RelocInfo::CONSTRUCT_CALL); |
// Replace function on TOS with result in r0, or pop it. |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} |
@@ -1237,11 +1237,11 @@ |
// Restore context register. |
__ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
// Discard the function left on TOS. |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} else { |
// Call the C runtime function. |
__ CallRuntime(expr->function(), arg_count); |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |
} |
@@ -1250,9 +1250,8 @@ |
switch (expr->op()) { |
case Token::VOID: { |
Comment cmnt(masm_, "[ UnaryOperation (VOID)"); |
- ASSERT_EQ(Expression::kEffect, expr->expression()->context()); |
- Visit(expr->expression()); |
- switch (expr->context()) { |
+ VisitForEffect(expr->expression()); |
+ switch (context_) { |
case Expression::kUninitialized: |
UNREACHABLE(); |
break; |
@@ -1289,14 +1288,12 @@ |
case Token::NOT: { |
Comment cmnt(masm_, "[ UnaryOperation (NOT)"); |
- ASSERT_EQ(Expression::kTest, expr->expression()->context()); |
- |
Label materialize_true, materialize_false, done; |
// Initially assume a pure test context. Notice that the labels are |
// swapped. |
Label* if_true = false_label_; |
Label* if_false = true_label_; |
- switch (expr->context()) { |
+ switch (context_) { |
case Expression::kUninitialized: |
UNREACHABLE(); |
break; |
@@ -1318,14 +1315,12 @@ |
break; |
} |
VisitForControl(expr->expression(), if_true, if_false); |
- Apply(expr->context(), if_false, if_true); // Labels swapped. |
+ Apply(context_, if_false, if_true); // Labels swapped. |
break; |
} |
case Token::TYPEOF: { |
Comment cmnt(masm_, "[ UnaryOperation (TYPEOF)"); |
- ASSERT_EQ(Expression::kValue, expr->expression()->context()); |
- |
VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
if (proxy != NULL && |
!proxy->var()->is_this() && |
@@ -1352,7 +1347,7 @@ |
} |
__ CallRuntime(Runtime::kTypeof, 1); |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
break; |
} |
@@ -1373,9 +1368,8 @@ |
// In case of a property we use the uninitialized expression context |
// of the key to detect a named property. |
if (prop != NULL) { |
- assign_type = (prop->key()->context() == Expression::kUninitialized) |
- ? NAMED_PROPERTY |
- : KEYED_PROPERTY; |
+ assign_type = |
+ (prop->key()->IsPropertyName()) ? NAMED_PROPERTY : KEYED_PROPERTY; |
} |
// Evaluate expression and get value. |
@@ -1388,8 +1382,7 @@ |
location_ = saved_location; |
} else { |
// Reserve space for result of postfix operation. |
- if (expr->is_postfix() && expr->context() != Expression::kEffect) { |
- ASSERT(expr->context() != Expression::kUninitialized); |
+ if (expr->is_postfix() && context_ != Expression::kEffect) { |
__ mov(ip, Operand(Smi::FromInt(0))); |
__ push(ip); |
} |
@@ -1408,7 +1401,7 @@ |
// Save result for postfix expressions. |
if (expr->is_postfix()) { |
- switch (expr->context()) { |
+ switch (context_) { |
case Expression::kUninitialized: |
UNREACHABLE(); |
case Expression::kEffect: |
@@ -1451,12 +1444,12 @@ |
Expression::kEffect); |
// For all contexts except kEffect: We have the result on |
// top of the stack. |
- if (expr->context() != Expression::kEffect) { |
- ApplyTOS(expr->context()); |
+ if (context_ != Expression::kEffect) { |
+ ApplyTOS(context_); |
} |
} else { |
EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), |
- expr->context()); |
+ context_); |
} |
break; |
case NAMED_PROPERTY: { |
@@ -1465,11 +1458,11 @@ |
__ Call(ic, RelocInfo::CODE_TARGET); |
if (expr->is_postfix()) { |
__ Drop(1); // Result is on the stack under the receiver. |
- if (expr->context() != Expression::kEffect) { |
- ApplyTOS(expr->context()); |
+ if (context_ != Expression::kEffect) { |
+ ApplyTOS(context_); |
} |
} else { |
- DropAndApply(1, expr->context(), r0); |
+ DropAndApply(1, context_, r0); |
} |
break; |
} |
@@ -1478,11 +1471,11 @@ |
__ Call(ic, RelocInfo::CODE_TARGET); |
if (expr->is_postfix()) { |
__ Drop(2); // Result is on the stack under the key and the receiver. |
- if (expr->context() != Expression::kEffect) { |
- ApplyTOS(expr->context()); |
+ if (context_ != Expression::kEffect) { |
+ ApplyTOS(context_); |
} |
} else { |
- DropAndApply(2, expr->context(), r0); |
+ DropAndApply(2, context_, r0); |
} |
break; |
} |
@@ -1494,9 +1487,7 @@ |
Comment cmnt(masm_, "[ BinaryOperation"); |
switch (expr->op()) { |
case Token::COMMA: |
- ASSERT_EQ(Expression::kEffect, expr->left()->context()); |
- ASSERT_EQ(expr->context(), expr->right()->context()); |
- Visit(expr->left()); |
+ VisitForEffect(expr->left()); |
Visit(expr->right()); |
break; |
@@ -1518,7 +1509,7 @@ |
case Token::SAR: |
VisitForValue(expr->left(), kStack); |
VisitForValue(expr->right(), kAccumulator); |
- EmitBinaryOp(expr->op(), expr->context()); |
+ EmitBinaryOp(expr->op(), context_); |
break; |
default: |
@@ -1536,7 +1527,7 @@ |
// Initially assume we are in a test context. |
Label* if_true = true_label_; |
Label* if_false = false_label_; |
- switch (expr->context()) { |
+ switch (context_) { |
case Expression::kUninitialized: |
UNREACHABLE(); |
break; |
@@ -1638,13 +1629,13 @@ |
// Convert the result of the comparison into one expected for this |
// expression's context. |
- Apply(expr->context(), if_true, if_false); |
+ Apply(context_, if_true, if_false); |
} |
void FastCodeGenerator::VisitThisFunction(ThisFunction* expr) { |
__ ldr(r0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
- Apply(expr->context(), r0); |
+ Apply(context_, r0); |
} |