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

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

Issue 2194173002: Include constants in deferred computation. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 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
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';
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/compiler.dart'; 15 import 'package:compiler/src/compiler.dart';
15 import 'package:compiler/src/deferred_load.dart'; 16 import 'package:compiler/src/deferred_load.dart';
16 import 'package:compiler/src/elements/elements.dart'; 17 import 'package:compiler/src/elements/elements.dart';
17 import 'package:compiler/src/filenames.dart'; 18 import 'package:compiler/src/filenames.dart';
18 import 'package:compiler/src/js_backend/js_backend.dart'; 19 import 'package:compiler/src/js_backend/js_backend.dart';
19 import 'package:compiler/src/serialization/equivalence.dart'; 20 import 'package:compiler/src/serialization/equivalence.dart';
20 import 'package:compiler/src/tree/nodes.dart'; 21 import 'package:compiler/src/tree/nodes.dart';
21 import 'package:compiler/src/universe/class_set.dart'; 22 import 'package:compiler/src/universe/class_set.dart';
22 import '../memory_compiler.dart'; 23 import '../memory_compiler.dart';
23 import 'helper.dart'; 24 import 'helper.dart';
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 Expect.equals(compilerNormal.enabledRuntimeType, 149 Expect.equals(compilerNormal.enabledRuntimeType,
149 compilerDeserialized.enabledRuntimeType, 150 compilerDeserialized.enabledRuntimeType,
150 "Compiler.enabledRuntimeType mismatch"); 151 "Compiler.enabledRuntimeType mismatch");
151 Expect.equals(compilerNormal.hasIsolateSupport, 152 Expect.equals(compilerNormal.hasIsolateSupport,
152 compilerDeserialized.hasIsolateSupport, 153 compilerDeserialized.hasIsolateSupport,
153 "Compiler.hasIsolateSupport mismatch"); 154 "Compiler.hasIsolateSupport mismatch");
154 Expect.equals( 155 Expect.equals(
155 compilerNormal.deferredLoadTask.isProgramSplit, 156 compilerNormal.deferredLoadTask.isProgramSplit,
156 compilerDeserialized.deferredLoadTask.isProgramSplit, 157 compilerDeserialized.deferredLoadTask.isProgramSplit,
157 "isProgramSplit mismatch"); 158 "isProgramSplit mismatch");
159
160 Map<ConstantValue, OutputUnit> constants1 =
161 compilerNormal.deferredLoadTask.outputUnitForConstantsForTesting;
162 Map<ConstantValue, OutputUnit> constants2 =
163 compilerDeserialized.deferredLoadTask.outputUnitForConstantsForTesting;
164 checkSets(
165 constants1.keys,
166 constants2.keys,
167 'deferredLoadTask._outputUnitForConstants.keys',
168 areConstantValuesEquivalent,
169 failOnUnfound: false,
170 failOnExtra: false,
171 onSameElement: (ConstantValue value1, ConstantValue value2) {
172 OutputUnit outputUnit1 = constants1[value1];
173 OutputUnit outputUnit2 = constants2[value2];
174 checkOutputUnits(outputUnit1, outputUnit2,
175 'for ${value1.toStructuredText()} '
176 'vs ${value2.toStructuredText()}');
177 },
178 onUnfoundElement: (ConstantValue value1) {
179 OutputUnit outputUnit1 = constants1[value1];
180 Expect.isTrue(outputUnit1.isMainOutput,
181 "Missing deferred constant: ${value1.toStructuredText()}");
182 },
183 onExtraElement: (ConstantValue value2) {
184 OutputUnit outputUnit2 = constants2[value2];
185 Expect.isTrue(outputUnit2.isMainOutput,
186 "Extra deferred constant: ${value2.toStructuredText()}");
187 },
188 elementToString: (a) {
189 return '${a.toStructuredText()} -> ${constants1[a]}/${constants2[a]}';
190 });
158 }); 191 });
159 } 192 }
160 193
161 void checkElements( 194 void checkElements(
162 Compiler compiler1, Compiler compiler2, 195 Compiler compiler1, Compiler compiler2,
163 Element element1, Element element2, 196 Element element1, Element element2,
164 {bool verbose: false}) { 197 {bool verbose: false}) {
165 if (element1.isFunction || 198 if (element1.isFunction ||
166 element1.isConstructor || 199 element1.isConstructor ||
167 (element1.isField && element1.isInstanceMember)) { 200 (element1.isField && element1.isInstanceMember)) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 }); 264 });
232 } 265 }
233 } 266 }
234 JavaScriptBackend backend1 = compiler1.backend; 267 JavaScriptBackend backend1 = compiler1.backend;
235 JavaScriptBackend backend2 = compiler2.backend; 268 JavaScriptBackend backend2 = compiler2.backend;
236 Expect.equals( 269 Expect.equals(
237 backend1.inlineCache.getCurrentCacheDecisionForTesting(element1), 270 backend1.inlineCache.getCurrentCacheDecisionForTesting(element1),
238 backend2.inlineCache.getCurrentCacheDecisionForTesting(element2), 271 backend2.inlineCache.getCurrentCacheDecisionForTesting(element2),
239 "Inline cache decision mismatch for $element1 vs $element2"); 272 "Inline cache decision mismatch for $element1 vs $element2");
240 273
241 checkOutputUnits(compiler1, compiler2, element1, element2); 274 checkElementOutputUnits(compiler1, compiler2, element1, element2);
242 } 275 }
243 276
244 void checkMixinUses( 277 void checkMixinUses(
245 Compiler compiler1, Compiler compiler2, 278 Compiler compiler1, Compiler compiler2,
246 ClassElement class1, ClassElement class2, 279 ClassElement class1, ClassElement class2,
247 {bool verbose: false}) { 280 {bool verbose: false}) {
248 281
249 checkSets( 282 checkSets(
250 compiler1.world.mixinUsesOf(class1), 283 compiler1.world.mixinUsesOf(class1),
251 compiler2.world.mixinUsesOf(class2), 284 compiler2.world.mixinUsesOf(class2),
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 } 380 }
348 381
349 String nodeToString(Node node) { 382 String nodeToString(Node node) {
350 String text = '$node'; 383 String text = '$node';
351 if (text.length > 40) { 384 if (text.length > 40) {
352 return '(${node.runtimeType}) ${text.substring(0, 37)}...'; 385 return '(${node.runtimeType}) ${text.substring(0, 37)}...';
353 } 386 }
354 return '(${node.runtimeType}) $text'; 387 return '(${node.runtimeType}) $text';
355 } 388 }
356 389
357 void checkOutputUnits(Compiler compiler1, Compiler compiler2, Element element1, 390 void checkElementOutputUnits(
358 Element element2) { 391 Compiler compiler1, Compiler compiler2,
392 Element element1, Element element2) {
359 OutputUnit outputUnit1 = 393 OutputUnit outputUnit1 =
360 compiler1.deferredLoadTask.outputUnitForElement(element1); 394 compiler1.deferredLoadTask.getOutputUnitForElementForTesting(element1);
361 OutputUnit outputUnit2 = 395 OutputUnit outputUnit2 =
362 compiler2.deferredLoadTask.outputUnitForElement(element2); 396 compiler2.deferredLoadTask.getOutputUnitForElementForTesting(element2);
397 checkOutputUnits(outputUnit1, outputUnit2, 'for $element1 vs $element2');
398 }
399
400 void checkOutputUnits(
401 OutputUnit outputUnit1, OutputUnit outputUnit2, String message) {
402 if (outputUnit1 == null && outputUnit2 == null) return;
363 check(outputUnit1, outputUnit2, 403 check(outputUnit1, outputUnit2,
364 'OutputUnit.isMainOutput for $element1 vs $element2', 404 'OutputUnit.isMainOutput $message',
365 outputUnit1.isMainOutput, outputUnit2.isMainOutput); 405 outputUnit1.isMainOutput, outputUnit2.isMainOutput);
366 checkSetEquivalence(outputUnit1, outputUnit2, 406 checkSetEquivalence(outputUnit1, outputUnit2,
367 'OutputUnit.imports for $element1 vs $element2', 407 'OutputUnit.imports $message',
368 outputUnit1.imports, outputUnit2.imports, 408 outputUnit1.imports, outputUnit2.imports,
369 (a, b) => areElementsEquivalent(a.declaration, b.declaration)); 409 (a, b) => areElementsEquivalent(a.declaration, b.declaration));
370 } 410 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698