| 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/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 241 |
| 242 /// Check the equivalence of the two lists of elements, [list1] and [list2]. | 242 /// Check the equivalence of the two lists of elements, [list1] and [list2]. |
| 243 /// | 243 /// |
| 244 /// Uses [object1], [object2] and [property] to provide context for failures. | 244 /// Uses [object1], [object2] and [property] to provide context for failures. |
| 245 checkElementLists(Object object1, Object object2, String property, | 245 checkElementLists(Object object1, Object object2, String property, |
| 246 Iterable<Element> list1, Iterable<Element> list2) { | 246 Iterable<Element> list1, Iterable<Element> list2) { |
| 247 checkListEquivalence(object1, object2, property, | 247 checkListEquivalence(object1, object2, property, |
| 248 list1, list2, checkElementProperties); | 248 list1, list2, checkElementProperties); |
| 249 } | 249 } |
| 250 | 250 |
| 251 /// Check the equivalence of the two metadata annotations, [metadata1] and |
| 252 /// [metadata2]. |
| 253 /// |
| 254 /// Uses [object1], [object2] and [property] to provide context for failures. |
| 255 checkMetadata(Object object1, Object object2, String property, |
| 256 MetadataAnnotation metadata1, MetadataAnnotation metadata2) { |
| 257 check(object1, object2, property, |
| 258 metadata1, metadata2, areMetadataAnnotationsEquivalent); |
| 259 } |
| 260 |
| 251 /// Visitor that checks for equivalence of [Element] properties. | 261 /// Visitor that checks for equivalence of [Element] properties. |
| 252 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { | 262 class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> { |
| 253 const ElementPropertyEquivalence(); | 263 const ElementPropertyEquivalence(); |
| 254 | 264 |
| 255 void visit(Element element1, Element element2) { | 265 void visit(Element element1, Element element2) { |
| 256 if (element1 == null && element2 == null) return; | 266 if (element1 == null && element2 == null) return; |
| 257 element1 = element1.declaration; | 267 element1 = element1.declaration; |
| 258 element2 = element2.declaration; | 268 element2 = element2.declaration; |
| 259 if (element1 == element2) return; | 269 if (element1 == element2) return; |
| 260 check(element1, element2, 'kind', element1.kind, element2.kind); | 270 check(element1, element2, 'kind', element1.kind, element2.kind); |
| 261 element1.accept(this, element2); | 271 element1.accept(this, element2); |
| 262 check(element1, element2, 'isSynthesized', | 272 check(element1, element2, 'isSynthesized', |
| 263 element1.isSynthesized, element2.isSynthesized); | 273 element1.isSynthesized, element2.isSynthesized); |
| 264 check(element1, element2, 'isLocal', | 274 check(element1, element2, 'isLocal', |
| 265 element1.isLocal, element2.isLocal); | 275 element1.isLocal, element2.isLocal); |
| 266 check(element1, element2, 'isFinal', | 276 check(element1, element2, 'isFinal', |
| 267 element1.isFinal, element2.isFinal); | 277 element1.isFinal, element2.isFinal); |
| 268 check(element1, element2, 'isConst', | 278 check(element1, element2, 'isConst', |
| 269 element1.isConst, element2.isConst); | 279 element1.isConst, element2.isConst); |
| 270 check(element1, element2, 'isAbstract', | 280 check(element1, element2, 'isAbstract', |
| 271 element1.isAbstract, element2.isAbstract); | 281 element1.isAbstract, element2.isAbstract); |
| 272 check(element1, element2, 'isStatic', | 282 check(element1, element2, 'isStatic', |
| 273 element1.isStatic, element2.isStatic); | 283 element1.isStatic, element2.isStatic); |
| 274 check(element1, element2, 'isTopLevel', | 284 check(element1, element2, 'isTopLevel', |
| 275 element1.isTopLevel, element2.isTopLevel); | 285 element1.isTopLevel, element2.isTopLevel); |
| 276 check(element1, element2, 'isClassMember', | 286 check(element1, element2, 'isClassMember', |
| 277 element1.isClassMember, element2.isClassMember); | 287 element1.isClassMember, element2.isClassMember); |
| 278 check(element1, element2, 'isInstanceMember', | 288 check(element1, element2, 'isInstanceMember', |
| 279 element1.isInstanceMember, element2.isInstanceMember); | 289 element1.isInstanceMember, element2.isInstanceMember); |
| 290 checkListEquivalence(element1, element2, 'metadata', |
| 291 element1.metadata, element2.metadata, checkMetadata); |
| 280 } | 292 } |
| 281 | 293 |
| 282 @override | 294 @override |
| 283 void visitElement(Element e, Element arg) { | 295 void visitElement(Element e, Element arg) { |
| 284 throw new UnsupportedError("Unsupported element $e"); | 296 throw new UnsupportedError("Unsupported element $e"); |
| 285 } | 297 } |
| 286 | 298 |
| 287 @override | 299 @override |
| 288 void visitLibraryElement(LibraryElement element1, LibraryElement element2) { | 300 void visitLibraryElement(LibraryElement element1, LibraryElement element2) { |
| 289 checkElementIdentities(null, null, null, element1, element2); | 301 checkElementIdentities(null, null, null, element1, element2); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 element1, element2, 'rawType', | 435 element1, element2, 'rawType', |
| 424 element1.rawType, element2.rawType); | 436 element1.rawType, element2.rawType); |
| 425 check(element1, element2, 'isObject', | 437 check(element1, element2, 'isObject', |
| 426 element1.isObject, element2.isObject); | 438 element1.isObject, element2.isObject); |
| 427 checkTypeLists(element1, element2, 'typeVariables', | 439 checkTypeLists(element1, element2, 'typeVariables', |
| 428 element1.typeVariables, element2.typeVariables); | 440 element1.typeVariables, element2.typeVariables); |
| 429 check(element1, element2, 'isAbstract', | 441 check(element1, element2, 'isAbstract', |
| 430 element1.isAbstract, element2.isAbstract); | 442 element1.isAbstract, element2.isAbstract); |
| 431 check(element1, element2, 'isUnnamedMixinApplication', | 443 check(element1, element2, 'isUnnamedMixinApplication', |
| 432 element1.isUnnamedMixinApplication, element2.isUnnamedMixinApplication); | 444 element1.isUnnamedMixinApplication, element2.isUnnamedMixinApplication); |
| 445 check(element1, element2, 'isProxy', |
| 446 element1.isProxy, element2.isProxy); |
| 447 check(element1, element2, 'isInjected', |
| 448 element1.isInjected, element2.isInjected); |
| 433 check(element1, element2, 'isEnumClass', | 449 check(element1, element2, 'isEnumClass', |
| 434 element1.isEnumClass, element2.isEnumClass); | 450 element1.isEnumClass, element2.isEnumClass); |
| 435 if (element1.isEnumClass) { | 451 if (element1.isEnumClass) { |
| 436 EnumClassElement enum1 = element1; | 452 EnumClassElement enum1 = element1; |
| 437 EnumClassElement enum2 = element2; | 453 EnumClassElement enum2 = element2; |
| 438 checkElementLists(enum1, enum2, 'enumValues', | 454 checkElementLists(enum1, enum2, 'enumValues', |
| 439 enum1.enumValues, enum2.enumValues); | 455 enum1.enumValues, enum2.enumValues); |
| 440 } | 456 } |
| 441 if (!element1.isObject) { | 457 if (!element1.isObject) { |
| 442 checkTypes(element1, element2, 'supertype', | 458 checkTypes(element1, element2, 'supertype', |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 element1.type, element2.type); | 524 element1.type, element2.type); |
| 509 checkConstants( | 525 checkConstants( |
| 510 element1, element2, 'constant', | 526 element1, element2, 'constant', |
| 511 element1.constant, element2.constant); | 527 element1.constant, element2.constant); |
| 512 check(element1, element2, 'isTopLevel', | 528 check(element1, element2, 'isTopLevel', |
| 513 element1.isTopLevel, element2.isTopLevel); | 529 element1.isTopLevel, element2.isTopLevel); |
| 514 check(element1, element2, 'isStatic', | 530 check(element1, element2, 'isStatic', |
| 515 element1.isStatic, element2.isStatic); | 531 element1.isStatic, element2.isStatic); |
| 516 check(element1, element2, 'isInstanceMember', | 532 check(element1, element2, 'isInstanceMember', |
| 517 element1.isInstanceMember, element2.isInstanceMember); | 533 element1.isInstanceMember, element2.isInstanceMember); |
| 534 check(element1, element2, 'isInjected', |
| 535 element1.isInjected, element2.isInjected); |
| 518 | 536 |
| 519 checkElementIdentities( | 537 checkElementIdentities( |
| 520 element1, element2, 'library', | 538 element1, element2, 'library', |
| 521 element1.library, element2.library); | 539 element1.library, element2.library); |
| 522 checkElementIdentities( | 540 checkElementIdentities( |
| 523 element1, element2, 'compilationUnit', | 541 element1, element2, 'compilationUnit', |
| 524 element1.compilationUnit, element2.compilationUnit); | 542 element1.compilationUnit, element2.compilationUnit); |
| 525 checkElementIdentities( | 543 checkElementIdentities( |
| 526 element1, element2, 'enclosingClass', | 544 element1, element2, 'enclosingClass', |
| 527 element1.enclosingClass, element2.enclosingClass); | 545 element1.enclosingClass, element2.enclosingClass); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 541 checkListEquivalence( | 559 checkListEquivalence( |
| 542 element1, element2, 'parameters', | 560 element1, element2, 'parameters', |
| 543 element1.parameters, element2.parameters, | 561 element1.parameters, element2.parameters, |
| 544 checkElementProperties); | 562 checkElementProperties); |
| 545 check(element1, element2, 'isOperator', | 563 check(element1, element2, 'isOperator', |
| 546 element1.isOperator, element2.isOperator); | 564 element1.isOperator, element2.isOperator); |
| 547 check( | 565 check( |
| 548 element1, element2, 'asyncMarker', | 566 element1, element2, 'asyncMarker', |
| 549 element1.asyncMarker, | 567 element1.asyncMarker, |
| 550 element2.asyncMarker); | 568 element2.asyncMarker); |
| 569 check(element1, element2, 'isInjected', |
| 570 element1.isInjected, element2.isInjected); |
| 551 | 571 |
| 552 checkElementIdentities( | 572 checkElementIdentities( |
| 553 element1, element2, 'library', | 573 element1, element2, 'library', |
| 554 element1.library, element2.library); | 574 element1.library, element2.library); |
| 555 checkElementIdentities( | 575 checkElementIdentities( |
| 556 element1, element2, 'compilationUnit', | 576 element1, element2, 'compilationUnit', |
| 557 element1.compilationUnit, element2.compilationUnit); | 577 element1.compilationUnit, element2.compilationUnit); |
| 558 checkElementIdentities( | 578 checkElementIdentities( |
| 559 element1, element2, 'enclosingClass', | 579 element1, element2, 'enclosingClass', |
| 560 element1.enclosingClass, element2.enclosingClass); | 580 element1.enclosingClass, element2.enclosingClass); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 check( | 665 check( |
| 646 element1, element2, 'effectiveTargetType.raw', | 666 element1, element2, 'effectiveTargetType.raw', |
| 647 element1.computeEffectiveTargetType(element1.enclosingClass.rawType), | 667 element1.computeEffectiveTargetType(element1.enclosingClass.rawType), |
| 648 element2.computeEffectiveTargetType(element2.enclosingClass.rawType), | 668 element2.computeEffectiveTargetType(element2.enclosingClass.rawType), |
| 649 areTypesEquivalent); | 669 areTypesEquivalent); |
| 650 checkElementIdentities(element1, element2, 'immediateRedirectionTarget', | 670 checkElementIdentities(element1, element2, 'immediateRedirectionTarget', |
| 651 element1.immediateRedirectionTarget, | 671 element1.immediateRedirectionTarget, |
| 652 element2.immediateRedirectionTarget); | 672 element2.immediateRedirectionTarget); |
| 653 checkElementIdentities(element1, element2, 'redirectionDeferredPrefix', | 673 checkElementIdentities(element1, element2, 'redirectionDeferredPrefix', |
| 654 element1.redirectionDeferredPrefix, element2.redirectionDeferredPrefix); | 674 element1.redirectionDeferredPrefix, element2.redirectionDeferredPrefix); |
| 675 check(element1, element2, 'isInjected', |
| 676 element1.isInjected, element2.isInjected); |
| 655 } | 677 } |
| 656 | 678 |
| 657 @override | 679 @override |
| 658 void visitAbstractFieldElement(AbstractFieldElement element1, | 680 void visitAbstractFieldElement(AbstractFieldElement element1, |
| 659 AbstractFieldElement element2) { | 681 AbstractFieldElement element2) { |
| 660 visit(element1.getter, element2.getter); | 682 visit(element1.getter, element2.getter); |
| 661 visit(element1.setter, element2.setter); | 683 visit(element1.setter, element2.setter); |
| 662 } | 684 } |
| 663 | 685 |
| 664 @override | 686 @override |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { | 786 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { |
| 765 check( | 787 check( |
| 766 element1, element2, 'isDeferred', | 788 element1, element2, 'isDeferred', |
| 767 element1.isDeferred, element2.isDeferred); | 789 element1.isDeferred, element2.isDeferred); |
| 768 checkElementIdentities( | 790 checkElementIdentities( |
| 769 element1, element2, 'importedLibrary', | 791 element1, element2, 'importedLibrary', |
| 770 element1.deferredImport, element2.deferredImport); | 792 element1.deferredImport, element2.deferredImport); |
| 771 // TODO(johnniwinther): Check members. | 793 // TODO(johnniwinther): Check members. |
| 772 } | 794 } |
| 773 } | 795 } |
| OLD | NEW |