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

Unified Diff: tests/compiler/dart2js/serialization/model_test_helper.dart

Issue 2488353004: Remove Compiler access from ResolutionEnqueuer (Closed)
Patch Set: Updated cf. comments. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js/serialization/model_test_helper.dart
diff --git a/tests/compiler/dart2js/serialization/model_test_helper.dart b/tests/compiler/dart2js/serialization/model_test_helper.dart
index 9a4484a4a14530e25aab862dfd945f8e3baeafaa..8beea7d8d82123a0d9532ad08befbc572ba9bab1 100644
--- a/tests/compiler/dart2js/serialization/model_test_helper.dart
+++ b/tests/compiler/dart2js/serialization/model_test_helper.dart
@@ -13,13 +13,16 @@ import 'package:compiler/src/commandline_options.dart';
import 'package:compiler/src/common.dart';
import 'package:compiler/src/constants/values.dart';
import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/dart_types.dart';
import 'package:compiler/src/deferred_load.dart';
import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/enqueue.dart';
import 'package:compiler/src/filenames.dart';
import 'package:compiler/src/js_backend/js_backend.dart';
import 'package:compiler/src/serialization/equivalence.dart';
import 'package:compiler/src/tree/nodes.dart';
import 'package:compiler/src/universe/class_set.dart';
+import 'package:compiler/src/world.dart' show ClosedWorld;
import '../memory_compiler.dart';
import 'helper.dart';
import 'test_data.dart';
@@ -36,8 +39,8 @@ main(List<String> args) {
Arguments arguments = new Arguments.from(args);
SerializedData serializedData =
await serializeDartCore(arguments: arguments);
- if (arguments.filename != null) {
- Uri entryPoint = Uri.base.resolve(nativeToUriPath(arguments.filename));
+ if (arguments.uri != null) {
+ Uri entryPoint = arguments.uri;
SerializationResult result =
await measure('${entryPoint}', 'serialize', () {
return serialize(entryPoint,
@@ -90,97 +93,121 @@ Future checkModels(Uri entryPoint,
return measure(title, 'check models', () async {
checkAllImpacts(compilerNormal, compilerDeserialized, verbose: verbose);
-
- checkSets(
- compilerNormal.resolverWorld.directlyInstantiatedClasses,
- compilerDeserialized.resolverWorld.directlyInstantiatedClasses,
- "Directly instantiated classes mismatch",
- areElementsEquivalent,
+ checkResolutionEnqueuers(compilerNormal.enqueuer.resolution,
+ compilerDeserialized.enqueuer.resolution,
verbose: verbose);
-
- checkSets(
- compilerNormal.resolverWorld.instantiatedTypes,
- compilerDeserialized.resolverWorld.instantiatedTypes,
- "Instantiated types mismatch",
- areTypesEquivalent,
+ checkClosedWorlds(
+ compilerNormal.closedWorld, compilerDeserialized.closedWorld,
verbose: verbose);
+ checkBackendInfo(compilerNormal, compilerDeserialized, verbose: verbose);
+ });
+}
- checkSets(
- compilerNormal.resolverWorld.isChecks,
- compilerDeserialized.resolverWorld.isChecks,
- "Is-check mismatch",
- areTypesEquivalent,
- verbose: verbose);
+void checkResolutionEnqueuers(
+ ResolutionEnqueuer enqueuer1, ResolutionEnqueuer enqueuer2,
+ {bool typeEquivalence(DartType a, DartType b): areTypesEquivalent,
+ bool elementFilter(Element element),
+ bool verbose: false}) {
+ Iterable<Element> processedElements1 = enqueuer1.processedElements;
+ Iterable<Element> processedElements2 = enqueuer2.processedElements;
+ if (elementFilter != null) {
+ processedElements1 = processedElements1.where(elementFilter);
+ processedElements2 = processedElements2.where(elementFilter);
+ }
- checkSets(
- compilerNormal.enqueuer.resolution.processedElements,
- compilerDeserialized.enqueuer.resolution.processedElements,
- "Processed element mismatch",
- areElementsEquivalent, onSameElement: (a, b) {
- checkElements(compilerNormal, compilerDeserialized, a, b,
- verbose: verbose);
- }, verbose: verbose);
+ checkSets(processedElements1, processedElements2,
+ "Processed element mismatch", areElementsEquivalent,
+ verbose: verbose);
- checkClassHierarchyNodes(
- compilerNormal,
- compilerDeserialized,
- compilerNormal.closedWorld
- .getClassHierarchyNode(compilerNormal.coreClasses.objectClass),
- compilerDeserialized.closedWorld.getClassHierarchyNode(
- compilerDeserialized.coreClasses.objectClass),
- verbose: verbose);
+ checkSets(
+ enqueuer1.universe.directlyInstantiatedClasses,
+ enqueuer2.universe.directlyInstantiatedClasses,
+ "Directly instantiated classes mismatch",
+ areElementsEquivalent,
+ verbose: verbose);
- Expect.equals(
- compilerNormal.enabledInvokeOn,
- compilerDeserialized.enabledInvokeOn,
- "Compiler.enabledInvokeOn mismatch");
- Expect.equals(
- compilerNormal.enabledFunctionApply,
- compilerDeserialized.enabledFunctionApply,
- "Compiler.enabledFunctionApply mismatch");
- Expect.equals(
- compilerNormal.enabledRuntimeType,
- compilerDeserialized.enabledRuntimeType,
- "Compiler.enabledRuntimeType mismatch");
- Expect.equals(
- compilerNormal.hasIsolateSupport,
- compilerDeserialized.hasIsolateSupport,
- "Compiler.hasIsolateSupport mismatch");
- Expect.equals(
- compilerNormal.deferredLoadTask.isProgramSplit,
- compilerDeserialized.deferredLoadTask.isProgramSplit,
- "isProgramSplit mismatch");
+ checkSets(
+ enqueuer1.universe.instantiatedTypes,
+ enqueuer2.universe.instantiatedTypes,
+ "Instantiated types mismatch",
+ typeEquivalence,
+ verbose: verbose);
- Map<ConstantValue, OutputUnit> constants1 =
- compilerNormal.deferredLoadTask.outputUnitForConstantsForTesting;
- Map<ConstantValue, OutputUnit> constants2 =
- compilerDeserialized.deferredLoadTask.outputUnitForConstantsForTesting;
- checkSets(
- constants1.keys,
- constants2.keys,
- 'deferredLoadTask._outputUnitForConstants.keys',
- areConstantValuesEquivalent,
- failOnUnfound: false,
- failOnExtra: false,
- onSameElement: (ConstantValue value1, ConstantValue value2) {
- OutputUnit outputUnit1 = constants1[value1];
- OutputUnit outputUnit2 = constants2[value2];
- checkOutputUnits(
- outputUnit1,
- outputUnit2,
- 'for ${value1.toStructuredText()} '
- 'vs ${value2.toStructuredText()}');
- }, onUnfoundElement: (ConstantValue value1) {
- OutputUnit outputUnit1 = constants1[value1];
- Expect.isTrue(outputUnit1.isMainOutput,
- "Missing deferred constant: ${value1.toStructuredText()}");
- }, onExtraElement: (ConstantValue value2) {
- OutputUnit outputUnit2 = constants2[value2];
- Expect.isTrue(outputUnit2.isMainOutput,
- "Extra deferred constant: ${value2.toStructuredText()}");
- }, elementToString: (a) {
- return '${a.toStructuredText()} -> ${constants1[a]}/${constants2[a]}';
- });
+ checkSets(enqueuer1.universe.isChecks, enqueuer2.universe.isChecks,
+ "Is-check mismatch", typeEquivalence,
+ verbose: verbose);
+
+ JavaScriptBackend backend1 = enqueuer1.backend;
+ JavaScriptBackend backend2 = enqueuer2.backend;
+ Expect.equals(backend1.hasInvokeOnSupport,
+ backend2.hasInvokeOnSupport, "Compiler.enabledInvokeOn mismatch");
+ Expect.equals(
+ enqueuer1.universe.hasFunctionApplySupport,
+ enqueuer2.universe.hasFunctionApplySupport,
+ "ResolutionEnqueuer.universe.hasFunctionApplySupport mismatch");
+ Expect.equals(
+ enqueuer1.universe.hasRuntimeTypeSupport,
+ enqueuer2.universe.hasRuntimeTypeSupport,
+ "ResolutionEnqueuer.universe.hasRuntimeTypeSupport mismatch");
+ Expect.equals(
+ enqueuer1.universe.hasIsolateSupport,
+ enqueuer2.universe.hasIsolateSupport,
+ "ResolutionEnqueuer.universe.hasIsolateSupport mismatch");
+}
+
+void checkClosedWorlds(ClosedWorld closedWorld1, ClosedWorld closedWorld2,
+ {bool verbose: false}) {
+ checkClassHierarchyNodes(
+ closedWorld1,
+ closedWorld2,
+ closedWorld1.getClassHierarchyNode(closedWorld1.coreClasses.objectClass),
+ closedWorld2.getClassHierarchyNode(closedWorld2.coreClasses.objectClass),
+ verbose: verbose);
+}
+
+void checkBackendInfo(Compiler compilerNormal, Compiler compilerDeserialized,
+ {bool verbose: false}) {
+ checkSets(
+ compilerNormal.enqueuer.resolution.processedElements,
+ compilerDeserialized.enqueuer.resolution.processedElements,
+ "Processed element mismatch",
+ areElementsEquivalent, onSameElement: (a, b) {
+ checkElements(compilerNormal, compilerDeserialized, a, b, verbose: verbose);
+ }, verbose: verbose);
+ Expect.equals(
+ compilerNormal.deferredLoadTask.isProgramSplit,
+ compilerDeserialized.deferredLoadTask.isProgramSplit,
+ "isProgramSplit mismatch");
+
+ Map<ConstantValue, OutputUnit> constants1 =
+ compilerNormal.deferredLoadTask.outputUnitForConstantsForTesting;
+ Map<ConstantValue, OutputUnit> constants2 =
+ compilerDeserialized.deferredLoadTask.outputUnitForConstantsForTesting;
+ checkSets(
+ constants1.keys,
+ constants2.keys,
+ 'deferredLoadTask._outputUnitForConstants.keys',
+ areConstantValuesEquivalent,
+ failOnUnfound: false,
+ failOnExtra: false,
+ onSameElement: (ConstantValue value1, ConstantValue value2) {
+ OutputUnit outputUnit1 = constants1[value1];
+ OutputUnit outputUnit2 = constants2[value2];
+ checkOutputUnits(
+ outputUnit1,
+ outputUnit2,
+ 'for ${value1.toStructuredText()} '
+ 'vs ${value2.toStructuredText()}');
+ }, onUnfoundElement: (ConstantValue value1) {
+ OutputUnit outputUnit1 = constants1[value1];
+ Expect.isTrue(outputUnit1.isMainOutput,
+ "Missing deferred constant: ${value1.toStructuredText()}");
+ }, onExtraElement: (ConstantValue value2) {
+ OutputUnit outputUnit2 = constants2[value2];
+ Expect.isTrue(outputUnit2.isMainOutput,
+ "Extra deferred constant: ${value2.toStructuredText()}");
+ }, elementToString: (a) {
+ return '${a.toStructuredText()} -> ${constants1[a]}/${constants2[a]}';
});
}
@@ -260,19 +287,19 @@ void checkElements(
checkElementOutputUnits(compiler1, compiler2, element1, element2);
}
-void checkMixinUses(Compiler compiler1, Compiler compiler2, ClassElement class1,
- ClassElement class2,
+void checkMixinUses(ClosedWorld closedWorld1, ClosedWorld closedWorld2,
+ ClassElement class1, ClassElement class2,
{bool verbose: false}) {
- checkSets(
- compiler1.closedWorld.mixinUsesOf(class1),
- compiler2.closedWorld.mixinUsesOf(class2),
- "Mixin uses of $class1 vs $class2",
- areElementsEquivalent,
+ checkSets(closedWorld1.mixinUsesOf(class1), closedWorld2.mixinUsesOf(class2),
+ "Mixin uses of $class1 vs $class2", areElementsEquivalent,
verbose: verbose);
}
-void checkClassHierarchyNodes(Compiler compiler1, Compiler compiler2,
- ClassHierarchyNode node1, ClassHierarchyNode node2,
+void checkClassHierarchyNodes(
+ ClosedWorld closedWorld1,
+ ClosedWorld closedWorld2,
+ ClassHierarchyNode node1,
+ ClassHierarchyNode node2,
{bool verbose: false}) {
if (verbose) {
print('Checking $node1 vs $node2');
@@ -295,7 +322,7 @@ void checkClassHierarchyNodes(Compiler compiler1, Compiler compiler2,
bool found = false;
for (ClassHierarchyNode other in node2.directSubclasses) {
if (areElementsEquivalent(child.cls, other.cls)) {
- checkClassHierarchyNodes(compiler1, compiler2, child, other,
+ checkClassHierarchyNodes(closedWorld1, closedWorld2, child, other,
verbose: verbose);
found = true;
break;
@@ -305,10 +332,10 @@ void checkClassHierarchyNodes(Compiler compiler1, Compiler compiler2,
if (child.isInstantiated) {
print('Missing subclass ${child.cls} of ${node1.cls} '
'in ${node2.directSubclasses}');
- print(compiler1.closedWorld
- .dump(verbose ? compiler1.coreClasses.objectClass : node1.cls));
- print(compiler2.closedWorld
- .dump(verbose ? compiler2.coreClasses.objectClass : node2.cls));
+ print(closedWorld1
+ .dump(verbose ? closedWorld1.coreClasses.objectClass : node1.cls));
+ print(closedWorld2
+ .dump(verbose ? closedWorld2.coreClasses.objectClass : node2.cls));
}
Expect.isFalse(
child.isInstantiated,
@@ -316,7 +343,8 @@ void checkClassHierarchyNodes(Compiler compiler1, Compiler compiler2,
'${node2.directSubclasses}');
}
}
- checkMixinUses(compiler1, compiler2, node1.cls, node2.cls, verbose: verbose);
+ checkMixinUses(closedWorld1, closedWorld2, node1.cls, node2.cls,
+ verbose: verbose);
}
bool areLocalsEquivalent(Local a, Local b) {
« no previous file with comments | « tests/compiler/dart2js/serialization/helper.dart ('k') | tests/compiler/dart2js/simple_inferrer_and_or_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698