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

Unified Diff: pkg/kernel/test/reify/suite.dart

Issue 2713163002: Pass type arguments as a list in generic methods invocations (Closed)
Patch Set: Simplify 'isGenericMethod' procedure Created 3 years, 9 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: pkg/kernel/test/reify/suite.dart
diff --git a/pkg/kernel/test/reify/suite.dart b/pkg/kernel/test/reify/suite.dart
index 337e3aed23b0e360c2546009279d7f74fe637f5a..aa04009f411978cc7b412cf71e19807a71649359 100644
--- a/pkg/kernel/test/reify/suite.dart
+++ b/pkg/kernel/test/reify/suite.dart
@@ -15,6 +15,8 @@ import 'package:kernel/analyzer/loader.dart'
import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
+import 'package:kernel/target/vmcc.dart' show VmClosureConvertedTarget;
+
import 'kernel_chain.dart'
show MatchExpectation, Print, ReadDill, SanityCheck, WriteDill;
@@ -30,9 +32,6 @@ import 'package:testing/testing.dart'
import 'package:kernel/ast.dart' show Program;
-import 'package:kernel/transformations/closure_conversion.dart'
- as closure_conversion;
-
import 'package:kernel/transformations/generic_types_reification.dart'
as generic_types_reification;
@@ -57,10 +56,9 @@ class TestContext extends ChainContext {
sdk: sdk,
packagePath: packages.toFilePath()),
steps = <Step>[
- const Kernel(),
+ const NotReifiedKernel(),
const Print(),
const SanityCheck(),
- const ClosureConversion(),
const GenericTypesReification(),
const Print(),
const SanityCheck(),
@@ -126,14 +124,51 @@ Future<TestContext> createContext(
Uri vm = Uri.base.resolve("out/ReleaseX64/dart");
Uri packages = Uri.base.resolve(".packages");
- bool strongMode = false;
- bool updateExpectations = environment["updateExpectations"] == "true";
+ // Strong mode is required to keep the type arguments in invocations of
+ // generic methods.
+ bool strongMode = true;
+ bool updateExpectations = const String.fromEnvironment("updateExpectations",
+ defaultValue: "false") ==
+ "true";
return new TestContext(sdk, vm, packages, strongMode,
createDartSdk(sdk, strongMode: strongMode), updateExpectations);
}
-class Kernel extends Step<TestDescription, Program, TestContext> {
- const Kernel();
+// [NotReifiedTarget] is intended to work as the [Target] class that
+// [VmGenericTypesReifiedTarget] inherits from, but with some transformations
+// disabled. Those include tree shaking and generic types information erasure
+// passes.
+// [NotReifiedTarget] also adds the necessary runtime libraries.
+class NotReifiedTarget extends VmClosureConvertedTarget {
+ NotReifiedTarget(TargetFlags flags) : super(flags);
+
+ @override
+ String get name => "not reified target";
+
+ // Tree shaking needs to be disabled, because Generic Types Reification
+ // transformation relies on certain runtime libraries to be present in
+ // the program that is being transformed. If the tree shaker is enabled,
+ // it just deletes everything from those libraries, because they aren't
+ // used in the program being transform prior to the transformation.
+ @override
+ void performTreeShaking(Program program) {}
+
+ // Erasure needs to be disabled, because it removes the necessary information
+ // about type arguments for generic methods.
+ @override
+ void performErasure(Program program) {}
+
+ // Adds the necessary runtime libraries.
+ @override
+ List<String> get extraRequiredLibraries {
+ Target reifyTarget = getTarget("vmreify", this.flags);
+ var x = reifyTarget.extraRequiredLibraries;
+ return x;
+ }
+}
+
+class NotReifiedKernel extends Step<TestDescription, Program, TestContext> {
+ const NotReifiedKernel();
String get name => "kernel";
@@ -142,19 +177,15 @@ class Kernel extends Step<TestDescription, Program, TestContext> {
try {
DartLoader loader = await testContext.createLoader();
- Target target = getTarget(
- "vm", new TargetFlags(strongMode: testContext.options.strongMode));
- // reifyTarget is used to add the GTR-specific runtime libraries
- // when the program is being loaded
- Target reifyTarget = getTarget(
- "vmreify",
- new TargetFlags(
- strongMode: testContext.options.strongMode,
- kernelRuntime: Platform.script.resolve('../../runtime/')));
+ // Strong mode is required to keep the type arguments in invocations of
+ // generic methods.
+ Target target = new NotReifiedTarget(new TargetFlags(
+ strongMode: true,
+ kernelRuntime: Platform.script.resolve("../../runtime/")));
String path = description.file.path;
Uri uri = Uri.base.resolve(path);
- loader.loadProgram(uri, target: reifyTarget);
+ loader.loadProgram(uri, target: target);
var program = loader.program;
for (var error in loader.errors) {
return fail(program, "$error");
@@ -169,21 +200,6 @@ class Kernel extends Step<TestDescription, Program, TestContext> {
}
}
-class ClosureConversion extends Step<Program, Program, TestContext> {
- const ClosureConversion();
-
- String get name => "closure conversion";
-
- Future<Result<Program>> run(Program program, TestContext testContext) async {
- try {
- program = closure_conversion.transformProgram(program);
- return pass(program);
- } catch (e, s) {
- return crash(e, s);
- }
- }
-}
-
class GenericTypesReification extends Step<Program, Program, TestContext> {
const GenericTypesReification();

Powered by Google App Engine
This is Rietveld 408576698