Skip to content

Commit 00ba5f0

Browse files
johnniwintherCommit Bot
authored and
Commit Bot
committed
[cfe] Move more members from ClassBuilder to SourceClassBuilder
Change-Id: Ieaa087ea1fe94a6290f974ecb0cc296948aa4d71 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/228160 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent eb3d490 commit 00ba5f0

File tree

6 files changed

+130
-147
lines changed

6 files changed

+130
-147
lines changed

pkg/front_end/lib/src/fasta/builder/class_builder.dart

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ library fasta.class_builder;
77
import 'package:kernel/ast.dart'
88
show
99
Class,
10-
Constructor,
1110
DartType,
1211
DynamicType,
1312
FutureOrType,
@@ -32,11 +31,8 @@ import 'declaration_builder.dart';
3231
import 'library_builder.dart';
3332
import 'member_builder.dart';
3433
import 'metadata_builder.dart';
35-
import 'named_type_builder.dart';
3634
import 'nullability_builder.dart';
37-
import 'type_alias_builder.dart';
3835
import 'type_builder.dart';
39-
import 'type_declaration_builder.dart';
4036
import 'type_variable_builder.dart';
4137

4238
abstract class ClassBuilder implements DeclarationBuilder {
@@ -59,8 +55,6 @@ abstract class ClassBuilder implements DeclarationBuilder {
5955

6056
ConstructorScopeBuilder get constructorScopeBuilder;
6157

62-
abstract ClassBuilder? actualOrigin;
63-
6458
@override
6559
Uri get fileUri;
6660

@@ -78,10 +72,6 @@ abstract class ClassBuilder implements DeclarationBuilder {
7872

7973
abstract TypeBuilder? mixedInTypeBuilder;
8074

81-
/// Registers a constructor redirection for this class and returns true if
82-
/// this redirection gives rise to a cycle that has not been reported before.
83-
bool checkConstructorCyclic(String source, String target);
84-
8575
MemberBuilder? findConstructorOrFactory(
8676
String name, int charOffset, Uri uri, LibraryBuilder accessingLibrary);
8777

@@ -95,8 +85,6 @@ abstract class ClassBuilder implements DeclarationBuilder {
9585
@override
9686
ClassBuilder get origin;
9787

98-
Class get actualCls;
99-
10088
abstract bool isNullClass;
10189

10290
@override
@@ -135,12 +123,6 @@ abstract class ClassBuilder implements DeclarationBuilder {
135123
Member? lookupInstanceMember(ClassHierarchy hierarchy, Name name,
136124
{bool isSetter: false, bool isSuper: false});
137125

138-
/// Looks up the constructor by [name] on the class built by this class
139-
/// builder.
140-
///
141-
/// If [isSuper] is `true`, constructors in the superclass are searched.
142-
Constructor? lookupConstructor(Name name, {bool isSuper: false});
143-
144126
/// Calls [f] for each constructor declared in this class.
145127
///
146128
/// If [includeInjectedConstructors] is `true`, constructors only declared in
@@ -169,11 +151,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
169151
@override
170152
final ConstructorScopeBuilder constructorScopeBuilder;
171153

172-
Map<String, ConstructorRedirection>? _redirectingConstructors;
173-
174-
@override
175-
ClassBuilder? actualOrigin;
176-
177154
@override
178155
bool isNullClass = false;
179156

@@ -223,35 +200,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
223200
bool get declaresConstConstructor =>
224201
(modifiers & declaresConstConstructorMask) != 0;
225202

226-
@override
227-
void forEachConstructor(void Function(String, MemberBuilder) f,
228-
{bool includeInjectedConstructors: false}) {
229-
if (isPatch) {
230-
actualOrigin!.forEachConstructor(f,
231-
includeInjectedConstructors: includeInjectedConstructors);
232-
} else {
233-
constructors.forEach(f);
234-
}
235-
}
236-
237-
/// Registers a constructor redirection for this class and returns true if
238-
/// this redirection gives rise to a cycle that has not been reported before.
239-
@override
240-
bool checkConstructorCyclic(String source, String target) {
241-
ConstructorRedirection? redirect = new ConstructorRedirection(target);
242-
_redirectingConstructors ??= <String, ConstructorRedirection>{};
243-
_redirectingConstructors![source] = redirect;
244-
while (redirect != null) {
245-
if (redirect.cycleReported) return false;
246-
if (redirect.target == source) {
247-
redirect.cycleReported = true;
248-
return true;
249-
}
250-
redirect = _redirectingConstructors![redirect.target];
251-
}
252-
return false;
253-
}
254-
255203
@override
256204
Builder? findStaticBuilder(
257205
String name, int charOffset, Uri fileUri, LibraryBuilder accessingLibrary,
@@ -328,9 +276,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
328276
return declaration;
329277
}
330278

331-
@override
332-
ClassBuilder get origin => actualOrigin ?? this;
333-
334279
@override
335280
InterfaceType get thisType {
336281
return _thisType ??= new InterfaceType(cls, library.nonNullable,
@@ -477,63 +422,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
477422
}
478423
return target;
479424
}
480-
481-
@override
482-
Constructor? lookupConstructor(Name name, {bool isSuper: false}) {
483-
if (name.text == "new") {
484-
name = new Name("", name.library);
485-
}
486-
487-
Class? instanceClass = cls;
488-
if (isSuper) {
489-
instanceClass = instanceClass.superclass;
490-
}
491-
if (instanceClass != null) {
492-
for (Constructor constructor in instanceClass.constructors) {
493-
if (constructor.name == name) {
494-
return constructor;
495-
}
496-
}
497-
}
498-
499-
/// Performs a similar lookup to [lookupConstructor], but using a slower
500-
/// implementation.
501-
Constructor? lookupConstructorWithPatches(Name name, bool isSuper) {
502-
ClassBuilder? builder = this.origin;
503-
504-
ClassBuilder? getSuperclass(ClassBuilder builder) {
505-
// This way of computing the superclass is slower than using the kernel
506-
// objects directly.
507-
TypeBuilder? supertype = builder.supertypeBuilder;
508-
if (supertype is NamedTypeBuilder) {
509-
TypeDeclarationBuilder? builder = supertype.declaration;
510-
if (builder is ClassBuilder) return builder;
511-
if (builder is TypeAliasBuilder) {
512-
TypeDeclarationBuilder? declarationBuilder =
513-
builder.unaliasDeclaration(supertype.arguments,
514-
isUsedAsClass: true,
515-
usedAsClassCharOffset: supertype.charOffset,
516-
usedAsClassFileUri: supertype.fileUri);
517-
if (declarationBuilder is ClassBuilder) return declarationBuilder;
518-
}
519-
}
520-
return null;
521-
}
522-
523-
if (isSuper) {
524-
builder = getSuperclass(builder)?.origin;
525-
}
526-
if (builder != null) {
527-
Class cls = builder.cls;
528-
for (Constructor constructor in cls.constructors) {
529-
if (constructor.name == name) return constructor;
530-
}
531-
}
532-
return null;
533-
}
534-
535-
return lookupConstructorWithPatches(name, isSuper);
536-
}
537425
}
538426

539427
class ConstructorRedirection {

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class DillClassBuilder extends ClassBuilderImpl {
4646
parent,
4747
cls.fileOffset);
4848

49+
@override
50+
DillClassBuilder get origin => this;
51+
4952
@override
5053
DillLibraryBuilder get library => super.library as DillLibraryBuilder;
5154

@@ -77,9 +80,6 @@ class DillClassBuilder extends ClassBuilderImpl {
7780
return supertype;
7881
}
7982

80-
@override
81-
Class get actualCls => cls;
82-
8383
void addField(Field field) {
8484
DillFieldBuilder builder = new DillFieldBuilder(field, this);
8585
String name = field.name.text;
@@ -171,6 +171,12 @@ class DillClassBuilder extends ClassBuilderImpl {
171171
return super.interfaceBuilders;
172172
}
173173

174+
@override
175+
void forEachConstructor(void Function(String, MemberBuilder) f,
176+
{bool includeInjectedConstructors: false}) {
177+
constructors.forEach(f);
178+
}
179+
174180
void clearCachedValues() {
175181
supertypeBuilder = null;
176182
interfaceBuilders = null;

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ import '../problems.dart'
8585
import '../scope.dart';
8686
import '../source/diet_parser.dart';
8787
import '../source/scope_listener.dart' show JumpTargetKind, ScopeListener;
88+
import '../source/source_class_builder.dart';
8889
import '../source/source_constructor_builder.dart';
8990
import '../source/source_enum_builder.dart';
9091
import '../source/source_factory_builder.dart';
@@ -139,8 +140,13 @@ class BodyBuilder extends ScopeListener<JumpTarget>
139140
/// if any.
140141
final DeclarationBuilder? declarationBuilder;
141142

142-
/// The class or mixin declaration in which [member] is declared, if any.
143-
final ClassBuilder? classBuilder;
143+
/// The source class or mixin declaration in which [member] is declared, if
144+
/// any.
145+
///
146+
/// If [member] is a synthesized member for expression evaluation the
147+
/// enclosing declaration might be a [DillClassBuilder]. This can be accessed
148+
/// through [declarationBuilder].
149+
final SourceClassBuilder? sourceClassBuilder;
144150

145151
final ClassHierarchy hierarchy;
146152

@@ -342,8 +348,9 @@ class BodyBuilder extends ScopeListener<JumpTarget>
342348
required this.uri,
343349
required this.typeInferrer})
344350
: forest = const Forest(),
345-
classBuilder =
346-
declarationBuilder is ClassBuilder ? declarationBuilder : null,
351+
sourceClassBuilder = declarationBuilder is SourceClassBuilder
352+
? declarationBuilder
353+
: null,
347354
enableNative = libraryBuilder.loader.target.backendTarget
348355
.enableNative(libraryBuilder.importUri),
349356
stringExpectedAfterNative = libraryBuilder
@@ -352,8 +359,9 @@ class BodyBuilder extends ScopeListener<JumpTarget>
352359
libraryBuilder.importUri.scheme == 'dart' &&
353360
(libraryBuilder.importUri.path == "_builtin" ||
354361
libraryBuilder.importUri.path == "ui"),
355-
needsImplicitSuperInitializer = declarationBuilder is ClassBuilder &&
356-
coreTypes.objectClass != declarationBuilder.cls,
362+
needsImplicitSuperInitializer =
363+
declarationBuilder is SourceClassBuilder &&
364+
coreTypes.objectClass != declarationBuilder.cls,
357365
super(enclosingScope) {
358366
formalParameterScope?.forEach((String name, Builder builder) {
359367
if (builder is VariableBuilder) {
@@ -1763,7 +1771,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
17631771
fasta.messageConstructorNotSync, body!.fileOffset, noLength)));
17641772
}
17651773
if (libraryBuilder.enableEnhancedEnumsInLibrary &&
1766-
classBuilder is SourceEnumBuilder &&
1774+
sourceClassBuilder is SourceEnumBuilder &&
17671775
constructor.initializers.isNotEmpty &&
17681776
constructor.initializers.last is RedirectingInitializer) {
17691777
RedirectingInitializer redirectingInitializer =
@@ -1806,7 +1814,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
18061814
positionalArguments = positionalSuperParametersAsArguments;
18071815
namedArguments = namedSuperParametersAsArguments;
18081816
}
1809-
if (classBuilder is SourceEnumBuilder) {
1817+
if (sourceClassBuilder is SourceEnumBuilder) {
18101818
assert(constructor.function.positionalParameters.length >= 2 &&
18111819
constructor.function.positionalParameters[0].name == "index" &&
18121820
constructor.function.positionalParameters[1].name == "name");
@@ -1826,7 +1834,8 @@ class BodyBuilder extends ScopeListener<JumpTarget>
18261834
checkArgumentsForFunction(superTarget.function, arguments,
18271835
builder.charOffset, const <TypeParameter>[]) !=
18281836
null) {
1829-
String superclass = classBuilder!.supertypeBuilder!.fullNameForErrors;
1837+
String superclass =
1838+
sourceClassBuilder!.supertypeBuilder!.fullNameForErrors;
18301839
int length = constructor.name.text.length;
18311840
if (length == 0) {
18321841
length = (constructor.parent as Class).name.length;
@@ -2563,15 +2572,15 @@ class BodyBuilder extends ScopeListener<JumpTarget>
25632572
}
25642573

25652574
@override
2566-
Member? lookupInstanceMember(Name name,
2567-
{bool isSetter: false, bool isSuper: false}) {
2568-
return classBuilder!.lookupInstanceMember(hierarchy, name,
2569-
isSetter: isSetter, isSuper: isSuper);
2575+
Member? lookupSuperMember(Name name, {bool isSetter: false}) {
2576+
return (declarationBuilder as ClassBuilder).lookupInstanceMember(
2577+
hierarchy, name,
2578+
isSetter: isSetter, isSuper: true);
25702579
}
25712580

25722581
@override
25732582
Constructor? lookupConstructor(Name name, {bool isSuper: false}) {
2574-
return classBuilder!.lookupConstructor(name, isSuper: isSuper);
2583+
return sourceClassBuilder!.lookupConstructor(name, isSuper: isSuper);
25752584
}
25762585

25772586
@override
@@ -2650,9 +2659,9 @@ class BodyBuilder extends ScopeListener<JumpTarget>
26502659
Builder? declaration = scope.lookup(name, charOffset, uri);
26512660
if (declaration == null &&
26522661
prefix == null &&
2653-
(classBuilder?.isPatch ?? false)) {
2662+
(sourceClassBuilder?.isPatch ?? false)) {
26542663
// The scope of a patched method includes the origin class.
2655-
declaration = classBuilder!.origin
2664+
declaration = sourceClassBuilder!.origin
26562665
.findStaticBuilder(name, charOffset, uri, libraryBuilder);
26572666
}
26582667
if (declaration != null &&
@@ -3120,8 +3129,8 @@ class BodyBuilder extends ScopeListener<JumpTarget>
31203129
constantContext = member.isConst
31213130
? ConstantContext.inferred
31223131
: !member.isStatic &&
3123-
classBuilder != null &&
3124-
classBuilder!.declaresConstConstructor
3132+
sourceClassBuilder != null &&
3133+
sourceClassBuilder!.declaresConstConstructor
31253134
? ConstantContext.required
31263135
: ConstantContext.none;
31273136
if (member is SourceFieldBuilder) {
@@ -3155,8 +3164,8 @@ class BodyBuilder extends ScopeListener<JumpTarget>
31553164
constantContext = member.isConst
31563165
? ConstantContext.inferred
31573166
: !member.isStatic &&
3158-
classBuilder != null &&
3159-
classBuilder!.declaresConstConstructor
3167+
sourceClassBuilder != null &&
3168+
sourceClassBuilder!.declaresConstConstructor
31603169
? ConstantContext.required
31613170
: ConstantContext.none;
31623171
if (constantContext == ConstantContext.inferred) {
@@ -6968,7 +6977,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
69686977
Initializer buildRedirectingInitializer(
69696978
Constructor constructor, Arguments arguments,
69706979
[int charOffset = -1]) {
6971-
if (classBuilder!
6980+
if (sourceClassBuilder!
69726981
.checkConstructorCyclic(member.name!, constructor.name.text)) {
69736982
int length = constructor.name.text.length;
69746983
if (length == 0) length = "this".length;
@@ -7188,7 +7197,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
71887197
offset,
71897198
name.text.length);
71907199
}
7191-
Member? target = lookupInstanceMember(name, isSuper: true);
7200+
Member? target = lookupSuperMember(name);
71927201

71937202
if (target == null || (target is Procedure && !target.isAccessor)) {
71947203
if (target == null) {
@@ -7317,7 +7326,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
73177326
String constructorNameForDiagnostics(String name,
73187327
{String? className, bool isSuper: false}) {
73197328
if (className == null) {
7320-
Class cls = classBuilder!.cls;
7329+
Class cls = sourceClassBuilder!.cls;
73217330
if (isSuper) {
73227331
cls = cls.superclass!;
73237332
while (cls.isMixinApplication) {

pkg/front_end/lib/src/fasta/kernel/expression_generator.dart

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4492,9 +4492,8 @@ class ThisAccessGenerator extends Generator {
44924492
}
44934493
} else {
44944494
if (isSuper) {
4495-
Member? getter = _helper.lookupInstanceMember(name, isSuper: isSuper);
4496-
Member? setter = _helper.lookupInstanceMember(name,
4497-
isSuper: isSuper, isSetter: true);
4495+
Member? getter = _helper.lookupSuperMember(name);
4496+
Member? setter = _helper.lookupSuperMember(name, isSetter: true);
44984497
return new SuperPropertyAccessGenerator(
44994498
_helper,
45004499
// TODO(ahe): This is not the 'super' token.
@@ -4659,10 +4658,8 @@ class ThisAccessGenerator extends Generator {
46594658
_helper,
46604659
token,
46614660
index,
4662-
_helper.lookupInstanceMember(indexGetName, isSuper: true)
4663-
as Procedure?,
4664-
_helper.lookupInstanceMember(indexSetName, isSuper: true)
4665-
as Procedure?);
4661+
_helper.lookupSuperMember(indexGetName) as Procedure?,
4662+
_helper.lookupSuperMember(indexSetName) as Procedure?);
46664663
} else {
46674664
return new ThisIndexedAccessGenerator(_helper, token, index,
46684665
thisOffset: fileOffset, isNullAware: isNullAware);

0 commit comments

Comments
 (0)