| 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 "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/assembler.h" | 6 #include "vm/assembler.h" |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
| 10 #include "vm/object.h" | 10 #include "vm/object.h" |
| 11 #include "vm/object_store.h" | 11 #include "vm/object_store.h" |
| 12 #include "vm/simulator.h" | 12 #include "vm/simulator.h" |
| 13 #include "vm/symbols.h" | 13 #include "vm/symbols.h" |
| 14 #include "vm/unit_test.h" | 14 #include "vm/unit_test.h" |
| 15 | 15 |
| 16 namespace dart { | 16 namespace dart { |
| 17 | 17 |
| 18 static RawClass* CreateDummyClass(const String& class_name, |
| 19 const Script& script) { |
| 20 const Class& cls = Class::Handle( |
| 21 Class::New(class_name, script, Scanner::kDummyTokenIndex)); |
| 22 cls.set_is_synthesized_class(); // Dummy class for testing. |
| 23 return cls.raw(); |
| 24 } |
| 25 |
| 26 |
| 18 TEST_CASE(Class) { | 27 TEST_CASE(Class) { |
| 19 // Allocate the class first. | 28 // Allocate the class first. |
| 20 const String& class_name = String::Handle(Symbols::New("MyClass")); | 29 const String& class_name = String::Handle(Symbols::New("MyClass")); |
| 21 const Script& script = Script::Handle(); | 30 const Script& script = Script::Handle(); |
| 22 const Class& cls = Class::Handle( | 31 const Class& cls = Class::Handle(CreateDummyClass(class_name, script)); |
| 23 Class::New(class_name, script, Scanner::kDummyTokenIndex)); | |
| 24 | 32 |
| 25 // Class has no fields. | 33 // Class has no fields. |
| 26 cls.SetFields(Object::empty_array()); | 34 cls.SetFields(Object::empty_array()); |
| 27 | 35 |
| 28 // Create and populate the function arrays. | 36 // Create and populate the function arrays. |
| 29 const Array& functions = Array::Handle(Array::New(6)); | 37 const Array& functions = Array::Handle(Array::New(6)); |
| 30 Function& function = Function::Handle(); | 38 Function& function = Function::Handle(); |
| 31 String& function_name = String::Handle(); | 39 String& function_name = String::Handle(); |
| 32 function_name = Symbols::New("foo"); | 40 function_name = Symbols::New("foo"); |
| 33 function = Function::New( | 41 function = Function::New( |
| (...skipping 29 matching lines...) Expand all Loading... |
| 63 function = Function::New( | 71 function = Function::New( |
| 64 function_name, RawFunction::kRegularFunction, | 72 function_name, RawFunction::kRegularFunction, |
| 65 true, false, false, false, cls, 0); | 73 true, false, false, false, cls, 0); |
| 66 functions.SetAt(4, function); | 74 functions.SetAt(4, function); |
| 67 function_name = Symbols::New("BaZ"); | 75 function_name = Symbols::New("BaZ"); |
| 68 function = Function::New( | 76 function = Function::New( |
| 69 function_name, RawFunction::kRegularFunction, | 77 function_name, RawFunction::kRegularFunction, |
| 70 true, false, false, false, cls, 0); | 78 true, false, false, false, cls, 0); |
| 71 functions.SetAt(5, function); | 79 functions.SetAt(5, function); |
| 72 | 80 |
| 73 // Setup the functions in the class. | 81 // Setup the functions and interfaces in the class. |
| 74 cls.SetFunctions(functions); | 82 cls.SetFunctions(functions); |
| 83 const Array& interfaces = Array::Handle(Array::New(2)); |
| 84 Class& interface = Class::Handle(); |
| 85 String& interface_name = String::Handle(); |
| 86 interface_name = Symbols::New("Harley"); |
| 87 interface = CreateDummyClass(interface_name, script); |
| 88 interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface))); |
| 89 interface_name = Symbols::New("Norton"); |
| 90 interface = CreateDummyClass(interface_name, script); |
| 91 interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface))); |
| 92 cls.set_interfaces(interfaces); |
| 93 ClassFinalizer::FinalizeTypesInClass(cls); |
| 94 cls.Finalize(); |
| 75 | 95 |
| 76 function_name = String::New("Foo"); | 96 function_name = String::New("Foo"); |
| 77 function = cls.LookupDynamicFunction(function_name); | 97 function = cls.LookupDynamicFunction(function_name); |
| 78 EXPECT(function.IsNull()); | 98 EXPECT(function.IsNull()); |
| 79 function = cls.LookupStaticFunction(function_name); | 99 function = cls.LookupStaticFunction(function_name); |
| 80 EXPECT(!function.IsNull()); | 100 EXPECT(!function.IsNull()); |
| 81 EXPECT(function_name.Equals(String::Handle(function.name()))); | 101 EXPECT(function_name.Equals(String::Handle(function.name()))); |
| 82 EXPECT_EQ(cls.raw(), function.Owner()); | 102 EXPECT_EQ(cls.raw(), function.Owner()); |
| 83 EXPECT(function.is_static()); | 103 EXPECT(function.is_static()); |
| 84 function_name = String::New("baz"); | 104 function_name = String::New("baz"); |
| 85 function = cls.LookupDynamicFunction(function_name); | 105 function = cls.LookupDynamicFunction(function_name); |
| 86 EXPECT(!function.IsNull()); | 106 EXPECT(!function.IsNull()); |
| 87 EXPECT(function_name.Equals(String::Handle(function.name()))); | 107 EXPECT(function_name.Equals(String::Handle(function.name()))); |
| 88 EXPECT_EQ(cls.raw(), function.Owner()); | 108 EXPECT_EQ(cls.raw(), function.Owner()); |
| 89 EXPECT(!function.is_static()); | 109 EXPECT(!function.is_static()); |
| 90 function = cls.LookupStaticFunction(function_name); | 110 function = cls.LookupStaticFunction(function_name); |
| 91 EXPECT(function.IsNull()); | 111 EXPECT(function.IsNull()); |
| 92 | 112 |
| 93 function_name = String::New("foo"); | 113 function_name = String::New("foo"); |
| 94 function = cls.LookupDynamicFunction(function_name); | 114 function = cls.LookupDynamicFunction(function_name); |
| 95 EXPECT(!function.IsNull()); | 115 EXPECT(!function.IsNull()); |
| 96 EXPECT_EQ(0, function.num_fixed_parameters()); | 116 EXPECT_EQ(0, function.num_fixed_parameters()); |
| 97 EXPECT(!function.HasOptionalParameters()); | 117 EXPECT(!function.HasOptionalParameters()); |
| 98 | 118 |
| 99 function_name = String::New("bar"); | 119 function_name = String::New("bar"); |
| 100 function = cls.LookupDynamicFunction(function_name); | 120 function = cls.LookupDynamicFunction(function_name); |
| 101 EXPECT(!function.IsNull()); | 121 EXPECT(!function.IsNull()); |
| 102 EXPECT_EQ(kNumFixedParameters, function.num_fixed_parameters()); | 122 EXPECT_EQ(kNumFixedParameters, function.num_fixed_parameters()); |
| 103 EXPECT_EQ(kNumOptionalParameters, function.NumOptionalParameters()); | 123 EXPECT_EQ(kNumOptionalParameters, function.NumOptionalParameters()); |
| 104 | |
| 105 const Array& interfaces = Array::Handle(Array::New(2)); | |
| 106 Class& interface = Class::Handle(); | |
| 107 String& interface_name = String::Handle(); | |
| 108 interface_name = Symbols::New("Harley"); | |
| 109 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); | |
| 110 interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface))); | |
| 111 interface_name = Symbols::New("Norton"); | |
| 112 interface = Class::New(interface_name, script, Scanner::kDummyTokenIndex); | |
| 113 interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface))); | |
| 114 cls.set_interfaces(interfaces); | |
| 115 cls.Finalize(); | |
| 116 } | 124 } |
| 117 | 125 |
| 118 | 126 |
| 119 TEST_CASE(TypeArguments) { | 127 TEST_CASE(TypeArguments) { |
| 120 const Type& type1 = Type::Handle(Type::Double()); | 128 const Type& type1 = Type::Handle(Type::Double()); |
| 121 const Type& type2 = Type::Handle(Type::StringType()); | 129 const Type& type2 = Type::Handle(Type::StringType()); |
| 122 const TypeArguments& type_arguments1 = TypeArguments::Handle( | 130 const TypeArguments& type_arguments1 = TypeArguments::Handle( |
| 123 TypeArguments::New(2)); | 131 TypeArguments::New(2)); |
| 124 type_arguments1.SetTypeAt(0, type1); | 132 type_arguments1.SetTypeAt(0, type1); |
| 125 type_arguments1.SetTypeAt(1, type2); | 133 type_arguments1.SetTypeAt(1, type2); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 iterator.Advance(); // Advance to end of stream. | 166 iterator.Advance(); // Advance to end of stream. |
| 159 EXPECT_EQ(Token::kEOS, iterator.CurrentTokenKind()); | 167 EXPECT_EQ(Token::kEOS, iterator.CurrentTokenKind()); |
| 160 } | 168 } |
| 161 | 169 |
| 162 | 170 |
| 163 TEST_CASE(InstanceClass) { | 171 TEST_CASE(InstanceClass) { |
| 164 // Allocate the class first. | 172 // Allocate the class first. |
| 165 String& class_name = String::Handle(Symbols::New("EmptyClass")); | 173 String& class_name = String::Handle(Symbols::New("EmptyClass")); |
| 166 Script& script = Script::Handle(); | 174 Script& script = Script::Handle(); |
| 167 const Class& empty_class = | 175 const Class& empty_class = |
| 168 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 176 Class::Handle(CreateDummyClass(class_name, script)); |
| 169 | 177 |
| 170 // No functions and no super class for the EmptyClass. | 178 // No functions and no super class for the EmptyClass. |
| 171 empty_class.SetFields(Object::empty_array()); | 179 empty_class.SetFields(Object::empty_array()); |
| 180 ClassFinalizer::FinalizeTypesInClass(empty_class); |
| 172 empty_class.Finalize(); | 181 empty_class.Finalize(); |
| 173 EXPECT_EQ(kObjectAlignment, empty_class.instance_size()); | 182 EXPECT_EQ(kObjectAlignment, empty_class.instance_size()); |
| 174 Instance& instance = Instance::Handle(Instance::New(empty_class)); | 183 Instance& instance = Instance::Handle(Instance::New(empty_class)); |
| 175 EXPECT_EQ(empty_class.raw(), instance.clazz()); | 184 EXPECT_EQ(empty_class.raw(), instance.clazz()); |
| 176 | 185 |
| 177 class_name = Symbols::New("OneFieldClass"); | 186 class_name = Symbols::New("OneFieldClass"); |
| 178 const Class& one_field_class = | 187 const Class& one_field_class = |
| 179 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 188 Class::Handle(CreateDummyClass(class_name, script)); |
| 180 | 189 |
| 181 // No functions and no super class for the OneFieldClass. | 190 // No functions and no super class for the OneFieldClass. |
| 182 const Array& one_fields = Array::Handle(Array::New(1)); | 191 const Array& one_fields = Array::Handle(Array::New(1)); |
| 183 const String& field_name = String::Handle(Symbols::New("the_field")); | 192 const String& field_name = String::Handle(Symbols::New("the_field")); |
| 184 const Field& field = Field::Handle( | 193 const Field& field = Field::Handle( |
| 185 Field::New(field_name, false, false, false, one_field_class, 0)); | 194 Field::New(field_name, false, false, false, one_field_class, 0)); |
| 186 one_fields.SetAt(0, field); | 195 one_fields.SetAt(0, field); |
| 187 one_field_class.SetFields(one_fields); | 196 one_field_class.SetFields(one_fields); |
| 197 ClassFinalizer::FinalizeTypesInClass(one_field_class); |
| 188 one_field_class.Finalize(); | 198 one_field_class.Finalize(); |
| 189 intptr_t header_size = sizeof(RawObject); | 199 intptr_t header_size = sizeof(RawObject); |
| 190 EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment), | 200 EXPECT_EQ(Utils::RoundUp((header_size + (1 * kWordSize)), kObjectAlignment), |
| 191 one_field_class.instance_size()); | 201 one_field_class.instance_size()); |
| 192 EXPECT_EQ(header_size, field.Offset()); | 202 EXPECT_EQ(header_size, field.Offset()); |
| 193 EXPECT(!one_field_class.is_implemented()); | 203 EXPECT(!one_field_class.is_implemented()); |
| 194 one_field_class.set_is_implemented(); | 204 one_field_class.set_is_implemented(); |
| 195 EXPECT(one_field_class.is_implemented()); | 205 EXPECT(one_field_class.is_implemented()); |
| 196 } | 206 } |
| 197 | 207 |
| (...skipping 1968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2166 EXPECT_EQ(1, var_c->index()); | 2176 EXPECT_EQ(1, var_c->index()); |
| 2167 EXPECT_EQ(parent_scope_context_level - local_scope_context_level, | 2177 EXPECT_EQ(parent_scope_context_level - local_scope_context_level, |
| 2168 var_c->owner()->context_level()); // Adjusted context level. | 2178 var_c->owner()->context_level()); // Adjusted context level. |
| 2169 } | 2179 } |
| 2170 | 2180 |
| 2171 | 2181 |
| 2172 TEST_CASE(Closure) { | 2182 TEST_CASE(Closure) { |
| 2173 // Allocate the class first. | 2183 // Allocate the class first. |
| 2174 const String& class_name = String::Handle(Symbols::New("MyClass")); | 2184 const String& class_name = String::Handle(Symbols::New("MyClass")); |
| 2175 const Script& script = Script::Handle(); | 2185 const Script& script = Script::Handle(); |
| 2176 const Class& cls = | 2186 const Class& cls = Class::Handle(CreateDummyClass(class_name, script)); |
| 2177 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | |
| 2178 const Array& functions = Array::Handle(Array::New(1)); | 2187 const Array& functions = Array::Handle(Array::New(1)); |
| 2179 | 2188 |
| 2180 const Context& context = Context::Handle(Context::New(0)); | 2189 const Context& context = Context::Handle(Context::New(0)); |
| 2181 Function& parent = Function::Handle(); | 2190 Function& parent = Function::Handle(); |
| 2182 const String& parent_name = String::Handle(Symbols::New("foo_papa")); | 2191 const String& parent_name = String::Handle(Symbols::New("foo_papa")); |
| 2183 parent = Function::New(parent_name, RawFunction::kRegularFunction, | 2192 parent = Function::New(parent_name, RawFunction::kRegularFunction, |
| 2184 false, false, false, false, cls, 0); | 2193 false, false, false, false, cls, 0); |
| 2185 functions.SetAt(0, parent); | 2194 functions.SetAt(0, parent); |
| 2186 cls.SetFunctions(functions); | 2195 cls.SetFunctions(functions); |
| 2187 | 2196 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2241 str3 = OneByteString::null(); | 2250 str3 = OneByteString::null(); |
| 2242 EXPECT(str3.IsString()); | 2251 EXPECT(str3.IsString()); |
| 2243 EXPECT(!str3.IsOneByteString()); | 2252 EXPECT(!str3.IsOneByteString()); |
| 2244 } | 2253 } |
| 2245 | 2254 |
| 2246 | 2255 |
| 2247 static Function* CreateFunction(const char* name) { | 2256 static Function* CreateFunction(const char* name) { |
| 2248 const String& class_name = String::Handle(Symbols::New("ownerClass")); | 2257 const String& class_name = String::Handle(Symbols::New("ownerClass")); |
| 2249 const Script& script = Script::Handle(); | 2258 const Script& script = Script::Handle(); |
| 2250 const Class& owner_class = | 2259 const Class& owner_class = |
| 2251 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 2260 Class::Handle(CreateDummyClass(class_name, script)); |
| 2252 const String& function_name = String::ZoneHandle(Symbols::New(name)); | 2261 const String& function_name = String::ZoneHandle(Symbols::New(name)); |
| 2253 Function& function = Function::ZoneHandle( | 2262 Function& function = Function::ZoneHandle( |
| 2254 Function::New(function_name, RawFunction::kRegularFunction, | 2263 Function::New(function_name, RawFunction::kRegularFunction, |
| 2255 true, false, false, false, owner_class, 0)); | 2264 true, false, false, false, owner_class, 0)); |
| 2256 return &function; | 2265 return &function; |
| 2257 } | 2266 } |
| 2258 | 2267 |
| 2259 | 2268 |
| 2260 // Test for Code and Instruction object creation. | 2269 // Test for Code and Instruction object creation. |
| 2261 TEST_CASE(Code) { | 2270 TEST_CASE(Code) { |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2413 EXPECT_EQ(static_cast<uword>(80), pc_descs.PC(5)); | 2422 EXPECT_EQ(static_cast<uword>(80), pc_descs.PC(5)); |
| 2414 EXPECT_EQ(150, pc_descs.TokenPos(5)); | 2423 EXPECT_EQ(150, pc_descs.TokenPos(5)); |
| 2415 EXPECT_EQ(PcDescriptors::kOther, pc_descs.DescriptorKind(0)); | 2424 EXPECT_EQ(PcDescriptors::kOther, pc_descs.DescriptorKind(0)); |
| 2416 EXPECT_EQ(PcDescriptors::kDeopt, pc_descs.DescriptorKind(1)); | 2425 EXPECT_EQ(PcDescriptors::kDeopt, pc_descs.DescriptorKind(1)); |
| 2417 } | 2426 } |
| 2418 | 2427 |
| 2419 | 2428 |
| 2420 static RawClass* CreateTestClass(const char* name) { | 2429 static RawClass* CreateTestClass(const char* name) { |
| 2421 const String& class_name = String::Handle(Symbols::New(name)); | 2430 const String& class_name = String::Handle(Symbols::New(name)); |
| 2422 const Class& cls = Class::Handle( | 2431 const Class& cls = Class::Handle( |
| 2423 Class::New(class_name, Script::Handle(), Scanner::kDummyTokenIndex)); | 2432 CreateDummyClass(class_name, Script::Handle())); |
| 2424 return cls.raw(); | 2433 return cls.raw(); |
| 2425 } | 2434 } |
| 2426 | 2435 |
| 2427 | 2436 |
| 2428 static RawField* CreateTestField(const char* name) { | 2437 static RawField* CreateTestField(const char* name) { |
| 2429 const Class& cls = Class::Handle(CreateTestClass("global:")); | 2438 const Class& cls = Class::Handle(CreateTestClass("global:")); |
| 2430 const String& field_name = String::Handle(Symbols::New(name)); | 2439 const String& field_name = String::Handle(Symbols::New(name)); |
| 2431 const Field& field = | 2440 const Field& field = |
| 2432 Field::Handle(Field::New(field_name, true, false, false, cls, 0)); | 2441 Field::Handle(Field::New(field_name, true, false, false, cls, 0)); |
| 2433 return field.raw(); | 2442 return field.raw(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2453 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); | 2462 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); |
| 2454 count++; | 2463 count++; |
| 2455 } | 2464 } |
| 2456 ASSERT(count == 2); | 2465 ASSERT(count == 2); |
| 2457 } | 2466 } |
| 2458 | 2467 |
| 2459 | 2468 |
| 2460 static RawFunction* GetDummyTarget(const char* name) { | 2469 static RawFunction* GetDummyTarget(const char* name) { |
| 2461 const String& function_name = String::Handle(Symbols::New(name)); | 2470 const String& function_name = String::Handle(Symbols::New(name)); |
| 2462 const Class& cls = Class::Handle( | 2471 const Class& cls = Class::Handle( |
| 2463 Class::New(function_name, Script::Handle(), Scanner::kDummyTokenIndex)); | 2472 CreateDummyClass(function_name, Script::Handle())); |
| 2464 const bool is_static = false; | 2473 const bool is_static = false; |
| 2465 const bool is_const = false; | 2474 const bool is_const = false; |
| 2466 const bool is_abstract = false; | 2475 const bool is_abstract = false; |
| 2467 const bool is_external = false; | 2476 const bool is_external = false; |
| 2468 return Function::New(function_name, | 2477 return Function::New(function_name, |
| 2469 RawFunction::kRegularFunction, | 2478 RawFunction::kRegularFunction, |
| 2470 is_static, | 2479 is_static, |
| 2471 is_const, | 2480 is_const, |
| 2472 is_abstract, | 2481 is_abstract, |
| 2473 is_external, | 2482 is_external, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2526 EXPECT_EQ(kSmiCid, test_class_ids[0]); | 2535 EXPECT_EQ(kSmiCid, test_class_ids[0]); |
| 2527 EXPECT_EQ(kSmiCid, test_class_ids[1]); | 2536 EXPECT_EQ(kSmiCid, test_class_ids[1]); |
| 2528 EXPECT_EQ(target1.raw(), test_target.raw()); | 2537 EXPECT_EQ(target1.raw(), test_target.raw()); |
| 2529 } | 2538 } |
| 2530 | 2539 |
| 2531 | 2540 |
| 2532 TEST_CASE(SubtypeTestCache) { | 2541 TEST_CASE(SubtypeTestCache) { |
| 2533 String& class_name = String::Handle(Symbols::New("EmptyClass")); | 2542 String& class_name = String::Handle(Symbols::New("EmptyClass")); |
| 2534 Script& script = Script::Handle(); | 2543 Script& script = Script::Handle(); |
| 2535 const Class& empty_class = | 2544 const Class& empty_class = |
| 2536 Class::Handle(Class::New(class_name, script, Scanner::kDummyTokenIndex)); | 2545 Class::Handle(CreateDummyClass(class_name, script)); |
| 2537 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New()); | 2546 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New()); |
| 2538 ASSERT(!cache.IsNull()); | 2547 ASSERT(!cache.IsNull()); |
| 2539 EXPECT_EQ(0, cache.NumberOfChecks()); | 2548 EXPECT_EQ(0, cache.NumberOfChecks()); |
| 2540 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2)); | 2549 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2)); |
| 2541 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3)); | 2550 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3)); |
| 2542 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::True()); | 2551 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::True()); |
| 2543 EXPECT_EQ(1, cache.NumberOfChecks()); | 2552 EXPECT_EQ(1, cache.NumberOfChecks()); |
| 2544 intptr_t test_class_id = -1; | 2553 intptr_t test_class_id = -1; |
| 2545 AbstractTypeArguments& test_targ_0 = AbstractTypeArguments::Handle(); | 2554 AbstractTypeArguments& test_targ_0 = AbstractTypeArguments::Handle(); |
| 2546 AbstractTypeArguments& test_targ_1 = AbstractTypeArguments::Handle(); | 2555 AbstractTypeArguments& test_targ_1 = AbstractTypeArguments::Handle(); |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3205 const Function& test7 = Function::Handle(GetFunction(class_a, "test7")); | 3214 const Function& test7 = Function::Handle(GetFunction(class_a, "test7")); |
| 3206 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint()); | 3215 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint()); |
| 3207 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); | 3216 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); |
| 3208 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); | 3217 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); |
| 3209 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); | 3218 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); |
| 3210 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); | 3219 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); |
| 3211 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); | 3220 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); |
| 3212 } | 3221 } |
| 3213 | 3222 |
| 3214 } // namespace dart | 3223 } // namespace dart |
| OLD | NEW |