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) { |