Chromium Code Reviews| Index: src/interpreter/bytecode-generator.cc |
| diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc |
| index 6fbb46e722bc3c67896e1e2a9d059747d830f4d8..447765fac288c6f12bb03aabee3f56dc58bdc693 100644 |
| --- a/src/interpreter/bytecode-generator.cc |
| +++ b/src/interpreter/bytecode-generator.cc |
| @@ -714,7 +714,28 @@ void BytecodeGenerator::VisitCall(Call* expr) { |
| } |
| -void BytecodeGenerator::VisitCallNew(CallNew* expr) { UNIMPLEMENTED(); } |
| +void BytecodeGenerator::VisitCallNew(CallNew* expr) { |
| + TemporaryRegisterScope temporary_register_scope(builder()); |
| + Register constructor = temporary_register_scope.NewRegister(); |
| + Visit(expr->expression()); |
| + builder()->StoreAccumulatorInRegister(constructor); |
| + |
| + ZoneList<Expression*>* args = expr->arguments(); |
| + if (args->length() > 0) { |
| + Register first_arg = temporary_register_scope.NewRegister(); |
| + |
| + for (int i = 0; i < args->length(); ++i) { |
| + Visit(args->at(i)); |
| + Register arg = |
| + (i == 0) ? first_arg : temporary_register_scope.NewRegister(); |
| + DCHECK_EQ(arg.index() - i, first_arg.index()); |
| + builder()->StoreAccumulatorInRegister(arg); |
| + } |
|
rmcilroy
2015/10/13 14:07:30
nit - would it be possible to pull out this code i
oth
2015/10/14 08:40:09
Done.
|
| + builder()->New(constructor, first_arg, args->length()); |
| + } else { |
| + builder()->New(constructor, constructor, 0); |
| + } |
| +} |
| void BytecodeGenerator::VisitCallRuntime(CallRuntime* expr) { |