| 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);
|
| + }
|
| + builder()->New(constructor, first_arg, args->length());
|
| + } else {
|
| + builder()->New(constructor, constructor, 0);
|
| + }
|
| +}
|
|
|
|
|
| void BytecodeGenerator::VisitCallRuntime(CallRuntime* expr) {
|
|
|