Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dart2js.serialization_test; | 5 library dart2js.serialization_test; |
| 6 | 6 |
| 7 import 'dart:io'; | 7 import 'dart:io'; |
| 8 import 'memory_compiler.dart'; | 8 import 'memory_compiler.dart'; |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:compiler/src/constants/constructors.dart'; | 10 import 'package:compiler/src/constants/constructors.dart'; |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 335 throw "$object1.$property = '${value1}' <> " | 335 throw "$object1.$property = '${value1}' <> " |
| 336 "$object2.$property = '${value2}'"; | 336 "$object2.$property = '${value2}'"; |
| 337 } | 337 } |
| 338 } | 338 } |
| 339 | 339 |
| 340 /// Visitor that checks for equivalence of [Element] identities. | 340 /// Visitor that checks for equivalence of [Element] identities. |
| 341 class ElementIdentityEquivalence extends BaseElementVisitor<dynamic, Element> { | 341 class ElementIdentityEquivalence extends BaseElementVisitor<dynamic, Element> { |
| 342 const ElementIdentityEquivalence(); | 342 const ElementIdentityEquivalence(); |
| 343 | 343 |
| 344 void visit(Element element1, Element element2) { | 344 void visit(Element element1, Element element2) { |
| 345 if (element1 == null && element2 == null) return; | |
| 346 if (element1 == element2) return; | |
| 347 element1 = element1.declaration; | |
| 348 element2 = element2.declaration; | |
| 345 check(element1, element2, 'kind', element1.kind, element2.kind); | 349 check(element1, element2, 'kind', element1.kind, element2.kind); |
| 346 element1.accept(this, element2); | 350 element1.accept(this, element2); |
| 347 } | 351 } |
| 348 | 352 |
| 349 @override | 353 @override |
| 350 void visitElement(Element e, Element arg) { | 354 void visitElement(Element e, Element arg) { |
| 351 throw new UnsupportedError("Unsupported element $e"); | 355 throw new UnsupportedError("Unsupported element $e"); |
| 352 } | 356 } |
| 353 | 357 |
| 354 @override | 358 @override |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 447 element1.name, element2.name); | 451 element1.name, element2.name); |
| 448 visit(element1.library, element2.library); | 452 visit(element1.library, element2.library); |
| 449 } | 453 } |
| 450 } | 454 } |
| 451 | 455 |
| 452 /// Visitor that checks for equivalence of [Element] properties. | 456 /// Visitor that checks for equivalence of [Element] properties. |
| 453 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { | 457 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { |
| 454 const ElementPropertyEquivalence(); | 458 const ElementPropertyEquivalence(); |
| 455 | 459 |
| 456 void visit(Element element1, Element element2) { | 460 void visit(Element element1, Element element2) { |
| 461 if (element1 == null && element2 == null) return; | |
|
Siggi Cherem (dart-lang)
2016/03/17 15:33:45
wouldn't this be covered by the condition below? o
Johnni Winther
2016/03/18 08:11:32
Moved `if (element1 == element2) ...` below `e = e
| |
| 457 if (element1 == element2) return; | 462 if (element1 == element2) return; |
| 463 element1 = element1.declaration; | |
| 464 element2 = element2.declaration; | |
| 458 check(element1, element2, 'kind', element1.kind, element2.kind); | 465 check(element1, element2, 'kind', element1.kind, element2.kind); |
| 459 element1.accept(this, element2); | 466 element1.accept(this, element2); |
| 460 } | 467 } |
| 461 | 468 |
| 462 @override | 469 @override |
| 463 void visitElement(Element e, Element arg) { | 470 void visitElement(Element e, Element arg) { |
| 464 throw new UnsupportedError("Unsupported element $e"); | 471 throw new UnsupportedError("Unsupported element $e"); |
| 465 } | 472 } |
| 466 | 473 |
| 467 @override | 474 @override |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 516 element2.forEachLocalMember((Element member) { | 523 element2.forEachLocalMember((Element member) { |
| 517 members2.add(member); | 524 members2.add(member); |
| 518 }); | 525 }); |
| 519 checkElementListIdentities( | 526 checkElementListIdentities( |
| 520 element1, element2, 'localMembers', members1, members2); | 527 element1, element2, 'localMembers', members1, members2); |
| 521 } | 528 } |
| 522 | 529 |
| 523 void visitMembers(ScopeContainerElement element1, | 530 void visitMembers(ScopeContainerElement element1, |
| 524 ScopeContainerElement element2) { | 531 ScopeContainerElement element2) { |
| 525 Set<String> names = new Set<String>(); | 532 Set<String> names = new Set<String>(); |
| 526 element1.forEachLocalMember((Element member) { | 533 Iterable<Element> members1 = element1.isLibrary |
| 534 ? LibrarySerializer.getMembers(element1) | |
| 535 : ClassSerializer.getMembers(element1); | |
| 536 Iterable<Element> members2 = element2.isLibrary | |
| 537 ? LibrarySerializer.getMembers(element2) | |
| 538 : ClassSerializer.getMembers(element2); | |
| 539 for (Element member in members1) { | |
| 527 names.add(member.name); | 540 names.add(member.name); |
| 528 }); | 541 } |
| 529 element2.forEachLocalMember((Element member) { | 542 for (Element member in members2) { |
| 530 names.add(member.name); | 543 names.add(member.name); |
| 531 }); | 544 } |
| 545 element1 = element1.implementation; | |
| 546 element2 = element2.implementation; | |
| 532 for (String name in names) { | 547 for (String name in names) { |
| 533 Element member1 = element1.localLookup(name); | 548 Element member1 = element1.localLookup(name); |
| 534 Element member2 = element2.localLookup(name); | 549 Element member2 = element2.localLookup(name); |
| 535 if (member1 == null) { | 550 if (member1 == null) { |
| 536 print('Missing member for $member2'); | 551 print('Missing member for $member2 in\n ${members1.join('\n ')}'); |
| 537 continue; | 552 continue; |
| 538 } | 553 } |
| 539 if (member2 == null) { | 554 if (member2 == null) { |
| 540 print('Missing member for $member1'); | 555 print('Missing member for $member1 in\n ${members2.join('\n ')}'); |
| 541 continue; | 556 continue; |
| 542 } | 557 } |
| 543 visit(member1, member2); | 558 visit(member1, member2); |
| 544 } | 559 } |
| 545 } | 560 } |
| 546 | 561 |
| 547 @override | 562 @override |
| 548 void visitClassElement(ClassElement element1, ClassElement element2) { | 563 void visitClassElement(ClassElement element1, ClassElement element2) { |
| 549 checkElementIdentities(null, null, null, element1, element2); | 564 checkElementIdentities(null, null, null, element1, element2); |
| 550 check(element1, element2, 'name', | 565 check(element1, element2, 'name', |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1075 exp1, exp2, 'expression', | 1090 exp1, exp2, 'expression', |
| 1076 exp1.expression, exp2.expression); | 1091 exp1.expression, exp2.expression); |
| 1077 } | 1092 } |
| 1078 | 1093 |
| 1079 @override | 1094 @override |
| 1080 visitDeferred(DeferredConstantExpression exp1, | 1095 visitDeferred(DeferredConstantExpression exp1, |
| 1081 DeferredConstantExpression exp2) { | 1096 DeferredConstantExpression exp2) { |
| 1082 // TODO: implement visitDeferred | 1097 // TODO: implement visitDeferred |
| 1083 } | 1098 } |
| 1084 } | 1099 } |
| OLD | NEW |