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

Unified Diff: tests/compiler/dart2js/kernel/closed_world2_test.dart

Issue 2827283002: Implement subtype relation for kernel based elements. (Closed)
Patch Set: Updated cf. comments Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js/kernel/closed_world2_test.dart
diff --git a/tests/compiler/dart2js/kernel/closed_world2_test.dart b/tests/compiler/dart2js/kernel/closed_world2_test.dart
index 5311557c33fdd6ef7074604b87e768a5f1720448..a18e859f1d14146a18aa4044366a8cad864f56e3 100644
--- a/tests/compiler/dart2js/kernel/closed_world2_test.dart
+++ b/tests/compiler/dart2js/kernel/closed_world2_test.dart
@@ -68,6 +68,20 @@ main(List<String> args) {
asyncTest(() async {
enableDebugMode();
+
+ print('---- analyze-only ------------------------------------------------');
+ Compiler compiler1 = compilerFor(
+ entryPoint: entryPoint,
+ memorySourceFiles: memorySourceFiles,
+ options: [Flags.analyzeOnly, Flags.enableAssertMessage]);
+ ElementResolutionWorldBuilder.useInstantiationMap = true;
+ compiler1.resolution.retainCachesForTesting = true;
+ await compiler1.run(entryPoint);
+ ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution;
+ BackendUsage backendUsage1 = compiler1.backend.backendUsage;
+ compiler1.resolutionWorldBuilder.closeWorld();
+
+ print('---- analyze-all -------------------------------------------------');
Compiler compiler = compilerFor(
entryPoint: entryPoint,
memorySourceFiles: memorySourceFiles,
@@ -76,11 +90,10 @@ main(List<String> args) {
Flags.useKernel,
Flags.enableAssertMessage
]);
- ElementResolutionWorldBuilder.useInstantiationMap = true;
- compiler.resolution.retainCachesForTesting = true;
await compiler.run(entryPoint);
compiler.resolutionWorldBuilder.closeWorld();
+ print('---- closed world from kernel ------------------------------------');
KernelWorldBuilder worldBuilder = new KernelWorldBuilder(
compiler.reporter, compiler.backend.kernelTask.program);
KernelEquivalence equivalence = new KernelEquivalence(worldBuilder);
@@ -94,8 +107,9 @@ main(List<String> args) {
worldBuilder,
nativeBasicData);
ResolutionEnqueuerListener resolutionEnqueuerListener = list[0];
- ImpactTransformer impactTransformer = list[1];
- ResolutionEnqueuer enqueuer = new ResolutionEnqueuer(
+ BackendUsageBuilder backendUsageBuilder2 = list[1];
+ ImpactTransformer impactTransformer = list[2];
+ ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer(
compiler.enqueuer,
compiler.options,
compiler.reporter,
@@ -108,9 +122,10 @@ main(List<String> args) {
const OpenWorldStrategy()),
new KernelWorkItemBuilder(worldBuilder, impactTransformer),
'enqueuer from kelements');
-
computeClosedWorld(
- compiler.reporter, enqueuer, worldBuilder.elementEnvironment);
+ compiler.reporter, enqueuer2, worldBuilder.elementEnvironment);
+ BackendUsage backendUsage2 = backendUsageBuilder2.close();
+ checkBackendUsage(backendUsage1, backendUsage2, equivalence);
});
}
@@ -175,7 +190,7 @@ List createKernelResolutionEnqueuerListener(
mirrorsDataBuilder,
customElementsResolutionAnalysis,
rtiNeedBuilder);
- return [listener, transformer];
+ return [listener, backendUsageBuilder, transformer];
}
class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder {
@@ -292,4 +307,61 @@ void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2,
data2.nativeClassTagInfo,
equivalence.entityEquivalence,
(a, b) => a == b);
+ // TODO(johnniwinther): Check the remaining properties.
+}
+
+void checkBackendUsage(BackendUsageImpl usage1, BackendUsageImpl usage2,
+ KernelEquivalence equivalence) {
+ checkSetEquivalence(
+ usage1,
+ usage2,
+ 'globalClassDependencies',
+ usage1.globalClassDependencies,
+ usage2.globalClassDependencies,
+ equivalence.entityEquivalence);
+ checkSetEquivalence(
+ usage1,
+ usage2,
+ 'globalFunctionDependencies',
+ usage1.globalFunctionDependencies,
+ usage2.globalFunctionDependencies,
+ equivalence.entityEquivalence);
+ checkSetEquivalence(
+ usage1,
+ usage2,
+ 'helperClassesUsed',
+ usage1.helperClassesUsed,
+ usage2.helperClassesUsed,
+ equivalence.entityEquivalence);
+ checkSetEquivalence(
+ usage1,
+ usage2,
+ 'helperFunctionsUsed',
+ usage1.helperFunctionsUsed,
+ usage2.helperFunctionsUsed,
+ equivalence.entityEquivalence);
+ check(
+ usage1,
+ usage2,
+ 'needToInitializeIsolateAffinityTag',
+ usage1.needToInitializeIsolateAffinityTag,
+ usage2.needToInitializeIsolateAffinityTag);
+ check(
+ usage1,
+ usage2,
+ 'needToInitializeDispatchProperty',
+ usage1.needToInitializeDispatchProperty,
+ usage2.needToInitializeDispatchProperty);
+ check(usage1, usage2, 'requiresPreamble', usage1.requiresPreamble,
+ usage2.requiresPreamble);
+ check(usage1, usage2, 'isInvokeOnUsed', usage1.isInvokeOnUsed,
+ usage2.isInvokeOnUsed);
+ check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed,
+ usage2.isRuntimeTypeUsed);
+ check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
+ usage2.isIsolateInUse);
+ check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
+ usage2.isFunctionApplyUsed);
+ check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
+ usage2.isNoSuchMethodUsed);
}
« no previous file with comments | « pkg/compiler/lib/src/universe/world_builder.dart ('k') | tests/compiler/dart2js/kernel/closed_world_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698