diff options
Diffstat (limited to 'deps/v8/src/x64/full-codegen-x64.cc')
-rw-r--r-- | deps/v8/src/x64/full-codegen-x64.cc | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/deps/v8/src/x64/full-codegen-x64.cc b/deps/v8/src/x64/full-codegen-x64.cc index 355cf91662..574688c14d 100644 --- a/deps/v8/src/x64/full-codegen-x64.cc +++ b/deps/v8/src/x64/full-codegen-x64.cc @@ -839,9 +839,7 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { __ bind(&update_each); __ movq(result_register(), rbx); // Perform the assignment as if via '='. - { EffectContext context(this); - EmitAssignment(stmt->each(), stmt->AssignmentId()); - } + EmitAssignment(stmt->each()); // Generate code for the body of the loop. Visit(stmt->body()); @@ -1523,7 +1521,7 @@ void FullCodeGenerator::EmitBinaryOp(Token::Value op, } -void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_id) { +void FullCodeGenerator::EmitAssignment(Expression* expr) { // Invalid left-hand sides are rewritten to have a 'throw // ReferenceError' on the left-hand side. if (!expr->IsValidLeftHandSide()) { @@ -1571,7 +1569,6 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_id) { break; } } - context()->Plug(rax); } @@ -1644,6 +1641,8 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var, } __ bind(&done); } + + context()->Plug(rax); } @@ -1680,9 +1679,10 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { __ push(Operand(rsp, kPointerSize)); // Receiver is under value. __ CallRuntime(Runtime::kToFastProperties, 1); __ pop(rax); - __ Drop(1); + context()->DropAndPlug(1, rax); + } else { + context()->Plug(rax); } - context()->Plug(rax); } @@ -3127,7 +3127,6 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { { EffectContext context(this); EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), Token::ASSIGN); - context.Plug(rax); } // For all contexts except kEffect: We have the result on // top of the stack. @@ -3138,7 +3137,6 @@ void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { // Perform the assignment as if via '='. EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), Token::ASSIGN); - context()->Plug(rax); } break; case NAMED_PROPERTY: { |