| 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_model_test; | 5 library dart2js.serialization_model_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:io'; | 8 import 'dart:io'; |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:expect/expect.dart'; | 10 import 'package:expect/expect.dart'; |
| 11 import 'package:compiler/src/closure.dart'; | 11 import 'package:compiler/src/closure.dart'; |
| 12 import 'package:compiler/src/commandline_options.dart'; | 12 import 'package:compiler/src/commandline_options.dart'; |
| 13 import 'package:compiler/src/common.dart'; | 13 import 'package:compiler/src/common.dart'; |
| 14 import 'package:compiler/src/constants/values.dart'; | 14 import 'package:compiler/src/constants/values.dart'; |
| 15 import 'package:compiler/src/compiler.dart'; | 15 import 'package:compiler/src/compiler.dart'; |
| 16 import 'package:compiler/src/elements/resolution_types.dart'; | 16 import 'package:compiler/src/elements/resolution_types.dart'; |
| 17 import 'package:compiler/src/deferred_load.dart'; | 17 import 'package:compiler/src/deferred_load.dart'; |
| 18 import 'package:compiler/src/elements/elements.dart'; | 18 import 'package:compiler/src/elements/elements.dart'; |
| 19 import 'package:compiler/src/elements/entities.dart'; | 19 import 'package:compiler/src/elements/entities.dart'; |
| 20 import 'package:compiler/src/enqueue.dart'; | 20 import 'package:compiler/src/enqueue.dart'; |
| 21 import 'package:compiler/src/filenames.dart'; | 21 import 'package:compiler/src/filenames.dart'; |
| 22 import 'package:compiler/src/js_backend/js_backend.dart'; | 22 import 'package:compiler/src/js_backend/js_backend.dart'; |
| 23 import 'package:compiler/src/js_backend/backend_usage.dart'; |
| 23 import 'package:compiler/src/serialization/equivalence.dart'; | 24 import 'package:compiler/src/serialization/equivalence.dart'; |
| 24 import 'package:compiler/src/tree/nodes.dart'; | 25 import 'package:compiler/src/tree/nodes.dart'; |
| 25 import 'package:compiler/src/universe/class_set.dart'; | 26 import 'package:compiler/src/universe/class_set.dart'; |
| 26 import 'package:compiler/src/universe/world_builder.dart'; | 27 import 'package:compiler/src/universe/world_builder.dart'; |
| 27 import 'package:compiler/src/util/enumset.dart'; | 28 import 'package:compiler/src/util/enumset.dart'; |
| 28 import 'package:compiler/src/world.dart' show ClosedWorld; | 29 import 'package:compiler/src/world.dart' show ClosedWorld; |
| 29 import '../memory_compiler.dart'; | 30 import '../memory_compiler.dart'; |
| 30 import 'helper.dart'; | 31 import 'helper.dart'; |
| 31 import 'test_data.dart'; | 32 import 'test_data.dart'; |
| 32 import 'test_helper.dart'; | 33 import 'test_helper.dart'; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 options: [Flags.analyzeOnly]); | 91 options: [Flags.analyzeOnly]); |
| 91 compilerDeserialized.resolution.retainCachesForTesting = true; | 92 compilerDeserialized.resolution.retainCachesForTesting = true; |
| 92 await compilerDeserialized.run(entryPoint); | 93 await compilerDeserialized.run(entryPoint); |
| 93 compilerDeserialized.closeResolution(); | 94 compilerDeserialized.closeResolution(); |
| 94 return compilerDeserialized; | 95 return compilerDeserialized; |
| 95 }); | 96 }); |
| 96 | 97 |
| 97 return measure(title, 'check models', () async { | 98 return measure(title, 'check models', () async { |
| 98 checkAllImpacts(compilerNormal, compilerDeserialized, verbose: verbose); | 99 checkAllImpacts(compilerNormal, compilerDeserialized, verbose: verbose); |
| 99 checkResolutionEnqueuers( | 100 checkResolutionEnqueuers( |
| 100 compilerNormal.backend, | 101 compilerNormal.backend.backendUsage, |
| 101 compilerDeserialized.backend, | 102 compilerDeserialized.backend.backendUsage, |
| 102 compilerNormal.enqueuer.resolution, | 103 compilerNormal.enqueuer.resolution, |
| 103 compilerDeserialized.enqueuer.resolution, | 104 compilerDeserialized.enqueuer.resolution, |
| 104 verbose: verbose); | 105 verbose: verbose); |
| 105 checkClosedWorlds( | 106 checkClosedWorlds( |
| 106 compilerNormal.resolutionWorldBuilder.closedWorldForTesting, | 107 compilerNormal.resolutionWorldBuilder.closedWorldForTesting, |
| 107 compilerDeserialized.resolutionWorldBuilder.closedWorldForTesting, | 108 compilerDeserialized.resolutionWorldBuilder.closedWorldForTesting, |
| 108 verbose: verbose); | 109 verbose: verbose); |
| 109 checkBackendInfo(compilerNormal, compilerDeserialized, verbose: verbose); | 110 checkBackendInfo(compilerNormal, compilerDeserialized, verbose: verbose); |
| 110 }); | 111 }); |
| 111 } | 112 } |
| 112 | 113 |
| 113 void checkResolutionEnqueuers( | 114 void checkResolutionEnqueuers( |
| 114 JavaScriptBackend backend1, | 115 BackendUsage backendUsage1, |
| 115 JavaScriptBackend backend2, | 116 BackendUsage backendUsage2, |
| 116 ResolutionEnqueuer enqueuer1, | 117 ResolutionEnqueuer enqueuer1, |
| 117 ResolutionEnqueuer enqueuer2, | 118 ResolutionEnqueuer enqueuer2, |
| 118 {bool typeEquivalence(ResolutionDartType a, ResolutionDartType b): | 119 {bool typeEquivalence(ResolutionDartType a, ResolutionDartType b): |
| 119 areTypesEquivalent, | 120 areTypesEquivalent, |
| 120 bool elementFilter(Element element), | 121 bool elementFilter(Element element), |
| 121 bool verbose: false}) { | 122 bool verbose: false}) { |
| 122 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, | 123 checkSets(enqueuer1.processedEntities, enqueuer2.processedEntities, |
| 123 "Processed element mismatch", areElementsEquivalent, | 124 "Processed element mismatch", areElementsEquivalent, |
| 124 elementFilter: elementFilter, verbose: verbose); | 125 elementFilter: elementFilter, verbose: verbose); |
| 125 | 126 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 145 enqueuer1.worldBuilder.instantiatedTypes, | 146 enqueuer1.worldBuilder.instantiatedTypes, |
| 146 enqueuer2.worldBuilder.instantiatedTypes, | 147 enqueuer2.worldBuilder.instantiatedTypes, |
| 147 "Instantiated types mismatch", | 148 "Instantiated types mismatch", |
| 148 typeEquivalence, | 149 typeEquivalence, |
| 149 verbose: verbose); | 150 verbose: verbose); |
| 150 | 151 |
| 151 checkSets(enqueuer1.worldBuilder.isChecks, enqueuer2.worldBuilder.isChecks, | 152 checkSets(enqueuer1.worldBuilder.isChecks, enqueuer2.worldBuilder.isChecks, |
| 152 "Is-check mismatch", typeEquivalence, | 153 "Is-check mismatch", typeEquivalence, |
| 153 verbose: verbose); | 154 verbose: verbose); |
| 154 | 155 |
| 155 Expect.equals(backend1.hasInvokeOnSupport, backend2.hasInvokeOnSupport, | 156 Expect.equals(backendUsage1.isInvokeOnUsed, backendUsage2.isInvokeOnUsed, |
| 156 "JavaScriptBackend.hasInvokeOnSupport mismatch"); | 157 "JavaScriptBackend.hasInvokeOnSupport mismatch"); |
| 157 Expect.equals( | 158 Expect.equals( |
| 158 backend1.hasFunctionApplySupport, | 159 backendUsage1.isFunctionApplyUsed, |
| 159 backend2.hasFunctionApplySupport, | 160 backendUsage1.isFunctionApplyUsed, |
| 160 "JavaScriptBackend.hasFunctionApplySupport mismatch"); | 161 "JavaScriptBackend.hasFunctionApplySupport mismatch"); |
| 161 Expect.equals(backend1.hasRuntimeTypeSupport, backend2.hasRuntimeTypeSupport, | 162 Expect.equals( |
| 163 backendUsage1.isRuntimeTypeUsed, |
| 164 backendUsage2.isRuntimeTypeUsed, |
| 162 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); | 165 "JavaScriptBackend.hasRuntimeTypeSupport mismatch"); |
| 163 Expect.equals(backend1.hasIsolateSupport, backend2.hasIsolateSupport, | 166 Expect.equals(backendUsage1.isIsolateInUse, backendUsage2.isIsolateInUse, |
| 164 "JavaScriptBackend.hasIsolateSupport mismatch"); | 167 "JavaScriptBackend.hasIsolateSupport mismatch"); |
| 165 } | 168 } |
| 166 | 169 |
| 167 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, | 170 void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2, |
| 168 {bool verbose: false}) { | 171 {bool verbose: false}) { |
| 169 checkClassHierarchyNodes( | 172 checkClassHierarchyNodes( |
| 170 closedWorld1, | 173 closedWorld1, |
| 171 closedWorld2, | 174 closedWorld2, |
| 172 closedWorld1 | 175 closedWorld1 |
| 173 .getClassHierarchyNode(closedWorld1.commonElements.objectClass), | 176 .getClassHierarchyNode(closedWorld1.commonElements.objectClass), |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 a, b, (a, b) => areInstancesEquivalent(a, b, typeEquivalence))); | 448 a, b, (a, b) => areInstancesEquivalent(a, b, typeEquivalence))); |
| 446 return true; | 449 return true; |
| 447 } | 450 } |
| 448 | 451 |
| 449 bool areInstancesEquivalent(Instance instance1, Instance instance2, | 452 bool areInstancesEquivalent(Instance instance1, Instance instance2, |
| 450 bool typeEquivalence(ResolutionDartType a, ResolutionDartType b)) { | 453 bool typeEquivalence(ResolutionDartType a, ResolutionDartType b)) { |
| 451 return typeEquivalence(instance1.type, instance2.type) && | 454 return typeEquivalence(instance1.type, instance2.type) && |
| 452 instance1.kind == instance2.kind && | 455 instance1.kind == instance2.kind && |
| 453 instance1.isRedirection == instance2.isRedirection; | 456 instance1.isRedirection == instance2.isRedirection; |
| 454 } | 457 } |
| OLD | NEW |