Index: src/x64/full-codegen-x64.cc |
=================================================================== |
--- src/x64/full-codegen-x64.cc (revision 7218) |
+++ src/x64/full-codegen-x64.cc (working copy) |
@@ -1558,26 +1558,27 @@ |
} |
} |
- // 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()); |
@@ -3449,11 +3450,7 @@ |
// We need a second deoptimization point after loading the value |
// in case evaluating the property load my have a side effect. |
- if (assign_type == VARIABLE) { |
- PrepareForBailout(expr->expression(), TOS_REG); |
- } else { |
- PrepareForBailout(expr->increment(), TOS_REG); |
- } |
+ PrepareForBailout(expr->increment(), TOS_REG); |
// Call ToNumber only if operand is not a smi. |
NearLabel no_conversion; |