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

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

Issue 2495013002: Add kernel/closed_world_test (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
« no previous file with comments | « pkg/compiler/lib/src/enqueue.dart ('k') | tests/compiler/dart2js/serialization/model_test_helper.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/kernel/closed_world_test.dart
diff --git a/tests/compiler/dart2js/kernel/closed_world_test.dart b/tests/compiler/dart2js/kernel/closed_world_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d277221884c58c370bc5415924e6a097e5979e8a
--- /dev/null
+++ b/tests/compiler/dart2js/kernel/closed_world_test.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests that the closed world computed from [WorldImpact]s derived from kernel
+// is equivalent to the original computed from resolution.
+library dart2js.kernel.closed_world_test;
+
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common.dart';
+import 'package:compiler/src/common/names.dart';
+import 'package:compiler/src/common/resolution.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/constants/expressions.dart';
+import 'package:compiler/src/dart_types.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/enqueue.dart';
+import 'package:compiler/src/js_backend/backend.dart';
+import 'package:compiler/src/js_backend/type_variable_handler.dart';
+import 'package:compiler/src/resolution/registry.dart';
+import 'package:compiler/src/resolution/tree_elements.dart';
+import 'package:compiler/src/ssa/kernel_impact.dart';
+import 'package:compiler/src/serialization/equivalence.dart';
+import 'package:compiler/src/universe/call_structure.dart';
+import 'package:compiler/src/universe/feature.dart';
+import 'package:compiler/src/universe/world_impact.dart';
+import 'package:compiler/src/world.dart';
+import 'package:expect/expect.dart';
+import 'impact_test.dart';
+import '../memory_compiler.dart';
+import '../serialization/helper.dart';
+import '../serialization/model_test_helper.dart';
+
+const SOURCE = const {
+ 'main.dart': '''
+main() {
+ print('Hello World!');
+}
+'''
+};
+
+main(List<String> args) {
+ Arguments arguments = new Arguments.from(args);
+ Uri entryPoint;
+ Map<String, String> memorySourceFiles;
+ if (arguments.uri != null) {
+ entryPoint = arguments.uri;
+ memorySourceFiles = const <String, String>{};
+ } else {
+ entryPoint = Uri.parse('memory:main.dart');
+ memorySourceFiles = SOURCE;
+ }
+
+ asyncTest(() async {
+ enableDebugMode();
+ Compiler compiler = compilerFor(
+ entryPoint: entryPoint,
+ memorySourceFiles: memorySourceFiles,
+ options: [
+ Flags.analyzeOnly,
+ Flags.useKernel,
+ Flags.enableAssertMessage
+ ]);
+ compiler.resolution.retainCachesForTesting = true;
+ await compiler.run(entryPoint);
+ compiler.openWorld.closeWorld(compiler.reporter);
+
+ JavaScriptBackend backend = compiler.backend;
+ // Create a new resolution enqueuer and feed it with the [WorldImpact]s
+ // computed from kernel through the [build] in `kernel_impact.dart`.
+ ResolutionEnqueuer enqueuer = new ResolutionEnqueuer(
+ compiler.enqueuer,
+ compiler.options,
+ compiler.resolution,
+ compiler.enqueuerFilter,
+ const TreeShakingEnqueuerStrategy(),
+ compiler.globalDependencies,
+ backend,
+ compiler.commonElements,
+ compiler.cacheStrategy);
+ // TODO(johnniwinther): Store backend info separately. This replacement is
+ // made to reset a field in [TypeVariableHandler] that prevents it from
+ // enqueuing twice.
+ backend.typeVariableHandler = new TypeVariableHandler(compiler);
+
+ backend.enqueueHelpers(enqueuer);
+ enqueuer.addToWorkList(compiler.mainFunction);
+ enqueuer.forEach((work) {
+ AstElement element = work.element;
+ ResolutionImpact resolutionImpact = build(compiler, element.resolvedAst);
+ WorldImpact worldImpact = compiler.backend.impactTransformer
+ .transformResolutionImpact(enqueuer, resolutionImpact);
+ enqueuer.registerProcessedElement(element);
+ enqueuer.applyImpact(compiler.impactStrategy, worldImpact,
+ impactSource: element);
+ });
+ ClosedWorld closedWorld =
+ enqueuer.universe.openWorld.closeWorld(compiler.reporter);
+
+ checkResolutionEnqueuers(compiler.enqueuer.resolution, enqueuer,
+ typeEquivalence: (DartType a, DartType b) {
+ return areTypesEquivalent(unalias(a), unalias(b));
+ }, elementFilter: (Element element) {
+ if (element is ConstructorElement && element.isRedirectingFactory) {
+ // Redirecting factory constructors are skipped in kernel.
+ return false;
+ }
+ return true;
+ }, verbose: arguments.verbose);
+ checkClosedWorlds(compiler.closedWorld, closedWorld,
+ verbose: arguments.verbose);
+ });
+}
« no previous file with comments | « pkg/compiler/lib/src/enqueue.dart ('k') | tests/compiler/dart2js/serialization/model_test_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698