Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit de85d16

Browse files
Implement DillClass.supertype
Change-Id: I58c048a6595a2b65a7f2c239ae2bc1e6d8aab2a4 Reviewed-on: https://dart-review.googlesource.com/c/88715 Reviewed-by: Dmitry Stefantsov <[email protected]> Commit-Queue: Peter von der Ahé <[email protected]>
1 parent 2bc015b commit de85d16

File tree

3 files changed

+91
-5
lines changed

3 files changed

+91
-5
lines changed

pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
library fasta.dill_class_builder;
66

7-
import 'package:kernel/ast.dart' show Class, DartType, Member;
7+
import 'package:kernel/ast.dart' show Class, DartType, Member, Supertype;
88

99
import '../problems.dart' show unimplemented;
1010

@@ -18,10 +18,12 @@ import '../kernel/kernel_builder.dart'
1818

1919
import '../modifier.dart' show abstractMask;
2020

21-
import 'dill_member_builder.dart' show DillMemberBuilder;
22-
2321
import 'dill_library_builder.dart' show DillLibraryBuilder;
2422

23+
import 'dill_loader.dart' show DillLoader;
24+
25+
import 'dill_member_builder.dart' show DillMemberBuilder;
26+
2527
class DillClassBuilder extends KernelClassBuilder {
2628
final Class cls;
2729

@@ -41,6 +43,18 @@ class DillClassBuilder extends KernelClassBuilder {
4143
parent,
4244
cls.fileOffset);
4345

46+
KernelTypeBuilder get supertype {
47+
KernelTypeBuilder supertype = super.supertype;
48+
if (supertype == null) {
49+
Supertype targetSupertype = cls.supertype;
50+
if (targetSupertype == null) return null;
51+
DillLoader loader = library.loader;
52+
super.supertype = supertype =
53+
loader.computeTypeBuilder(targetSupertype.asInterfaceType);
54+
}
55+
return supertype;
56+
}
57+
4458
@override
4559
Class get actualCls => cls;
4660

pkg/front_end/lib/src/fasta/dill/dill_loader.dart

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,39 @@ library fasta.dill_loader;
66

77
import 'dart:async' show Future;
88

9-
import 'package:kernel/ast.dart' show Library, Component, Source;
9+
import 'package:kernel/ast.dart'
10+
show
11+
BottomType,
12+
Class,
13+
Component,
14+
DartType,
15+
DartTypeVisitor,
16+
DynamicType,
17+
FunctionType,
18+
InterfaceType,
19+
InvalidType,
20+
Library,
21+
Source,
22+
TypeParameterType,
23+
TypedefType,
24+
VoidType;
1025

1126
import '../fasta_codes.dart'
1227
show SummaryTemplate, Template, templateDillOutlineSummary;
1328

1429
import '../compiler_context.dart' show CompilerContext;
1530

16-
import '../kernel/kernel_builder.dart' show LibraryBuilder;
31+
import '../kernel/kernel_builder.dart'
32+
show KernelNamedTypeBuilder, KernelTypeBuilder, LibraryBuilder;
1733

1834
import '../loader.dart' show Loader;
1935

2036
import '../problems.dart' show unhandled;
2137

2238
import '../target_implementation.dart' show TargetImplementation;
2339

40+
import 'dill_class_builder.dart' show DillClassBuilder;
41+
2442
import 'dill_library_builder.dart' show DillLibraryBuilder;
2543

2644
class DillLoader extends Loader<Library> {
@@ -75,4 +93,56 @@ class DillLoader extends Loader<Library> {
7593
library.finalizeExports();
7694
});
7795
}
96+
97+
KernelTypeBuilder computeTypeBuilder(DartType type) {
98+
return type.accept(new TypeBuilderComputer(this));
99+
}
100+
}
101+
102+
class TypeBuilderComputer implements DartTypeVisitor<KernelTypeBuilder> {
103+
final DillLoader loader;
104+
105+
const TypeBuilderComputer(this.loader);
106+
107+
KernelTypeBuilder defaultDartType(DartType node) {
108+
throw "Unsupported";
109+
}
110+
111+
KernelTypeBuilder visitInvalidType(InvalidType node) {
112+
throw "Not implemented";
113+
}
114+
115+
KernelTypeBuilder visitDynamicType(DynamicType node) {
116+
throw "Not implemented";
117+
}
118+
119+
KernelTypeBuilder visitVoidType(VoidType node) {
120+
throw "Not implemented";
121+
}
122+
123+
KernelTypeBuilder visitBottomType(BottomType node) {
124+
throw "Not implemented";
125+
}
126+
127+
KernelTypeBuilder visitInterfaceType(InterfaceType node) {
128+
Class kernelClass = node.classNode;
129+
Library kernelLibrary = kernelClass.enclosingLibrary;
130+
DillLibraryBuilder library = loader.builders[kernelLibrary.importUri];
131+
String name = kernelClass.name;
132+
DillClassBuilder cls = library[name];
133+
// TODO(ahe): Also compute type arguments.
134+
return new KernelNamedTypeBuilder(name, null)..bind(cls);
135+
}
136+
137+
KernelTypeBuilder visitFunctionType(FunctionType node) {
138+
throw "Not implemented";
139+
}
140+
141+
KernelTypeBuilder visitTypeParameterType(TypeParameterType node) {
142+
throw "Not implemented";
143+
}
144+
145+
KernelTypeBuilder visitTypedefType(TypedefType node) {
146+
throw "Not implemented";
147+
}
78148
}

pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class DillMemberBuilder extends MemberBuilder {
6262
name == "" &&
6363
(charOffset == parent.charOffset || charOffset == -1);
6464
}
65+
66+
bool get isField => member is Field;
6567
}
6668

6769
int computeModifiers(Member member) {

0 commit comments

Comments
 (0)