Index: src/interpreter/bytecode-generator.cc |
diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc |
index e9c4e7c958d5a1a03aceb5a7ba19095baa9f1596..05b7010ce70fb7a7aba66d7f490eb93fb5e54014 100644 |
--- a/src/interpreter/bytecode-generator.cc |
+++ b/src/interpreter/bytecode-generator.cc |
@@ -2582,30 +2582,20 @@ void BytecodeGenerator::VisitCallSuper(Call* expr) { |
builder()->GetSuperConstructor(constructor); |
ZoneList<Expression*>* args = expr->arguments(); |
+ RegisterList args_regs = register_allocator()->NewGrowableRegisterList(); |
+ VisitArguments(args, &args_regs); |
+ // The new target is loaded into the accumulator from the |
+ // {new.target} variable. |
+ VisitForAccumulatorValue(super->new_target_var()); |
+ builder()->SetExpressionPosition(expr); |
// When a super call contains a spread, a CallSuper AST node is only created |
// if there is exactly one spread, and it is the last argument. |
if (!args->is_empty() && args->last()->IsSpread()) { |
- RegisterList args_regs = register_allocator()->NewGrowableRegisterList(); |
- Register constructor_arg = |
- register_allocator()->GrowRegisterList(&args_regs); |
- builder()->MoveRegister(constructor, constructor_arg); |
- // Reserve argument reg for new.target in correct place for runtime call. |
- // TODO(petermarshall): Remove this when changing bytecode to use the new |
- // stub. |
- Register new_target = register_allocator()->GrowRegisterList(&args_regs); |
- VisitArguments(args, &args_regs); |
- VisitForRegisterValue(super->new_target_var(), new_target); |
- builder()->NewWithSpread(args_regs); |
+ // TODO(petermarshall): Collect type on the feedback slot. |
+ builder()->NewWithSpread(constructor, args_regs); |
} else { |
- RegisterList args_regs = register_allocator()->NewGrowableRegisterList(); |
- VisitArguments(args, &args_regs); |
- // The new target is loaded into the accumulator from the |
- // {new.target} variable. |
- VisitForAccumulatorValue(super->new_target_var()); |
- |
// Call construct. |
- builder()->SetExpressionPosition(expr); |
// TODO(turbofan): For now we do gather feedback on super constructor |
// calls, utilizing the existing machinery to inline the actual call |
// target and the JSCreate for the implicit receiver allocation. This |