Compute type arguments of dill types.
Change-Id: I6d83ff53d7d56b2c50c221b9dd0d4ff8f0d2a5b7
Reviewed-on: https://dart-review.googlesource.com/c/88718
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index db29642..026c070 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -19,6 +19,7 @@
InvalidType,
Library,
Source,
+ TypeParameter,
TypeParameterType,
TypedefType,
VoidType;
@@ -29,7 +30,13 @@
import '../compiler_context.dart' show CompilerContext;
import '../kernel/kernel_builder.dart'
- show KernelNamedTypeBuilder, KernelTypeBuilder, LibraryBuilder;
+ show
+ DynamicTypeBuilder,
+ KernelNamedTypeBuilder,
+ KernelTypeBuilder,
+ KernelTypeVariableBuilder,
+ LibraryBuilder,
+ VoidTypeBuilder;
import '../loader.dart' show Loader;
@@ -113,11 +120,15 @@
}
KernelTypeBuilder visitDynamicType(DynamicType node) {
- throw "Not implemented";
+ return new KernelNamedTypeBuilder("dynamic", null)
+ ..bind(new DynamicTypeBuilder<KernelTypeBuilder, DartType>(
+ const DynamicType(), loader.coreLibrary, -1));
}
KernelTypeBuilder visitVoidType(VoidType node) {
- throw "Not implemented";
+ return new KernelNamedTypeBuilder("dynamic", null)
+ ..bind(new VoidTypeBuilder<KernelTypeBuilder, VoidType>(
+ const VoidType(), loader.coreLibrary, -1));
}
KernelTypeBuilder visitBottomType(BottomType node) {
@@ -130,8 +141,15 @@
DillLibraryBuilder library = loader.builders[kernelLibrary.importUri];
String name = kernelClass.name;
DillClassBuilder cls = library[name];
- // TODO(ahe): Also compute type arguments.
- return new KernelNamedTypeBuilder(name, null)..bind(cls);
+ List<KernelTypeBuilder> arguments;
+ List<DartType> kernelArguments = node.typeArguments;
+ if (kernelArguments.isNotEmpty) {
+ arguments = new List<KernelTypeBuilder>(kernelArguments.length);
+ for (int i = 0; i < kernelArguments.length; i++) {
+ arguments[i] = kernelArguments[i].accept(this);
+ }
+ }
+ return new KernelNamedTypeBuilder(name, arguments)..bind(cls);
}
KernelTypeBuilder visitFunctionType(FunctionType node) {
@@ -139,7 +157,12 @@
}
KernelTypeBuilder visitTypeParameterType(TypeParameterType node) {
- throw "Not implemented";
+ TypeParameter parameter = node.parameter;
+ Class kernelClass = parameter.parent;
+ Library kernelLibrary = kernelClass.enclosingLibrary;
+ DillLibraryBuilder library = loader.builders[kernelLibrary.importUri];
+ return new KernelNamedTypeBuilder(parameter.name, null)
+ ..bind(new KernelTypeVariableBuilder.fromKernel(parameter, library));
}
KernelTypeBuilder visitTypedefType(TypedefType node) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
index 241bb28..c427799 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
@@ -36,7 +36,7 @@
super(name, bound, compilationUnit, charOffset);
KernelTypeVariableBuilder.fromKernel(
- TypeParameter parameter, KernelLibraryBuilder compilationUnit)
+ TypeParameter parameter, LibraryBuilder compilationUnit)
: actualParameter = parameter,
super(parameter.name, null, compilationUnit, parameter.fileOffset);
diff --git a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
index 9ae979a..cf270cb 100644
--- a/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_dart2js_load_from_dill_test.dart
@@ -75,7 +75,7 @@
stopwatch.reset();
bool initializeResult = await initializedCompile(
dart2jsUrl, fullDillFromInitialized, initializeWith, [invalidateUri]);
- Expect.equals(initializeExpect, initializeResult);
+ Expect.equals(initializeResult, initializeExpect);
print("Initialized compile(s) from ${initializeWith.pathSegments.last} "
"took ${stopwatch.elapsedMilliseconds} ms");