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

Side by Side Diff: runtime/vm/object_test.cc

Issue 19662003: Refactor resolution code in the vm to properly handle ambiguity errors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
6 #include "vm/assembler.h" 5 #include "vm/assembler.h"
7 #include "vm/bigint_operations.h" 6 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 7 #include "vm/class_finalizer.h"
9 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
10 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
11 #include "vm/isolate.h" 10 #include "vm/isolate.h"
12 #include "vm/object.h" 11 #include "vm/object.h"
13 #include "vm/object_store.h" 12 #include "vm/object_store.h"
14 #include "vm/simulator.h" 13 #include "vm/simulator.h"
15 #include "vm/symbols.h" 14 #include "vm/symbols.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 TypeArguments::New(2)); 132 TypeArguments::New(2));
134 type_arguments1.SetTypeAt(0, type1); 133 type_arguments1.SetTypeAt(0, type1);
135 type_arguments1.SetTypeAt(1, type2); 134 type_arguments1.SetTypeAt(1, type2);
136 const TypeArguments& type_arguments2 = TypeArguments::Handle( 135 const TypeArguments& type_arguments2 = TypeArguments::Handle(
137 TypeArguments::New(2)); 136 TypeArguments::New(2));
138 type_arguments2.SetTypeAt(0, type1); 137 type_arguments2.SetTypeAt(0, type1);
139 type_arguments2.SetTypeAt(1, type2); 138 type_arguments2.SetTypeAt(1, type2);
140 EXPECT_NE(type_arguments1.raw(), type_arguments2.raw()); 139 EXPECT_NE(type_arguments1.raw(), type_arguments2.raw());
141 OS::Print("1: %s\n", type_arguments1.ToCString()); 140 OS::Print("1: %s\n", type_arguments1.ToCString());
142 OS::Print("2: %s\n", type_arguments2.ToCString()); 141 OS::Print("2: %s\n", type_arguments2.ToCString());
143 ASSERT(type_arguments1.Equals(type_arguments2)); 142 EXPECT(type_arguments1.Equals(type_arguments2));
144 TypeArguments& type_arguments3 = TypeArguments::Handle(); 143 TypeArguments& type_arguments3 = TypeArguments::Handle();
145 type_arguments1.Canonicalize(); 144 type_arguments1.Canonicalize();
146 type_arguments3 ^= type_arguments2.Canonicalize(); 145 type_arguments3 ^= type_arguments2.Canonicalize();
147 EXPECT_EQ(type_arguments1.raw(), type_arguments3.raw()); 146 EXPECT_EQ(type_arguments1.raw(), type_arguments3.raw());
148 } 147 }
149 148
150 149
151 TEST_CASE(TokenStream) { 150 TEST_CASE(TokenStream) {
152 String& source = String::Handle(String::New("= ( 9 , .")); 151 String& source = String::Handle(String::New("= ( 9 , ."));
153 String& private_key = String::Handle(String::New("")); 152 String& private_key = String::Handle(String::New(""));
(...skipping 1513 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 1666
1668 other_array = Array::New(kArrayLen - 1); 1667 other_array = Array::New(kArrayLen - 1);
1669 other_array.SetAt(0, array); 1668 other_array.SetAt(0, array);
1670 other_array.SetAt(2, array); 1669 other_array.SetAt(2, array);
1671 EXPECT(!array.Equals(other_array)); 1670 EXPECT(!array.Equals(other_array));
1672 1671
1673 EXPECT_EQ(0, Object::empty_array().Length()); 1672 EXPECT_EQ(0, Object::empty_array().Length());
1674 1673
1675 array.MakeImmutable(); 1674 array.MakeImmutable();
1676 Object& obj = Object::Handle(array.raw()); 1675 Object& obj = Object::Handle(array.raw());
1677 ASSERT(obj.IsArray()); 1676 EXPECT(obj.IsArray());
1678 } 1677 }
1679 1678
1680 1679
1681 TEST_CASE(StringCodePointIterator) { 1680 TEST_CASE(StringCodePointIterator) {
1682 const String& str0 = String::Handle(String::New("")); 1681 const String& str0 = String::Handle(String::New(""));
1683 String::CodePointIterator it0(str0); 1682 String::CodePointIterator it0(str0);
1684 EXPECT(!it0.Next()); 1683 EXPECT(!it0.Next());
1685 1684
1686 const String& str1 = String::Handle(String::New(" \xc3\xa7 ")); 1685 const String& str1 = String::Handle(String::New(" \xc3\xa7 "));
1687 String::CodePointIterator it1(str1); 1686 String::CodePointIterator it1(str1);
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
2011 /* 4 */ " return 'foo';\n" 2010 /* 4 */ " return 'foo';\n"
2012 /* 5 */ " }\n" 2011 /* 5 */ " }\n"
2013 /* 6 */ "</script>\n"; 2012 /* 6 */ "</script>\n";
2014 const char* line1 = text; 2013 const char* line1 = text;
2015 const char* line2 = strstr(line1, "\n") + 1; 2014 const char* line2 = strstr(line1, "\n") + 1;
2016 const char* line3 = strstr(line2, "\n") + 1; 2015 const char* line3 = strstr(line2, "\n") + 1;
2017 const char* line4 = strstr(line3, "\n") + 1; 2016 const char* line4 = strstr(line3, "\n") + 1;
2018 const char* line5 = strstr(line4, "\n") + 1; 2017 const char* line5 = strstr(line4, "\n") + 1;
2019 2018
2020 const int first_dart_line = 3; 2019 const int first_dart_line = 3;
2021 ASSERT(strstr(line3, "main") != NULL); 2020 EXPECT(strstr(line3, "main") != NULL);
2022 const int last_dart_line = 5; 2021 const int last_dart_line = 5;
2023 ASSERT(strstr(line5, "}") != NULL); 2022 EXPECT(strstr(line5, "}") != NULL);
2024 2023
2025 const char* script_begin = strstr(text, "main"); 2024 const char* script_begin = strstr(text, "main");
2026 ASSERT(script_begin != NULL); 2025 EXPECT(script_begin != NULL);
2027 const char* script_end = strstr(text, "</script>"); 2026 const char* script_end = strstr(text, "</script>");
2028 ASSERT(script_end != NULL); 2027 EXPECT(script_end != NULL);
2029 int script_length = script_end - script_begin; 2028 int script_length = script_end - script_begin;
2030 ASSERT(script_length > 0); 2029 EXPECT(script_length > 0);
2031 2030
2032 // The Dart script starts on line 3 instead of 1, offset is 3 - 1 = 2. 2031 // The Dart script starts on line 3 instead of 1, offset is 3 - 1 = 2.
2033 int line_offset = 2; 2032 int line_offset = 2;
2034 // Dart script starts with "main" on line 3. 2033 // Dart script starts with "main" on line 3.
2035 intptr_t col_offset = script_begin - line3; 2034 intptr_t col_offset = script_begin - line3;
2036 ASSERT(col_offset > 0); 2035 EXPECT(col_offset > 0);
2037 2036
2038 char* src_chars = strdup(script_begin); 2037 char* src_chars = strdup(script_begin);
2039 src_chars[script_length] = '\0'; 2038 src_chars[script_length] = '\0';
2040 2039
2041 const String& url = String::Handle(String::New(url_chars)); 2040 const String& url = String::Handle(String::New(url_chars));
2042 const String& source = String::Handle(String::New(src_chars)); 2041 const String& source = String::Handle(String::New(src_chars));
2043 const Script& script = Script::Handle( 2042 const Script& script = Script::Handle(
2044 Script::New(url, source, RawScript::kScriptTag)); 2043 Script::New(url, source, RawScript::kScriptTag));
2045 script.SetLocationOffset(line_offset, col_offset); 2044 script.SetLocationOffset(line_offset, col_offset);
2046 2045
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
2458 Library& lib = Library::Handle(Library::New(url)); 2457 Library& lib = Library::Handle(Library::New(url));
2459 lib.AddClass(ae66); 2458 lib.AddClass(ae66);
2460 lib.AddObject(ce68, String::ZoneHandle(ce68.name())); 2459 lib.AddObject(ce68, String::ZoneHandle(ce68.name()));
2461 lib.AddClass(re44); 2460 lib.AddClass(re44);
2462 lib.AddObject(tee, String::ZoneHandle(tee.name())); 2461 lib.AddObject(tee, String::ZoneHandle(tee.name()));
2463 ClassDictionaryIterator iterator(lib); 2462 ClassDictionaryIterator iterator(lib);
2464 int count = 0; 2463 int count = 0;
2465 Class& cls = Class::Handle(); 2464 Class& cls = Class::Handle();
2466 while (iterator.HasNext()) { 2465 while (iterator.HasNext()) {
2467 cls = iterator.GetNextClass(); 2466 cls = iterator.GetNextClass();
2468 ASSERT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw())); 2467 EXPECT((cls.raw() == ae66.raw()) || (cls.raw() == re44.raw()));
2469 count++; 2468 count++;
2470 } 2469 }
2471 ASSERT(count == 2); 2470 EXPECT(count == 2);
2472 } 2471 }
2473 2472
2474 2473
2475 static RawFunction* GetDummyTarget(const char* name) { 2474 static RawFunction* GetDummyTarget(const char* name) {
2476 const String& function_name = String::Handle(Symbols::New(name)); 2475 const String& function_name = String::Handle(Symbols::New(name));
2477 const Class& cls = Class::Handle( 2476 const Class& cls = Class::Handle(
2478 CreateDummyClass(function_name, Script::Handle())); 2477 CreateDummyClass(function_name, Script::Handle()));
2479 const bool is_static = false; 2478 const bool is_static = false;
2480 const bool is_const = false; 2479 const bool is_const = false;
2481 const bool is_abstract = false; 2480 const bool is_abstract = false;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
2553 EXPECT_EQ(target1.raw(), scall_icdata.GetTargetAt(0)); 2552 EXPECT_EQ(target1.raw(), scall_icdata.GetTargetAt(0));
2554 } 2553 }
2555 2554
2556 2555
2557 TEST_CASE(SubtypeTestCache) { 2556 TEST_CASE(SubtypeTestCache) {
2558 String& class_name = String::Handle(Symbols::New("EmptyClass")); 2557 String& class_name = String::Handle(Symbols::New("EmptyClass"));
2559 Script& script = Script::Handle(); 2558 Script& script = Script::Handle();
2560 const Class& empty_class = 2559 const Class& empty_class =
2561 Class::Handle(CreateDummyClass(class_name, script)); 2560 Class::Handle(CreateDummyClass(class_name, script));
2562 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New()); 2561 SubtypeTestCache& cache = SubtypeTestCache::Handle(SubtypeTestCache::New());
2563 ASSERT(!cache.IsNull()); 2562 EXPECT(!cache.IsNull());
2564 EXPECT_EQ(0, cache.NumberOfChecks()); 2563 EXPECT_EQ(0, cache.NumberOfChecks());
2565 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2)); 2564 const TypeArguments& targ_0 = TypeArguments::Handle(TypeArguments::New(2));
2566 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3)); 2565 const TypeArguments& targ_1 = TypeArguments::Handle(TypeArguments::New(3));
2567 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::True()); 2566 cache.AddCheck(empty_class.id(), targ_0, targ_1, Bool::True());
2568 EXPECT_EQ(1, cache.NumberOfChecks()); 2567 EXPECT_EQ(1, cache.NumberOfChecks());
2569 intptr_t test_class_id = -1; 2568 intptr_t test_class_id = -1;
2570 AbstractTypeArguments& test_targ_0 = AbstractTypeArguments::Handle(); 2569 AbstractTypeArguments& test_targ_0 = AbstractTypeArguments::Handle();
2571 AbstractTypeArguments& test_targ_1 = AbstractTypeArguments::Handle(); 2570 AbstractTypeArguments& test_targ_1 = AbstractTypeArguments::Handle();
2572 Bool& test_result = Bool::Handle(); 2571 Bool& test_result = Bool::Handle();
2573 cache.GetCheck(0, &test_class_id, &test_targ_0, &test_targ_1, &test_result); 2572 cache.GetCheck(0, &test_class_id, &test_targ_0, &test_targ_1, &test_result);
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 EXPECT_EQ(returned_referent.raw(), library.raw()); 3193 EXPECT_EQ(returned_referent.raw(), library.raw());
3195 3194
3196 const MirrorReference& other_reference = 3195 const MirrorReference& other_reference =
3197 MirrorReference::Handle(MirrorReference::New()); 3196 MirrorReference::Handle(MirrorReference::New());
3198 EXPECT_NE(reference.raw(), other_reference.raw()); 3197 EXPECT_NE(reference.raw(), other_reference.raw());
3199 other_reference.set_referent(library); 3198 other_reference.set_referent(library);
3200 EXPECT_NE(reference.raw(), other_reference.raw()); 3199 EXPECT_NE(reference.raw(), other_reference.raw());
3201 EXPECT_EQ(reference.referent(), other_reference.referent()); 3200 EXPECT_EQ(reference.referent(), other_reference.referent());
3202 3201
3203 Object& obj = Object::Handle(reference.raw()); 3202 Object& obj = Object::Handle(reference.raw());
3204 ASSERT(obj.IsMirrorReference()); 3203 EXPECT(obj.IsMirrorReference());
3205 } 3204 }
3206 3205
3207 3206
3208 static RawFunction* GetFunction(const Class& cls, const char* name) { 3207 static RawFunction* GetFunction(const Class& cls, const char* name) {
3209 const Function& result = Function::Handle(cls.LookupDynamicFunction( 3208 const Function& result = Function::Handle(cls.LookupDynamicFunction(
3210 String::Handle(String::New(name)))); 3209 String::Handle(String::New(name))));
3211 ASSERT(!result.IsNull()); 3210 EXPECT(!result.IsNull());
3212 return result.raw(); 3211 return result.raw();
3213 } 3212 }
3214 3213
3215 3214
3216 static RawField* GetField(const Class& cls, const char* name) { 3215 static RawField* GetField(const Class& cls, const char* name) {
3217 const Field& field = 3216 const Field& field =
3218 Field::Handle(cls.LookupField(String::Handle(String::New(name)))); 3217 Field::Handle(cls.LookupField(String::Handle(String::New(name))));
3219 ASSERT(!field.IsNull()); 3218 EXPECT(!field.IsNull());
3220 return field.raw(); 3219 return field.raw();
3221 } 3220 }
3222 3221
3223 3222
3224 static RawClass* GetClass(const Library& lib, const char* name) { 3223 static RawClass* GetClass(const Library& lib, const char* name) {
3225 const Class& cls = 3224 String& ambiguity_error_msg = String::Handle();
3226 Class::Handle(lib.LookupClass(String::Handle(Symbols::New(name)))); 3225 const Class& cls = Class::Handle(
3227 ASSERT(!cls.IsNull()); 3226 lib.LookupClass(String::Handle(Symbols::New(name)),
3227 &ambiguity_error_msg));
3228 EXPECT(!cls.IsNull()); // No ambiguity error expected.
3228 return cls.raw(); 3229 return cls.raw();
3229 } 3230 }
3230 3231
3231 3232
3232 static void PrintMetadata(const char* name, const Object& data) { 3233 static void PrintMetadata(const char* name, const Object& data) {
3233 if (data.IsError()) { 3234 if (data.IsError()) {
3234 OS::Print("Error in metadata evaluation for %s: '%s'\n", 3235 OS::Print("Error in metadata evaluation for %s: '%s'\n",
3235 name, 3236 name,
3236 Error::Cast(data).ToErrorCString()); 3237 Error::Cast(data).ToErrorCString());
3237 } 3238 }
3238 ASSERT(data.IsArray()); 3239 EXPECT(data.IsArray());
3239 const Array& metadata = Array::Cast(data); 3240 const Array& metadata = Array::Cast(data);
3240 OS::Print("Metadata for %s has %"Pd" values:\n", name, metadata.Length()); 3241 OS::Print("Metadata for %s has %"Pd" values:\n", name, metadata.Length());
3241 Object& elem = Object::Handle(); 3242 Object& elem = Object::Handle();
3242 for (int i = 0; i < metadata.Length(); i++) { 3243 for (int i = 0; i < metadata.Length(); i++) {
3243 elem = metadata.At(i); 3244 elem = metadata.At(i);
3244 OS::Print(" %d: %s\n", i, elem.ToCString()); 3245 OS::Print(" %d: %s\n", i, elem.ToCString());
3245 } 3246 }
3246 } 3247 }
3247 3248
3248 3249
(...skipping 29 matching lines...) Expand all
3278 "A main() { \n" 3279 "A main() { \n"
3279 " return new A(); \n" 3280 " return new A(); \n"
3280 "} \n"; 3281 "} \n";
3281 3282
3282 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); 3283 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL);
3283 EXPECT_VALID(h_lib); 3284 EXPECT_VALID(h_lib);
3284 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); 3285 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
3285 EXPECT_VALID(result); 3286 EXPECT_VALID(result);
3286 Library& lib = Library::Handle(); 3287 Library& lib = Library::Handle();
3287 lib ^= Api::UnwrapHandle(h_lib); 3288 lib ^= Api::UnwrapHandle(h_lib);
3288 ASSERT(!lib.IsNull()); 3289 EXPECT(!lib.IsNull());
3289 const Class& class_a = Class::Handle(GetClass(lib, "A")); 3290 const Class& class_a = Class::Handle(GetClass(lib, "A"));
3290 Object& res = Object::Handle(lib.GetMetadata(class_a)); 3291 Object& res = Object::Handle(lib.GetMetadata(class_a));
3291 PrintMetadata("A", res); 3292 PrintMetadata("A", res);
3292 3293
3293 const Class& class_meta = Class::Handle(GetClass(lib, "Meta")); 3294 const Class& class_meta = Class::Handle(GetClass(lib, "Meta"));
3294 res = lib.GetMetadata(class_meta); 3295 res = lib.GetMetadata(class_meta);
3295 PrintMetadata("Meta", res); 3296 PrintMetadata("Meta", res);
3296 3297
3297 Field& field = Field::Handle(GetField(class_a, "aField")); 3298 Field& field = Field::Handle(GetField(class_a, "aField"));
3298 res = lib.GetMetadata(field); 3299 res = lib.GetMetadata(field);
3299 PrintMetadata("A.aField", res); 3300 PrintMetadata("A.aField", res);
3300 3301
3301 Function& func = Function::Handle(GetFunction(class_a, "aFunc")); 3302 Function& func = Function::Handle(GetFunction(class_a, "aFunc"));
3302 res = lib.GetMetadata(func); 3303 res = lib.GetMetadata(func);
3303 PrintMetadata("A.aFunc", res); 3304 PrintMetadata("A.aFunc", res);
3304 3305
3305 func = lib.LookupLocalFunction(String::Handle(Symbols::New("main"))); 3306 func = lib.LookupLocalFunction(String::Handle(Symbols::New("main")));
3306 ASSERT(!func.IsNull()); 3307 EXPECT(!func.IsNull());
3307 res = lib.GetMetadata(func); 3308 res = lib.GetMetadata(func);
3308 PrintMetadata("main", res); 3309 PrintMetadata("main", res);
3309 3310
3310 func = lib.LookupLocalFunction(String::Handle(Symbols::New("get:tlGetter"))); 3311 func = lib.LookupLocalFunction(String::Handle(Symbols::New("get:tlGetter")));
3311 ASSERT(!func.IsNull()); 3312 EXPECT(!func.IsNull());
3312 res = lib.GetMetadata(func); 3313 res = lib.GetMetadata(func);
3313 PrintMetadata("tlGetter", res); 3314 PrintMetadata("tlGetter", res);
3314 3315
3315 field = lib.LookupLocalField(String::Handle(Symbols::New("gVar"))); 3316 field = lib.LookupLocalField(String::Handle(Symbols::New("gVar")));
3316 ASSERT(!field.IsNull()); 3317 EXPECT(!field.IsNull());
3317 res = lib.GetMetadata(field); 3318 res = lib.GetMetadata(field);
3318 PrintMetadata("gVar", res); 3319 PrintMetadata("gVar", res);
3319 } 3320 }
3320 3321
3321 3322
3322 TEST_CASE(FunctionSourceFingerprint) { 3323 TEST_CASE(FunctionSourceFingerprint) {
3323 const char* kScriptChars = 3324 const char* kScriptChars =
3324 "class A {\n" 3325 "class A {\n"
3325 " void test1(int a) {\n" 3326 " void test1(int a) {\n"
3326 " return a > 1 ? a + 1 : a;\n" 3327 " return a > 1 ? a + 1 : a;\n"
(...skipping 18 matching lines...) Expand all
3345 " b - 2 : b;\n" 3346 " b - 2 : b;\n"
3346 " }\n" 3347 " }\n"
3347 "}"; 3348 "}";
3348 TestCase::LoadTestScript(kScriptChars, NULL); 3349 TestCase::LoadTestScript(kScriptChars, NULL);
3349 EXPECT(ClassFinalizer::FinalizePendingClasses()); 3350 EXPECT(ClassFinalizer::FinalizePendingClasses());
3350 const String& name = String::Handle(String::New(TestCase::url())); 3351 const String& name = String::Handle(String::New(TestCase::url()));
3351 const Library& lib = Library::Handle(Library::LookupLibrary(name)); 3352 const Library& lib = Library::Handle(Library::LookupLibrary(name));
3352 EXPECT(!lib.IsNull()); 3353 EXPECT(!lib.IsNull());
3353 3354
3354 const Class& class_a = Class::Handle( 3355 const Class& class_a = Class::Handle(
3355 lib.LookupClass(String::Handle(Symbols::New("A")))); 3356 lib.LookupClass(String::Handle(Symbols::New("A")), NULL));
3356 const Function& test1 = Function::Handle(GetFunction(class_a, "test1")); 3357 const Function& test1 = Function::Handle(GetFunction(class_a, "test1"));
3357 const Function& test2 = Function::Handle(GetFunction(class_a, "test2")); 3358 const Function& test2 = Function::Handle(GetFunction(class_a, "test2"));
3358 const Function& test3 = Function::Handle(GetFunction(class_a, "test3")); 3359 const Function& test3 = Function::Handle(GetFunction(class_a, "test3"));
3359 const Function& test4 = Function::Handle(GetFunction(class_a, "test4")); 3360 const Function& test4 = Function::Handle(GetFunction(class_a, "test4"));
3360 const Function& test5 = Function::Handle(GetFunction(class_a, "test5")); 3361 const Function& test5 = Function::Handle(GetFunction(class_a, "test5"));
3361 const Function& test6 = Function::Handle(GetFunction(class_a, "test6")); 3362 const Function& test6 = Function::Handle(GetFunction(class_a, "test6"));
3362 const Function& test7 = Function::Handle(GetFunction(class_a, "test7")); 3363 const Function& test7 = Function::Handle(GetFunction(class_a, "test7"));
3363 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint()); 3364 EXPECT_EQ(test1.SourceFingerprint(), test2.SourceFingerprint());
3364 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint()); 3365 EXPECT_NE(test1.SourceFingerprint(), test3.SourceFingerprint());
3365 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint()); 3366 EXPECT_NE(test3.SourceFingerprint(), test4.SourceFingerprint());
3366 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint()); 3367 EXPECT_NE(test4.SourceFingerprint(), test5.SourceFingerprint());
3367 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint()); 3368 EXPECT_NE(test5.SourceFingerprint(), test6.SourceFingerprint());
3368 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); 3369 EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint());
3369 } 3370 }
3370 3371
3371 } // namespace dart 3372 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698