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

Unified Diff: runtime/vm/code_generator_test.cc

Issue 1420173006: Move resolving of natives to a late stage (during code emission). That eliminates unnecessary nativ… (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: r Created 5 years, 1 month 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 | « runtime/vm/ast.h ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_generator_test.cc
diff --git a/runtime/vm/code_generator_test.cc b/runtime/vm/code_generator_test.cc
index aac931182efef3aaf06d2dee6e4ee46e50fc83b1..2cdc6fbcc24c54ef5521f4a67a6e3301659bfeac 100644
--- a/runtime/vm/code_generator_test.cc
+++ b/runtime/vm/code_generator_test.cc
@@ -192,58 +192,6 @@ CODEGEN_TEST_GENERATE(BinaryOpCodegen, test) {
CODEGEN_TEST_RUN(BinaryOpCodegen, Double::New(2.5));
-// Tested Dart code:
-// int dec(int a, [int b = 1]) native: "TestSmiSub";
-// The native entry TestSmiSub implements dec natively.
-CODEGEN_TEST_GENERATE(NativeDecCodegen, test) {
- // A NativeBodyNode, preceded by an EnterNode and followed by a ReturnNode,
- // implements the body of a native Dart function. Let's take this native
- // function as an example: int dec(int a, int b = 1) native;
- // Since this function has an optional parameter, its prologue will copy
- // incoming parameters to locals.
- SequenceNode* node_seq = test->node_sequence();
- const int num_fixed_params = 1;
- const int num_opt_params = 1;
- const int num_params = num_fixed_params + num_opt_params;
- LocalScope* local_scope = node_seq->scope();
- local_scope->InsertParameterAt(0, NewTestLocalVariable("a"));
- local_scope->InsertParameterAt(1, NewTestLocalVariable("b"));
- ASSERT(local_scope->num_variables() == num_params);
- ZoneGrowableArray<const Instance*>* default_values =
- new ZoneGrowableArray<const Instance*>(num_opt_params);
- default_values->Add(&Smi::ZoneHandle(Smi::New(1))); // b = 1.
- test->set_default_parameter_values(default_values);
- const Function& function = test->function();
- function.set_is_native(true);
- function.set_num_fixed_parameters(num_fixed_params);
- function.SetNumOptionalParameters(num_opt_params, true);
- const String& native_name =
- String::ZoneHandle(Symbols::New("TestSmiSub"));
- NativeFunction native_function =
- reinterpret_cast<NativeFunction>(TestSmiSub);
- node_seq->Add(
- new ReturnNode(kPos,
- new NativeBodyNode(kPos,
- function,
- native_name,
- native_function,
- local_scope,
- false /* not bootstrap native */)));
-}
-
-
-// Tested Dart code:
-// return dec(5);
-CODEGEN_TEST2_GENERATE(StaticDecCallCodegen, function, test) {
- SequenceNode* node_seq = test->node_sequence();
- ArgumentListNode* arguments = new ArgumentListNode(kPos);
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(5))));
- node_seq->Add(new ReturnNode(kPos,
- new StaticCallNode(kPos, function, arguments)));
-}
-CODEGEN_TEST2_RUN(StaticDecCallCodegen, NativeDecCodegen, Smi::New(4))
-
-
CODEGEN_TEST_GENERATE(SmiUnaryOpCodegen, test) {
SequenceNode* node_seq = test->node_sequence();
LiteralNode* a = new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(12)));
@@ -368,159 +316,6 @@ CODEGEN_TEST_GENERATE(InstanceCallCodegen, test) {
CODEGEN_TEST_RUN(InstanceCallCodegen, Smi::New(42))
-// Tested Dart code:
-// int sum(int a, int b,
-// [int c = 10, int d = 21, int e = -32]) native: "TestSmiSum";
-// The native entry TestSmiSum implements sum natively.
-CODEGEN_TEST_GENERATE(NativeSumCodegen, test) {
- SequenceNode* node_seq = test->node_sequence();
- const int num_fixed_params = 2;
- const int num_opt_params = 3;
- const int num_params = num_fixed_params + num_opt_params;
- LocalScope* local_scope = node_seq->scope();
- local_scope->InsertParameterAt(0, NewTestLocalVariable("a"));
- local_scope->InsertParameterAt(1, NewTestLocalVariable("b"));
- local_scope->InsertParameterAt(2, NewTestLocalVariable("c"));
- local_scope->InsertParameterAt(3, NewTestLocalVariable("d"));
- local_scope->InsertParameterAt(4, NewTestLocalVariable("e"));
- ASSERT(local_scope->num_variables() == num_params);
- ZoneGrowableArray<const Instance*>* default_values =
- new ZoneGrowableArray<const Instance*>(num_opt_params);
- default_values->Add(&Smi::ZoneHandle(Smi::New(10)));
- default_values->Add(&Smi::ZoneHandle(Smi::New(21)));
- default_values->Add(&Smi::ZoneHandle(Smi::New(-32)));
- test->set_default_parameter_values(default_values);
- const Function& function = test->function();
- function.set_is_native(true);
- function.set_num_fixed_parameters(num_fixed_params);
- function.SetNumOptionalParameters(num_opt_params, true);
- function.set_parameter_types(Array::Handle(Array::New(num_params)));
- function.set_parameter_names(Array::Handle(Array::New(num_params)));
- const Type& param_type = Type::Handle(Type::DynamicType());
- for (int i = 0; i < num_params; i++) {
- function.SetParameterTypeAt(i, param_type);
- }
- const String& native_name =
- String::ZoneHandle(Symbols::New("TestSmiSum"));
- NativeFunction native_function =
- reinterpret_cast<NativeFunction>(TestSmiSum);
- node_seq->Add(
- new ReturnNode(kPos,
- new NativeBodyNode(kPos,
- function,
- native_name,
- native_function,
- local_scope,
- false /* Not bootstrap native */)));
-}
-
-
-// Tested Dart code, calling function sum declared above:
-// return sum(1, 3);
-// Optional arguments are not passed and hence are set to their default values.
-CODEGEN_TEST2_GENERATE(StaticSumCallNoOptCodegen, function, test) {
- SequenceNode* node_seq = test->node_sequence();
- ArgumentListNode* arguments = new ArgumentListNode(kPos);
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3))));
- node_seq->Add(new ReturnNode(kPos,
- new StaticCallNode(kPos, function, arguments)));
-}
-CODEGEN_TEST2_RUN(StaticSumCallNoOptCodegen,
- NativeSumCodegen,
- Smi::New(1 + 3 + 10 + 21 - 32))
-
-
-// Tested Dart code, calling function sum declared above:
-// return sum(1, 3, 5);
-// Only one out of three optional arguments is passed in; the second and third
-// arguments are hence set to their default values.
-CODEGEN_TEST2_GENERATE(StaticSumCallOneOptCodegen, function, test) {
- SequenceNode* node_seq = test->node_sequence();
- ArgumentListNode* arguments = new ArgumentListNode(kPos);
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(5))));
- node_seq->Add(new ReturnNode(kPos,
- new StaticCallNode(kPos, function, arguments)));
-}
-CODEGEN_TEST2_RUN(StaticSumCallOneOptCodegen,
- NativeSumCodegen,
- Smi::New(1 + 3 + 5 + 21 - 32))
-
-
-// Tested Dart code, calling function sum declared above:
-// return sum(0, 1, 1, 2, 3);
-// Optional arguments are passed in.
-CODEGEN_TEST2_GENERATE(StaticSumCallTenFiboCodegen, function, test) {
- SequenceNode* node_seq = test->node_sequence();
- ArgumentListNode* arguments = new ArgumentListNode(kPos);
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(0))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(2))));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3))));
- node_seq->Add(new ReturnNode(kPos,
- new StaticCallNode(kPos, function, arguments)));
-}
-CODEGEN_TEST2_RUN(
- StaticSumCallTenFiboCodegen,
- NativeSumCodegen,
- Smi::New(0 + 1 + 1 + 2 + 3))
-
-
-// Tested Dart code:
-// int sum(a, b, c) native: "TestNonNullSmiSum";
-// The native entry TestNonNullSmiSum implements sum natively.
-CODEGEN_TEST_GENERATE(NativeNonNullSumCodegen, test) {
- SequenceNode* node_seq = test->node_sequence();
- const int num_params = 3;
- LocalScope* local_scope = node_seq->scope();
- local_scope->InsertParameterAt(0, NewTestLocalVariable("a"));
- local_scope->InsertParameterAt(1, NewTestLocalVariable("b"));
- local_scope->InsertParameterAt(2, NewTestLocalVariable("c"));
- ASSERT(local_scope->num_variables() == num_params);
- const Function& function = test->function();
- function.set_is_native(true);
- function.set_num_fixed_parameters(num_params);
- ASSERT(!function.HasOptionalParameters());
- function.set_parameter_types(Array::Handle(Array::New(num_params)));
- function.set_parameter_names(Array::Handle(Array::New(num_params)));
- const Type& param_type = Type::Handle(Type::DynamicType());
- for (int i = 0; i < num_params; i++) {
- function.SetParameterTypeAt(i, param_type);
- }
- const String& native_name =
- String::ZoneHandle(Symbols::New("TestNonNullSmiSum"));
- NativeFunction native_function =
- reinterpret_cast<NativeFunction>(TestNonNullSmiSum);
- node_seq->Add(
- new ReturnNode(kPos,
- new NativeBodyNode(kPos,
- function,
- native_name,
- native_function,
- local_scope,
- false /* Not bootstrap native */)));
-}
-
-
-// Tested Dart code, calling function sum declared above:
-// return sum(1, null, 3);
-CODEGEN_TEST2_GENERATE(StaticNonNullSumCallCodegen, function, test) {
- SequenceNode* node_seq = test->node_sequence();
- ArgumentListNode* arguments = new ArgumentListNode(kPos);
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(1))));
- arguments->Add(new LiteralNode(kPos, Instance::ZoneHandle()));
- arguments->Add(new LiteralNode(kPos, Smi::ZoneHandle(Smi::New(3))));
- node_seq->Add(new ReturnNode(kPos,
- new StaticCallNode(kPos, function, arguments)));
-}
-CODEGEN_TEST2_RUN(StaticNonNullSumCallCodegen,
- NativeNonNullSumCodegen,
- Smi::New(1 + 3))
-
-
// Test allocation of dart objects.
CODEGEN_TEST_GENERATE(AllocateNewObjectCodegen, test) {
const char* kScriptChars =
« no previous file with comments | « runtime/vm/ast.h ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698