Skip to content

Commit 50ab35b

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Remove ProblemBuilder and clean up lookup methods
This removes the ProblemBuilder which is no longer needed. With the removal, the `lookupLocal` and `lookupLocalMember` are no longer different and are merged to `lookup`. Furthermore since the `fileUri` is not used and `fileOffset` is only used on `LocalScope`, the signature of `lookup` is reduced to only taking the name, and `lookup` on `LocalScope` takes an optional `fileOffset`. Change-Id: Ib81e6069dc078c62af0288349a31c36c962f41ae Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442681 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent b380c03 commit 50ab35b

28 files changed

+157
-432
lines changed

pkg/front_end/lib/src/base/incremental_compiler.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,9 +1689,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
16891689

16901690
Class? cls;
16911691
if (className != null) {
1692-
Builder? scopeMember = libraryBuilder.libraryNameSpace
1693-
.lookupLocalMember(className)
1694-
?.getable;
1692+
Builder? scopeMember =
1693+
libraryBuilder.libraryNameSpace.lookup(className)?.getable;
16951694
if (scopeMember is ClassBuilder) {
16961695
cls = scopeMember.cls;
16971696
} else {
@@ -1706,9 +1705,8 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
17061705
if (indexOfDot >= 0) {
17071706
String beforeDot = methodName.substring(0, indexOfDot);
17081707
String afterDot = methodName.substring(indexOfDot + 1);
1709-
Builder? builder = libraryBuilder.libraryNameSpace
1710-
.lookupLocalMember(beforeDot)
1711-
?.getable;
1708+
Builder? builder =
1709+
libraryBuilder.libraryNameSpace.lookup(beforeDot)?.getable;
17121710
extensionName = beforeDot;
17131711
if (builder is ExtensionBuilder) {
17141712
extension = builder.extension;

pkg/front_end/lib/src/base/local_scope.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ abstract class LocalScope implements LookupScope {
1111
@override
1212
ScopeKind get kind;
1313

14+
@override
15+
LookupResult? lookup(String name, {int fileOffset = -1});
16+
1417
LocalScope createNestedScope(
1518
{required String debugName, required ScopeKind kind});
1619

@@ -51,17 +54,17 @@ abstract base class BaseLocalScope implements LocalScope {
5154
}
5255

5356
mixin LocalScopeMixin implements LocalScope {
54-
LookupScope? get _parent;
57+
LocalScope? get _parent;
5558

5659
Map<String, VariableBuilder>? get _local;
5760

5861
@override
5962
Iterable<VariableBuilder> get localVariables => _local?.values ?? const [];
6063

6164
@override
62-
LookupResult? lookup(String name, int fileOffset, Uri fileUri) {
65+
LookupResult? lookup(String name, {int fileOffset = -1}) {
6366
_recordUse(name, fileOffset);
64-
return _local?[name] ?? _parent?.lookup(name, fileOffset, fileUri);
67+
return _local?[name] ?? _parent?.lookup(name, fileOffset: fileOffset);
6568
}
6669

6770
@override
@@ -156,8 +159,8 @@ final class LocalTypeParameterScope extends BaseLocalScope
156159
Iterable<VariableBuilder> get localVariables => const [];
157160

158161
@override
159-
LookupResult? lookup(String name, int fileOffset, Uri fileUri) {
160-
return _local?[name] ?? _parent?.lookup(name, fileOffset, fileUri);
162+
LookupResult? lookup(String name, {int fileOffset = -1}) {
163+
return _local?[name] ?? _parent?.lookup(name, fileOffset: fileOffset);
161164
}
162165

163166
@override
@@ -201,13 +204,13 @@ final class FixedLocalScope extends BaseLocalScope
201204
final class FormalParameterScope extends BaseLocalScope
202205
with ImmutableLocalScopeMixin, LocalScopeMixin {
203206
@override
204-
final LookupScope? _parent;
207+
final LocalScope? _parent;
205208
@override
206209
final Map<String, VariableBuilder>? _local;
207210

208211
FormalParameterScope(
209-
{LookupScope? parent, Map<String, VariableBuilder>? local})
210-
: _parent = parent,
212+
{required LookupScope parent, Map<String, VariableBuilder>? local})
213+
: _parent = new EnclosingLocalScope(parent),
211214
_local = local;
212215

213216
@override
@@ -232,8 +235,8 @@ final class EnclosingLocalScope extends BaseLocalScope
232235
Iterable<VariableBuilder> get localVariables => const [];
233236

234237
@override
235-
LookupResult? lookup(String name, int fileOffset, Uri fileUri) {
236-
return _scope.lookup(name, fileOffset, fileUri);
238+
LookupResult? lookup(String name, {int fileOffset = -1}) {
239+
return _scope.lookup(name);
237240
}
238241

239242
@override

pkg/front_end/lib/src/base/lookup_result.dart

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import '../builder/declaration_builders.dart';
99
import '../builder/member_builder.dart';
1010
import '../codes/cfe_codes.dart';
1111
import 'compiler_context.dart';
12-
import 'scope.dart';
1312

1413
abstract class LookupResult {
1514
/// The [NamedBuilder] used for reading this entity, if any.
@@ -62,37 +61,6 @@ abstract class LookupResult {
6261
return new InvalidExpression(text)..fileOffset = fileOffset;
6362
}
6463

65-
/// Creates a [LookupResult] for [getable] and [setable] which filters
66-
/// instance members if [staticOnly] is `true`, and creates an
67-
/// [AmbiguousBuilder] for duplicates using [fileUri] and [fileOffset].
68-
static LookupResult? createProcessedResult(LookupResult? result,
69-
{required String name, required Uri fileUri, required int fileOffset}) {
70-
if (result == null) return null;
71-
NamedBuilder? getable = result.getable;
72-
NamedBuilder? setable = result.setable;
73-
bool changed = false;
74-
if (getable != null) {
75-
if (getable.next != null) {
76-
// Coverage-ignore-block(suite): Not run.
77-
getable = new AmbiguousBuilder(name, getable, fileOffset, fileUri);
78-
changed = true;
79-
}
80-
}
81-
if (setable != null) {
82-
if (setable.next != null) {
83-
// Coverage-ignore-block(suite): Not run.
84-
setable = new AmbiguousBuilder(name, setable, fileOffset, fileUri);
85-
changed = true;
86-
}
87-
}
88-
if (!changed) {
89-
return result;
90-
}
91-
92-
// Coverage-ignore(suite): Not run.
93-
return _fromBuilders(getable, setable, assertNoGetterSetterConflict: true);
94-
}
95-
9664
static LookupResult? createResult(
9765
NamedBuilder? getable, NamedBuilder? setable) {
9866
return _fromBuilders(getable, setable, assertNoGetterSetterConflict: false);

pkg/front_end/lib/src/base/name_space.dart

Lines changed: 12 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,7 @@ import 'uris.dart';
1212
abstract class NameSpace {
1313
/// Returns the [LookupResult] for the [Builder]s of the given [name] in the
1414
/// name space.
15-
///
16-
/// If the [Builder]s are duplicates, an [AmbiguousBuilder] is created for
17-
/// the access, using the [fileUri] and [fileOffset].
18-
LookupResult? lookupLocal(String name,
19-
{required Uri fileUri, required int fileOffset});
20-
21-
/// Returns the [LookupResult] for the [Builder]s of the given [name] in the
22-
/// name space.
23-
///
24-
/// The returned [LookupResult] contains the [Builder]s directly mapped in the
25-
/// name space without any filtering or processed of duplicates.
26-
LookupResult? lookupLocalMember(String name);
15+
LookupResult? lookup(String name);
2716

2817
void forEachLocalExtension(void Function(ExtensionBuilder member) f);
2918
}
@@ -66,12 +55,7 @@ abstract class DeclarationNameSpace implements NameSpace {
6655
void forEachLocalExtension(void Function(ExtensionBuilder member) f) {}
6756

6857
@override
69-
MemberLookupResult? lookupLocal(String name,
70-
{required Uri fileUri, required int fileOffset}) =>
71-
_content[name];
72-
73-
@override
74-
MemberLookupResult? lookupLocalMember(String name) => _content[name];
58+
MemberLookupResult? lookup(String name) => _content[name];
7559

7660
MemberLookupResult? lookupConstructor(String name) => _constructors[name];
7761
}
@@ -180,14 +164,7 @@ base class ComputedMutableNameSpaceImpl implements ComputedMutableNameSpace {
180164
}
181165

182166
@override
183-
LookupResult? lookupLocal(String name,
184-
{required Uri fileUri, required int fileOffset}) {
185-
return LookupResult.createProcessedResult(_content?[name],
186-
name: name, fileUri: fileUri, fileOffset: fileOffset);
187-
}
188-
189-
@override
190-
LookupResult? lookupLocalMember(String name) => _content?[name];
167+
LookupResult? lookup(String name) => _content?[name];
191168
}
192169

193170
final class LibraryNameSpace implements NameSpace {
@@ -212,13 +189,7 @@ final class LibraryNameSpace implements NameSpace {
212189
}
213190

214191
@override
215-
LookupResult? lookupLocal(String name,
216-
{required Uri fileUri, required int fileOffset}) {
217-
return _content[name];
218-
}
219-
220-
@override
221-
LookupResult? lookupLocalMember(String name) => _content[name];
192+
LookupResult? lookup(String name) => _content[name];
222193
}
223194

224195
// Coverage-ignore(suite): Not run.
@@ -356,16 +327,16 @@ final class DillExportNameSpace extends ComputedMutableNameSpaceImpl {
356327
LookupResult? replacementResult;
357328
if (existingGetter != null && existingSetter != null) {
358329
if (existingGetter == existingSetter) {
359-
replacementResult = replacementNameSpaceMap[existingGetter.parent]!
360-
.lookupLocalMember(name);
330+
replacementResult =
331+
replacementNameSpaceMap[existingGetter.parent]!.lookup(name);
361332
} else {
362333
NamedBuilder? replacementGetter =
363334
replacementNameSpaceMap[existingGetter.parent]
364-
?.lookupLocalMember(name)
335+
?.lookup(name)
365336
?.getable;
366337
NamedBuilder? replacementSetter =
367338
replacementNameSpaceMap[existingSetter.parent]
368-
?.lookupLocalMember(name)
339+
?.lookup(name)
369340
?.setable;
370341
replacementResult = LookupResult.createResult(
371342
replacementGetter ?? existingGetter,
@@ -374,14 +345,14 @@ final class DillExportNameSpace extends ComputedMutableNameSpaceImpl {
374345
} else if (existingGetter != null) {
375346
replacementResult = LookupResult.createResult(
376347
replacementNameSpaceMap[existingGetter.parent]
377-
?.lookupLocalMember(name)
348+
?.lookup(name)
378349
?.getable,
379350
null);
380351
} else if (existingSetter != null) {
381352
replacementResult = LookupResult.createResult(
382353
null,
383354
replacementNameSpaceMap[existingSetter.parent]
384-
?.lookupLocalMember(name)
355+
?.lookup(name)
385356
?.setable);
386357
}
387358
if (replacementResult != null) {
@@ -411,12 +382,12 @@ final class DillExportNameSpace extends ComputedMutableNameSpaceImpl {
411382
if (replacementNameSpaceMap
412383
.containsKey(extensionBuilder.libraryBuilder)) {
413384
assert(replacementNameSpaceMap[extensionBuilder.libraryBuilder]!
414-
.lookupLocalMember(extensionBuilder.name)!
385+
.lookup(extensionBuilder.name)!
415386
.getable !=
416387
null);
417388
extensionsReplacement.add(
418389
replacementNameSpaceMap[extensionBuilder.libraryBuilder]!
419-
.lookupLocalMember(extensionBuilder.name)!
390+
.lookup(extensionBuilder.name)!
420391
.getable as ExtensionBuilder);
421392
break;
422393
} else {

pkg/front_end/lib/src/base/scope.dart

Lines changed: 5 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ enum ScopeKind {
122122

123123
abstract class LookupScope {
124124
ScopeKind get kind;
125-
LookupResult? lookup(String name, int fileOffset, Uri fileUri);
125+
LookupResult? lookup(String name);
126126
// TODO(johnniwinther): Should this be moved to an outer scope interface?
127127
void forEachExtension(void Function(ExtensionBuilder) f);
128128
}
@@ -139,10 +139,8 @@ abstract class BaseNameSpaceLookupScope implements LookupScope {
139139
LookupScope? get _parent;
140140

141141
@override
142-
LookupResult? lookup(String name, int fileOffset, Uri fileUri) {
143-
return _nameSpace.lookupLocal(name,
144-
fileUri: fileUri, fileOffset: fileOffset) ??
145-
_parent?.lookup(name, fileOffset, fileUri);
142+
LookupResult? lookup(String name) {
143+
return _nameSpace.lookup(name) ?? _parent?.lookup(name);
146144
}
147145

148146
@override
@@ -174,13 +172,12 @@ abstract class AbstractTypeParameterScope implements LookupScope {
174172
TypeParameterBuilder? getTypeParameter(String name);
175173

176174
@override
177-
// Coverage-ignore(suite): Not run.
178175
ScopeKind get kind => ScopeKind.typeParameters;
179176

180177
@override
181-
LookupResult? lookup(String name, int fileOffset, Uri fileUri) {
178+
LookupResult? lookup(String name) {
182179
LookupResult? result = getTypeParameter(name);
183-
return result ?? _parent.lookup(name, fileOffset, fileUri);
180+
return result ?? _parent.lookup(name);
184181
}
185182

186183
@override
@@ -379,48 +376,6 @@ NamedBuilder computeAmbiguousDeclarationForImport(
379376
errorHasBeenReported: false);
380377
}
381378

382-
// Coverage-ignore(suite): Not run.
383-
abstract class ProblemBuilder extends NamedBuilderImpl {
384-
@override
385-
final String name;
386-
387-
final NamedBuilder builder;
388-
389-
@override
390-
final int fileOffset;
391-
392-
@override
393-
final Uri fileUri;
394-
395-
ProblemBuilder(this.name, this.builder, this.fileOffset, this.fileUri);
396-
397-
Message get message;
398-
399-
@override
400-
String get fullNameForErrors => name;
401-
}
402-
403-
// Coverage-ignore(suite): Not run.
404-
class AmbiguousBuilder extends ProblemBuilder {
405-
AmbiguousBuilder(
406-
String name, NamedBuilder builder, int charOffset, Uri fileUri)
407-
: super(name, builder, charOffset, fileUri);
408-
409-
@override
410-
Builder? get parent => null;
411-
412-
@override
413-
Message get message => templateDuplicatedDeclarationUse.withArguments(name);
414-
415-
NamedBuilder getFirstDeclaration() {
416-
NamedBuilder declaration = builder;
417-
while (declaration.next != null) {
418-
declaration = declaration.next!;
419-
}
420-
return declaration;
421-
}
422-
}
423-
424379
mixin ErroneousMemberBuilderMixin implements SourceMemberBuilder {
425380
@override
426381
// Coverage-ignore(suite): Not run.

pkg/front_end/lib/src/builder/builder_mixins.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ mixin DeclarationBuilderMixin implements IDeclarationBuilder {
2828
name.startsWith("_")) {
2929
return null;
3030
}
31-
MemberLookupResult? result = nameSpace.lookupLocalMember(name);
31+
MemberLookupResult? result = nameSpace.lookup(name);
3232
if (result != null && !result.isStatic) {
3333
result = null;
3434
}
@@ -60,7 +60,7 @@ mixin DeclarationBuilderMixin implements IDeclarationBuilder {
6060

6161
@override
6262
LookupResult? lookupLocalMember(String name, {bool required = false}) {
63-
LookupResult? result = nameSpace.lookupLocalMember(name);
63+
LookupResult? result = nameSpace.lookup(name);
6464
if (required && result == null) {
6565
internalProblem(
6666
templateInternalProblemNotFoundIn.withArguments(

pkg/front_end/lib/src/builder/constructor_reference_builder.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,14 @@ class ConstructorReferenceBuilder {
3939
if (qualifier != null) {
4040
String prefix = qualifier;
4141
String middle = typeName.name;
42-
declaration = scope.lookup(prefix, charOffset, fileUri)?.getable;
42+
declaration = scope.lookup(prefix)?.getable;
4343
if (declaration is TypeAliasBuilder) {
4444
TypeAliasBuilder aliasBuilder = declaration;
4545
declaration = aliasBuilder.unaliasDeclaration(typeArguments);
4646
}
4747
if (declaration is PrefixBuilder) {
4848
PrefixBuilder prefix = declaration;
49-
declaration =
50-
prefix.lookup(middle, typeName.nameOffset, fileUri)?.getable;
49+
declaration = prefix.lookup(middle)?.getable;
5150
} else if (declaration is DeclarationBuilder) {
5251
MemberLookupResult? result =
5352
declaration.findConstructorOrFactory(middle, accessingLibrary);
@@ -57,7 +56,7 @@ class ConstructorReferenceBuilder {
5756
}
5857
}
5958
} else {
60-
declaration = scope.lookup(typeName.name, charOffset, fileUri)?.getable;
59+
declaration = scope.lookup(typeName.name)?.getable;
6160
if (declaration is TypeAliasBuilder) {
6261
TypeAliasBuilder aliasBuilder = declaration;
6362
declaration = aliasBuilder.unaliasDeclaration(typeArguments);

pkg/front_end/lib/src/builder/invalid_builder.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class InvalidBuilder extends TypeDeclarationBuilderImpl
8383
}
8484

8585
@override
86+
// TODO(johnniwinther): This should probably return `null`.
8687
MemberBuilder get getable => this;
8788

8889
@override

0 commit comments

Comments
 (0)