Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: test/cctest/compiler/test-code-assembler.cc

Issue 2076953002: [turbofan] CodeAssembler is now able to generate calls of JavaScript objects. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@add-test-code-assember
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/cctest/compiler/function-tester.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/compiler/test-code-assembler.cc
diff --git a/test/cctest/compiler/test-code-assembler.cc b/test/cctest/compiler/test-code-assembler.cc
index 260ee534627aed4ade486d32d461993ad8382867..7f27a6f8f5ac61eb1f55aa45c351b10adc797562 100644
--- a/test/cctest/compiler/test-code-assembler.cc
+++ b/test/cctest/compiler/test-code-assembler.cc
@@ -124,6 +124,91 @@ TEST(SimpleTailCallRuntime2Arg) {
CHECK_EQ(16, Handle<Smi>::cast(result.ToHandleChecked())->value());
}
+namespace {
+
+Handle<JSFunction> CreateSumAllArgumentsFunction(FunctionTester& ft) {
+ const char* source =
+ "(function() {\n"
+ " var sum = 0 + this;\n"
+ " for (var i = 0; i < arguments.length; i++) {\n"
+ " sum += arguments[i];\n"
+ " }\n"
+ " return sum;\n"
+ "})";
+ return ft.NewFunction(source);
+}
+
+} // namespace
+
+TEST(SimpleCallJSFunction0Arg) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ const int kNumParams = 1;
+ CodeAssemblerTester m(isolate, kNumParams);
+ {
+ Node* function = m.Parameter(0);
+ Node* context = m.Parameter(kNumParams + 2);
+
+ Node* receiver = SmiTag(m, m.Int32Constant(42));
+
+ Callable callable = CodeFactory::Call(isolate);
+ Node* result = m.CallJS(callable, context, function, receiver);
+ m.Return(result);
+ }
+ Handle<Code> code = m.GenerateCode();
+ FunctionTester ft(code, kNumParams);
+
+ Handle<JSFunction> sum = CreateSumAllArgumentsFunction(ft);
+ MaybeHandle<Object> result = ft.Call(sum);
+ CHECK_EQ(Smi::FromInt(42), *result.ToHandleChecked());
+}
+
+TEST(SimpleCallJSFunction1Arg) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ const int kNumParams = 2;
+ CodeAssemblerTester m(isolate, kNumParams);
+ {
+ Node* function = m.Parameter(0);
+ Node* context = m.Parameter(1);
+
+ Node* receiver = SmiTag(m, m.Int32Constant(42));
+ Node* a = SmiTag(m, m.Int32Constant(13));
+
+ Callable callable = CodeFactory::Call(isolate);
+ Node* result = m.CallJS(callable, context, function, receiver, a);
+ m.Return(result);
+ }
+ Handle<Code> code = m.GenerateCode();
+ FunctionTester ft(code, kNumParams);
+
+ Handle<JSFunction> sum = CreateSumAllArgumentsFunction(ft);
+ MaybeHandle<Object> result = ft.Call(sum);
+ CHECK_EQ(Smi::FromInt(55), *result.ToHandleChecked());
+}
+
+TEST(SimpleCallJSFunction2Arg) {
+ Isolate* isolate(CcTest::InitIsolateOnce());
+ const int kNumParams = 2;
+ CodeAssemblerTester m(isolate, kNumParams);
+ {
+ Node* function = m.Parameter(0);
+ Node* context = m.Parameter(1);
+
+ Node* receiver = SmiTag(m, m.Int32Constant(42));
+ Node* a = SmiTag(m, m.Int32Constant(13));
+ Node* b = SmiTag(m, m.Int32Constant(153));
+
+ Callable callable = CodeFactory::Call(isolate);
+ Node* result = m.CallJS(callable, context, function, receiver, a, b);
+ m.Return(result);
+ }
+ Handle<Code> code = m.GenerateCode();
+ FunctionTester ft(code, kNumParams);
+
+ Handle<JSFunction> sum = CreateSumAllArgumentsFunction(ft);
+ MaybeHandle<Object> result = ft.Call(sum);
+ CHECK_EQ(Smi::FromInt(208), *result.ToHandleChecked());
+}
+
TEST(VariableMerge1) {
Isolate* isolate(CcTest::InitIsolateOnce());
VoidDescriptor descriptor(isolate);
« no previous file with comments | « test/cctest/compiler/function-tester.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698