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

Side by Side Diff: tests/compiler/dart2js/serialization/model_test.dart

Issue 1961323002: Register mixin use from modelz. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 7 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
« no previous file with comments | « pkg/compiler/lib/src/world.dart ('k') | no next file » | 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) 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';
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 bool verbose: false}) async { 59 bool verbose: false}) async {
60 60
61 print('------------------------------------------------------------------'); 61 print('------------------------------------------------------------------');
62 print('compile normal'); 62 print('compile normal');
63 print('------------------------------------------------------------------'); 63 print('------------------------------------------------------------------');
64 Compiler compilerNormal = compilerFor( 64 Compiler compilerNormal = compilerFor(
65 memorySourceFiles: sourceFiles, 65 memorySourceFiles: sourceFiles,
66 options: [Flags.analyzeOnly]); 66 options: [Flags.analyzeOnly]);
67 compilerNormal.resolution.retainCachesForTesting = true; 67 compilerNormal.resolution.retainCachesForTesting = true;
68 await compilerNormal.run(entryPoint); 68 await compilerNormal.run(entryPoint);
69 compilerNormal.phase = Compiler.PHASE_DONE_RESOLVING;
69 compilerNormal.world.populate(); 70 compilerNormal.world.populate();
70 71
71 print('------------------------------------------------------------------'); 72 print('------------------------------------------------------------------');
72 print('compile deserialized'); 73 print('compile deserialized');
73 print('------------------------------------------------------------------'); 74 print('------------------------------------------------------------------');
74 Compiler compilerDeserialized = compilerFor( 75 Compiler compilerDeserialized = compilerFor(
75 memorySourceFiles: sourceFiles, 76 memorySourceFiles: sourceFiles,
76 options: [Flags.analyzeOnly]); 77 options: [Flags.analyzeOnly]);
77 compilerDeserialized.resolution.retainCachesForTesting = true; 78 compilerDeserialized.resolution.retainCachesForTesting = true;
78 deserialize(compilerDeserialized, serializedData); 79 deserialize(compilerDeserialized, serializedData);
79 await compilerDeserialized.run(entryPoint); 80 await compilerDeserialized.run(entryPoint);
81 compilerDeserialized.phase = Compiler.PHASE_DONE_RESOLVING;
80 compilerDeserialized.world.populate(); 82 compilerDeserialized.world.populate();
81 83
82 checkAllImpacts( 84 checkAllImpacts(
83 compilerNormal, compilerDeserialized, 85 compilerNormal, compilerDeserialized,
84 verbose: verbose); 86 verbose: verbose);
85 87
86 checkSets( 88 checkSets(
87 compilerNormal.resolverWorld.directlyInstantiatedClasses, 89 compilerNormal.resolverWorld.directlyInstantiatedClasses,
88 compilerDeserialized.resolverWorld.directlyInstantiatedClasses, 90 compilerDeserialized.resolverWorld.directlyInstantiatedClasses,
89 "Directly instantiated classes mismatch", 91 "Directly instantiated classes mismatch",
(...skipping 15 matching lines...) Expand all
105 verbose: verbose); 107 verbose: verbose);
106 108
107 checkSets( 109 checkSets(
108 compilerNormal.enqueuer.resolution.processedElements, 110 compilerNormal.enqueuer.resolution.processedElements,
109 compilerDeserialized.enqueuer.resolution.processedElements, 111 compilerDeserialized.enqueuer.resolution.processedElements,
110 "Processed element mismatch", 112 "Processed element mismatch",
111 areElementsEquivalent, 113 areElementsEquivalent,
112 verbose: verbose); 114 verbose: verbose);
113 115
114 checkClassHierarchyNodes( 116 checkClassHierarchyNodes(
115 compilerNormal.world.getClassHierarchyNode( 117 compilerNormal,
116 compilerNormal.coreClasses.objectClass), 118 compilerDeserialized,
117 compilerDeserialized.world.getClassHierarchyNode( 119 compilerNormal.world.getClassHierarchyNode(
118 compilerDeserialized.coreClasses.objectClass), 120 compilerNormal.coreClasses.objectClass),
119 verbose: verbose); 121 compilerDeserialized.world.getClassHierarchyNode(
122 compilerDeserialized.coreClasses.objectClass),
123 verbose: verbose);
124 }
125
126 void checkMixinUses(
127 Compiler compiler1, Compiler compiler2,
128 ClassElement class1, ClassElement class2,
129 {bool verbose: false}) {
130
131 checkSets(
132 compiler1.world.mixinUsesOf(class1),
133 compiler2.world.mixinUsesOf(class2),
134 "Mixin uses of $class1 vs $class2",
135 areElementsEquivalent,
136 verbose: verbose);
137
120 } 138 }
121 139
122 void checkClassHierarchyNodes( 140 void checkClassHierarchyNodes(
123 ClassHierarchyNode a, ClassHierarchyNode b, 141 Compiler compiler1,
142 Compiler compiler2,
143 ClassHierarchyNode node1, ClassHierarchyNode node2,
124 {bool verbose: false}) { 144 {bool verbose: false}) {
125 if (verbose) { 145 if (verbose) {
126 print('Checking $a vs $b'); 146 print('Checking $node1 vs $node2');
127 } 147 }
128 Expect.isTrue( 148 Expect.isTrue(
129 areElementsEquivalent(a.cls, b.cls), 149 areElementsEquivalent(node1.cls, node2.cls),
130 "Element identity mismatch for ${a.cls} vs ${b.cls}."); 150 "Element identity mismatch for ${node1.cls} vs ${node2.cls}.");
131 Expect.equals( 151 Expect.equals(
132 a.isDirectlyInstantiated, 152 node1.isDirectlyInstantiated,
133 b.isDirectlyInstantiated, 153 node2.isDirectlyInstantiated,
134 "Value mismatch for 'isDirectlyInstantiated' for ${a.cls} vs ${b.cls}."); 154 "Value mismatch for 'isDirectlyInstantiated' "
155 "for ${node1.cls} vs ${node2.cls}.");
135 Expect.equals( 156 Expect.equals(
136 a.isIndirectlyInstantiated, 157 node1.isIndirectlyInstantiated,
137 b.isIndirectlyInstantiated, 158 node2.isIndirectlyInstantiated,
138 "Value mismatch for 'isIndirectlyInstantiated' " 159 "Value mismatch for 'isIndirectlyInstantiated' "
139 "for ${a.cls} vs ${b.cls}."); 160 "for ${node1.cls} vs ${node2.cls}.");
140 // TODO(johnniwinther): Enforce a canonical and stable order on direct 161 // TODO(johnniwinther): Enforce a canonical and stable order on direct
141 // subclasses. 162 // subclasses.
142 for (ClassHierarchyNode child in a.directSubclasses) { 163 for (ClassHierarchyNode child in node1.directSubclasses) {
143 bool found = false; 164 bool found = false;
144 for (ClassHierarchyNode other in b.directSubclasses) { 165 for (ClassHierarchyNode other in node2.directSubclasses) {
145 if (areElementsEquivalent(child.cls, other.cls)) { 166 if (areElementsEquivalent(child.cls, other.cls)) {
146 checkClassHierarchyNodes(child, other, 167 checkClassHierarchyNodes(compiler1, compiler2,
147 verbose: verbose); 168 child, other, verbose: verbose);
148 found = true; 169 found = true;
149 break; 170 break;
150 } 171 }
151 } 172 }
152 if (!found) { 173 if (!found) {
153 Expect.isFalse( 174 Expect.isFalse(child.isInstantiated,
154 child.isInstantiated, 'Missing subclass ${child.cls} of ${a.cls}'); 175 'Missing subclass ${child.cls} of ${node1.cls}');
155 } 176 }
156 } 177 }
178 checkMixinUses(compiler1, compiler2, node1.cls, node2.cls, verbose: verbose);
157 } 179 }
158 180
159 void checkSets( 181 void checkSets(
160 Iterable set1, 182 Iterable set1,
161 Iterable set2, 183 Iterable set2,
162 String messagePrefix, 184 String messagePrefix,
163 bool areEquivalent(a, b), 185 bool areEquivalent(a, b),
164 {bool failOnUnfound: true, 186 {bool failOnUnfound: true,
165 bool verbose: false}) { 187 bool verbose: false}) {
166 List common = []; 188 List common = [];
(...skipping 16 matching lines...) Expand all
183 205
184 if (failOnUnfound || remaining.isNotEmpty) { 206 if (failOnUnfound || remaining.isNotEmpty) {
185 Expect.fail(message); 207 Expect.fail(message);
186 } else { 208 } else {
187 print(message); 209 print(message);
188 } 210 }
189 } else if (verbose) { 211 } else if (verbose) {
190 print(message); 212 print(message);
191 } 213 }
192 } 214 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/world.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698