Index: src/x64/full-codegen-x64.cc |
=================================================================== |
--- src/x64/full-codegen-x64.cc (revision 7187) |
+++ src/x64/full-codegen-x64.cc (working copy) |
@@ -1558,27 +1558,26 @@ |
} |
} |
+ // For compound assignments we need another deoptimization point after the |
+ // variable/property load. |
if (expr->is_compound()) { |
{ AccumulatorValueContext context(this); |
switch (assign_type) { |
case VARIABLE: |
EmitVariableLoad(expr->target()->AsVariableProxy()->var()); |
+ PrepareForBailout(expr->target(), TOS_REG); |
break; |
case NAMED_PROPERTY: |
EmitNamedPropertyLoad(property); |
+ PrepareForBailoutForId(expr->CompoundLoadId(), TOS_REG); |
break; |
case KEYED_PROPERTY: |
EmitKeyedPropertyLoad(property); |
+ PrepareForBailoutForId(expr->CompoundLoadId(), TOS_REG); |
break; |
} |
} |
- // For property compound assignments we need another deoptimization |
- // point after the property load. |
- if (property != NULL) { |
- PrepareForBailoutForId(expr->CompoundLoadId(), TOS_REG); |
- } |
- |
Token::Value op = expr->binary_op(); |
__ push(rax); // Left operand goes on the stack. |
VisitForAccumulatorValue(expr->value()); |
@@ -3422,6 +3421,7 @@ |
ASSERT(expr->expression()->AsVariableProxy()->var() != NULL); |
AccumulatorValueContext context(this); |
EmitVariableLoad(expr->expression()->AsVariableProxy()->var()); |
+ PrepareForBailout(expr->expression(), TOS_REG); |
} else { |
// Reserve space for result of postfix operation. |
if (expr->is_postfix() && !context()->IsEffect()) { |