OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/assembler.h" | 5 #include "vm/assembler.h" |
6 #include "vm/bigint_operations.h" | 6 #include "vm/bigint_operations.h" |
7 #include "vm/class_finalizer.h" | 7 #include "vm/class_finalizer.h" |
8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
10 #include "vm/debugger.h" | 10 #include "vm/debugger.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 // parsed. | 57 // parsed. |
58 ClassFinalizer::FinalizeTypesInClass(cls); | 58 ClassFinalizer::FinalizeTypesInClass(cls); |
59 | 59 |
60 // Create and populate the function arrays. | 60 // Create and populate the function arrays. |
61 const Array& functions = Array::Handle(Array::New(6)); | 61 const Array& functions = Array::Handle(Array::New(6)); |
62 Function& function = Function::Handle(); | 62 Function& function = Function::Handle(); |
63 String& function_name = String::Handle(); | 63 String& function_name = String::Handle(); |
64 function_name = Symbols::New("foo"); | 64 function_name = Symbols::New("foo"); |
65 function = Function::New( | 65 function = Function::New( |
66 function_name, RawFunction::kRegularFunction, | 66 function_name, RawFunction::kRegularFunction, |
67 false, false, false, false, cls, 0); | 67 false, false, false, false, false, cls, 0); |
68 functions.SetAt(0, function); | 68 functions.SetAt(0, function); |
69 function_name = Symbols::New("bar"); | 69 function_name = Symbols::New("bar"); |
70 function = Function::New( | 70 function = Function::New( |
71 function_name, RawFunction::kRegularFunction, | 71 function_name, RawFunction::kRegularFunction, |
72 false, false, false, false, cls, 0); | 72 false, false, false, false, false, cls, 0); |
73 | 73 |
74 const int kNumFixedParameters = 2; | 74 const int kNumFixedParameters = 2; |
75 const int kNumOptionalParameters = 3; | 75 const int kNumOptionalParameters = 3; |
76 const bool kAreOptionalPositional = true; | 76 const bool kAreOptionalPositional = true; |
77 function.set_num_fixed_parameters(kNumFixedParameters); | 77 function.set_num_fixed_parameters(kNumFixedParameters); |
78 function.SetNumOptionalParameters(kNumOptionalParameters, | 78 function.SetNumOptionalParameters(kNumOptionalParameters, |
79 kAreOptionalPositional); | 79 kAreOptionalPositional); |
80 functions.SetAt(1, function); | 80 functions.SetAt(1, function); |
81 | 81 |
82 function_name = Symbols::New("baz"); | 82 function_name = Symbols::New("baz"); |
83 function = Function::New( | 83 function = Function::New( |
84 function_name, RawFunction::kRegularFunction, | 84 function_name, RawFunction::kRegularFunction, |
85 false, false, false, false, cls, 0); | 85 false, false, false, false, false, cls, 0); |
86 functions.SetAt(2, function); | 86 functions.SetAt(2, function); |
87 | 87 |
88 function_name = Symbols::New("Foo"); | 88 function_name = Symbols::New("Foo"); |
89 function = Function::New( | 89 function = Function::New( |
90 function_name, RawFunction::kRegularFunction, | 90 function_name, RawFunction::kRegularFunction, |
91 true, false, false, false, cls, 0); | 91 true, false, false, false, false, cls, 0); |
92 | 92 |
93 functions.SetAt(3, function); | 93 functions.SetAt(3, function); |
94 function_name = Symbols::New("Bar"); | 94 function_name = Symbols::New("Bar"); |
95 function = Function::New( | 95 function = Function::New( |
96 function_name, RawFunction::kRegularFunction, | 96 function_name, RawFunction::kRegularFunction, |
97 true, false, false, false, cls, 0); | 97 true, false, false, false, false, cls, 0); |
98 functions.SetAt(4, function); | 98 functions.SetAt(4, function); |
99 function_name = Symbols::New("BaZ"); | 99 function_name = Symbols::New("BaZ"); |
100 function = Function::New( | 100 function = Function::New( |
101 function_name, RawFunction::kRegularFunction, | 101 function_name, RawFunction::kRegularFunction, |
102 true, false, false, false, cls, 0); | 102 true, false, false, false, false, cls, 0); |
103 functions.SetAt(5, function); | 103 functions.SetAt(5, function); |
104 | 104 |
105 // Setup the functions in the class. | 105 // Setup the functions in the class. |
106 cls.SetFunctions(functions); | 106 cls.SetFunctions(functions); |
107 | 107 |
108 // The class can now be finalized. | 108 // The class can now be finalized. |
109 cls.Finalize(); | 109 cls.Finalize(); |
110 | 110 |
111 function_name = String::New("Foo"); | 111 function_name = String::New("Foo"); |
112 function = cls.LookupDynamicFunction(function_name); | 112 function = cls.LookupDynamicFunction(function_name); |
(...skipping 2216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2329 // Allocate the class first. | 2329 // Allocate the class first. |
2330 const String& class_name = String::Handle(Symbols::New("MyClass")); | 2330 const String& class_name = String::Handle(Symbols::New("MyClass")); |
2331 const Script& script = Script::Handle(); | 2331 const Script& script = Script::Handle(); |
2332 const Class& cls = Class::Handle(CreateDummyClass(class_name, script)); | 2332 const Class& cls = Class::Handle(CreateDummyClass(class_name, script)); |
2333 const Array& functions = Array::Handle(Array::New(1)); | 2333 const Array& functions = Array::Handle(Array::New(1)); |
2334 | 2334 |
2335 const Context& context = Context::Handle(Context::New(0)); | 2335 const Context& context = Context::Handle(Context::New(0)); |
2336 Function& parent = Function::Handle(); | 2336 Function& parent = Function::Handle(); |
2337 const String& parent_name = String::Handle(Symbols::New("foo_papa")); | 2337 const String& parent_name = String::Handle(Symbols::New("foo_papa")); |
2338 parent = Function::New(parent_name, RawFunction::kRegularFunction, | 2338 parent = Function::New(parent_name, RawFunction::kRegularFunction, |
2339 false, false, false, false, cls, 0); | 2339 false, false, false, false, false, cls, 0); |
2340 functions.SetAt(0, parent); | 2340 functions.SetAt(0, parent); |
2341 cls.SetFunctions(functions); | 2341 cls.SetFunctions(functions); |
2342 | 2342 |
2343 Function& function = Function::Handle(); | 2343 Function& function = Function::Handle(); |
2344 const String& function_name = String::Handle(Symbols::New("foo")); | 2344 const String& function_name = String::Handle(Symbols::New("foo")); |
2345 function = Function::NewClosureFunction(function_name, parent, 0); | 2345 function = Function::NewClosureFunction(function_name, parent, 0); |
2346 const Class& signature_class = Class::Handle( | 2346 const Class& signature_class = Class::Handle( |
2347 Class::NewSignatureClass(function_name, function, script, 0)); | 2347 Class::NewSignatureClass(function_name, function, script, 0)); |
2348 const Instance& closure = Instance::Handle(Closure::New(function, context)); | 2348 const Instance& closure = Instance::Handle(Closure::New(function, context)); |
2349 const Class& closure_class = Class::Handle(closure.clazz()); | 2349 const Class& closure_class = Class::Handle(closure.clazz()); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2404 const String& lib_name = String::Handle(Symbols::New("ownerLibrary")); | 2404 const String& lib_name = String::Handle(Symbols::New("ownerLibrary")); |
2405 const Script& script = Script::Handle(); | 2405 const Script& script = Script::Handle(); |
2406 const Class& owner_class = | 2406 const Class& owner_class = |
2407 Class::Handle(CreateDummyClass(class_name, script)); | 2407 Class::Handle(CreateDummyClass(class_name, script)); |
2408 const Library& owner_library = | 2408 const Library& owner_library = |
2409 Library::Handle(CreateDummyLibrary(lib_name)); | 2409 Library::Handle(CreateDummyLibrary(lib_name)); |
2410 owner_class.set_library(owner_library); | 2410 owner_class.set_library(owner_library); |
2411 const String& function_name = String::ZoneHandle(Symbols::New(name)); | 2411 const String& function_name = String::ZoneHandle(Symbols::New(name)); |
2412 Function& function = Function::ZoneHandle( | 2412 Function& function = Function::ZoneHandle( |
2413 Function::New(function_name, RawFunction::kRegularFunction, | 2413 Function::New(function_name, RawFunction::kRegularFunction, |
2414 true, false, false, false, owner_class, 0)); | 2414 true, false, false, false, false, owner_class, 0)); |
2415 return &function; | 2415 return &function; |
2416 } | 2416 } |
2417 | 2417 |
2418 | 2418 |
2419 // Test for Code and Instruction object creation. | 2419 // Test for Code and Instruction object creation. |
2420 TEST_CASE(Code) { | 2420 TEST_CASE(Code) { |
2421 extern void GenerateIncrement(Assembler* assembler); | 2421 extern void GenerateIncrement(Assembler* assembler); |
2422 Assembler _assembler_; | 2422 Assembler _assembler_; |
2423 GenerateIncrement(&_assembler_); | 2423 GenerateIncrement(&_assembler_); |
2424 Code& code = Code::Handle(Code::FinalizeCode( | 2424 Code& code = Code::Handle(Code::FinalizeCode( |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2623 | 2623 |
2624 | 2624 |
2625 static RawFunction* GetDummyTarget(const char* name) { | 2625 static RawFunction* GetDummyTarget(const char* name) { |
2626 const String& function_name = String::Handle(Symbols::New(name)); | 2626 const String& function_name = String::Handle(Symbols::New(name)); |
2627 const Class& cls = Class::Handle( | 2627 const Class& cls = Class::Handle( |
2628 CreateDummyClass(function_name, Script::Handle())); | 2628 CreateDummyClass(function_name, Script::Handle())); |
2629 const bool is_static = false; | 2629 const bool is_static = false; |
2630 const bool is_const = false; | 2630 const bool is_const = false; |
2631 const bool is_abstract = false; | 2631 const bool is_abstract = false; |
2632 const bool is_external = false; | 2632 const bool is_external = false; |
| 2633 const bool is_native = false; |
2633 return Function::New(function_name, | 2634 return Function::New(function_name, |
2634 RawFunction::kRegularFunction, | 2635 RawFunction::kRegularFunction, |
2635 is_static, | 2636 is_static, |
2636 is_const, | 2637 is_const, |
2637 is_abstract, | 2638 is_abstract, |
2638 is_external, | 2639 is_external, |
| 2640 is_native, |
2639 cls, | 2641 cls, |
2640 0); | 2642 0); |
2641 } | 2643 } |
2642 | 2644 |
2643 | 2645 |
2644 TEST_CASE(ICData) { | 2646 TEST_CASE(ICData) { |
2645 Function& function = Function::Handle(GetDummyTarget("Bern")); | 2647 Function& function = Function::Handle(GetDummyTarget("Bern")); |
2646 const intptr_t id = 12; | 2648 const intptr_t id = 12; |
2647 const intptr_t num_args_tested = 1; | 2649 const intptr_t num_args_tested = 1; |
2648 const String& target_name = String::Handle(String::New("Thun")); | 2650 const String& target_name = String::Handle(String::New("Thun")); |
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3619 cls = Object::dynamic_class(); | 3621 cls = Object::dynamic_class(); |
3620 array = cls.fields(); | 3622 array = cls.fields(); |
3621 EXPECT(!array.IsNull()); | 3623 EXPECT(!array.IsNull()); |
3622 EXPECT(array.IsArray()); | 3624 EXPECT(array.IsArray()); |
3623 array = cls.functions(); | 3625 array = cls.functions(); |
3624 EXPECT(!array.IsNull()); | 3626 EXPECT(!array.IsNull()); |
3625 EXPECT(array.IsArray()); | 3627 EXPECT(array.IsArray()); |
3626 } | 3628 } |
3627 | 3629 |
3628 } // namespace dart | 3630 } // namespace dart |
OLD | NEW |