[cfe] Use (Name)Iterator instead of forEach
- where a closure isn't already available.
Change-Id: I8fb76af6336898a8ccf7f051dc6da665d0c09e55
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/257202
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index b34f25b..661dc70 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -8,6 +8,7 @@
import 'builder/builder.dart';
import 'builder/library_builder.dart';
+import 'builder/name_iterator.dart';
import 'builder/prefix_builder.dart';
import 'kernel/utils.dart' show toKernelCombinators;
@@ -18,8 +19,6 @@
import 'source/source_library_builder.dart';
-import 'scope.dart' show NameIteratorExtension;
-
class Import {
/// The library that is importing [imported];
final SourceLibraryBuilder importer;
@@ -76,18 +75,28 @@
prefixBuilder!.addToExportScope(name, member, charOffset);
};
}
- imported!.exportScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: false)
- .forEach((String name, Builder member) {
+ NameIterator<Builder> iterator = imported!.exportScope.filteredNameIterator(
+ includeDuplicates: false, includeAugmentations: false);
+ while (iterator.moveNext()) {
+ String name = iterator.name;
+ Builder member = iterator.current;
+ bool include = true;
if (combinators != null) {
for (CombinatorBuilder combinator in combinators!) {
- if (combinator.isShow && !combinator.names.contains(name)) return;
- if (combinator.isHide && combinator.names.contains(name)) return;
+ if (combinator.isShow && !combinator.names.contains(name)) {
+ include = false;
+ break;
+ }
+ if (combinator.isHide && combinator.names.contains(name)) {
+ include = false;
+ break;
+ }
}
}
- add(name, member);
- });
+ if (include) {
+ add(name, member);
+ }
+ }
if (prefixBuilder != null) {
Builder? existing =
importer.addBuilder(prefix, prefixBuilder!, prefixCharOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index fb34f1a..de9eb8c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -385,12 +385,14 @@
coreTypes.objectClass != declarationBuilder.cls,
benchmarker = libraryBuilder.loader.target.benchmarker,
this.scope = enclosingScope {
- formalParameterScope
- ?.filteredIterator<VariableBuilder>(
- includeDuplicates: false, includeAugmentations: false)
- .forEach((VariableBuilder builder) {
- typeInferrer.assignedVariables.declare(builder.variable!);
- });
+ Iterator<VariableBuilder>? iterator =
+ formalParameterScope?.filteredIterator<VariableBuilder>(
+ includeDuplicates: false, includeAugmentations: false);
+ if (iterator != null) {
+ while (iterator.moveNext()) {
+ typeInferrer.assignedVariables.declare(iterator.current.variable!);
+ }
+ }
}
BodyBuilder.withParents(FieldBuilder field, SourceLibraryBuilder part,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 5583a40..a4a152d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -30,6 +30,7 @@
import '../builder/invalid_type_declaration_builder.dart';
import '../builder/library_builder.dart';
import '../builder/member_builder.dart';
+import '../builder/name_iterator.dart';
import '../builder/named_type_builder.dart';
import '../builder/never_type_declaration_builder.dart';
import '../builder/nullability_builder.dart';
@@ -62,7 +63,7 @@
templateMissingImplementationCause,
templateSuperclassHasNoDefaultConstructor;
import '../problems.dart' show unhandled;
-import '../scope.dart' show AmbiguousBuilder, NameIteratorExtension;
+import '../scope.dart' show AmbiguousBuilder;
import '../source/name_scheme.dart';
import '../source/source_class_builder.dart' show SourceClassBuilder;
import '../source/source_constructor_builder.dart';
@@ -1322,14 +1323,12 @@
patchConstructorNames.add(name);
}
});
- builder.constructorScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: true)
- .forEach((String name, Builder builder) {
- if (builder is ConstructorBuilder) {
- patchConstructorNames.remove(name);
- }
- });
+ NameIterator<ConstructorBuilder> iterator = builder.constructorScope
+ .filteredNameIterator<ConstructorBuilder>(
+ includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ patchConstructorNames.remove(iterator.name);
+ }
Set<String> kernelConstructorNames =
cls.constructors.map((c) => c.name.text).toSet().difference({""});
return kernelConstructorNames.containsAll(patchConstructorNames);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 472e8b5..247aa38 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -285,13 +285,15 @@
}
}
- constructorScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: true)
- .forEach((String name, Builder constructor) {
+ NameIterator<MemberBuilder> iterator =
+ constructorScope.filteredNameIterator(
+ includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ String name = iterator.name;
+ MemberBuilder constructor = iterator.current;
Builder? member = scope.lookupLocalMember(name, setter: false);
- if (member == null) return;
- if (!member.isStatic) return;
+ if (member == null) continue;
+ if (!member.isStatic) continue;
// TODO(ahe): Revisit these messages. It seems like the last two should
// be `context` parameter to this message.
addProblem(templateConflictsWithMember.withArguments(name),
@@ -308,7 +310,7 @@
member.charOffset,
noLength);
}
- });
+ }
scope.forEachLocalSetter((String name, Builder setter) {
Builder? constructor = constructorScope.lookupLocalMember(name);
@@ -1677,10 +1679,10 @@
}
int count = constructorReferences!.length;
if (count != 0) {
- constructorScope
- .filteredIterator(
- parent: this, includeDuplicates: true, includeAugmentations: true)
- .forEach((MemberBuilder declaration) {
+ Iterator<MemberBuilder> iterator = constructorScope.filteredIterator(
+ parent: this, includeDuplicates: true, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ MemberBuilder declaration = iterator.current;
if (declaration.parent?.origin != origin) {
unexpected("$fileUri", "${declaration.parent!.fileUri}", charOffset,
fileUri);
@@ -1795,7 +1797,7 @@
}
}
}
- });
+ }
}
return count;
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 1589add..4f05bc5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -343,10 +343,10 @@
.registerInitializedField(valuesBuilder);
constructors[""] = synthesizedDefaultConstructorBuilder;
} else {
- constructorScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: true)
- .forEach((name, member) {
+ Iterator<MemberBuilder> iterator = constructorScope.filteredNameIterator(
+ includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ MemberBuilder member = iterator.current;
if (member is DeclaredSourceConstructorBuilder) {
member.ensureGrowableFormals();
member.formals!.insert(
@@ -370,7 +370,7 @@
libraryBuilder,
charOffset));
}
- });
+ }
}
if (scope.lookupLocalMember("toString", setter: false) == null) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 8c6fbad..da15627 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -241,16 +241,17 @@
int buildBodyNodes({required bool addMembersToLibrary}) {
int count = 0;
- scope
- .filteredIterator<SourceMemberBuilder>(
- parent: this, includeDuplicates: false, includeAugmentations: true)
- .forEach((SourceMemberBuilder declaration) {
+ Iterator<SourceMemberBuilder> iterator =
+ scope.filteredIterator<SourceMemberBuilder>(
+ parent: this, includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ SourceMemberBuilder declaration = iterator.current;
count +=
declaration.buildBodyNodes((Member member, BuiltMemberKind kind) {
_buildMember(declaration, member, kind,
addMembersToLibrary: addMembersToLibrary);
});
- });
+ }
return count;
}
@@ -289,15 +290,13 @@
}
}
- void build(SourceMemberBuilder member) {
- member.buildOutlineExpressions(
+ Iterator<SourceMemberBuilder> iterator =
+ scope.filteredIterator<SourceMemberBuilder>(
+ parent: this, includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ iterator.current.buildOutlineExpressions(
classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
}
-
- scope
- .filteredIterator<SourceMemberBuilder>(
- parent: this, includeDuplicates: false, includeAugmentations: true)
- .forEach(build);
}
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 93f8034..592cd5e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1385,18 +1385,19 @@
import.finalizeImports(this);
}
if (!explicitCoreImport) {
- loader.coreLibrary.exportScope
+ NameIterator<Builder> iterator = loader.coreLibrary.exportScope
.filteredNameIterator(
- includeDuplicates: false, includeAugmentations: false)
- .forEach((String name, Builder member) {
- addToScope(name, member, -1, true);
- });
+ includeDuplicates: false, includeAugmentations: false);
+ while (iterator.moveNext()) {
+ addToScope(iterator.name, iterator.current, -1, true);
+ }
}
- exportScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: false)
- .forEach((String name, Builder member) {
+ NameIterator<Builder> iterator = exportScope.filteredNameIterator(
+ includeDuplicates: false, includeAugmentations: false);
+ while (iterator.moveNext()) {
+ String name = iterator.name;
+ Builder member = iterator.current;
if (member.parent != this) {
if (member is DynamicTypeDeclarationBuilder) {
assert(name == 'dynamic',
@@ -1446,7 +1447,7 @@
}
}
}
- });
+ }
}
@override
@@ -3753,10 +3754,11 @@
count += computeDefaultTypesForVariables(declaration.typeVariables,
inErrorRecovery: issues.isNotEmpty);
- declaration.constructorScope
- .filteredNameIterator(
- includeDuplicates: false, includeAugmentations: true)
- .forEach((String name, Builder member) {
+ Iterator<MemberBuilder> iterator = declaration.constructorScope
+ .filteredIterator(
+ includeDuplicates: false, includeAugmentations: true);
+ while (iterator.moveNext()) {
+ MemberBuilder member = iterator.current;
List<FormalParameterBuilder>? formals;
if (member is SourceFactoryBuilder) {
assert(member.isFactory,
@@ -3780,7 +3782,7 @@
formal.type);
}
}
- });
+ }
}
declaration.forEach((String name, Builder member) {
if (member is SourceProcedureBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 2a0c8b5..b3ef27c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1359,14 +1359,14 @@
wasChanged = false;
for (SourceLibraryBuilder exported in both) {
for (Export export in exported.exporters) {
- exported.exportScope
+ NameIterator<Builder> iterator = exported.exportScope
.filteredNameIterator(
- includeDuplicates: false, includeAugmentations: false)
- .forEach((String name, Builder member) {
- if (export.addToExportScope(name, member)) {
+ includeDuplicates: false, includeAugmentations: false);
+ while (iterator.moveNext()) {
+ if (export.addToExportScope(iterator.name, iterator.current)) {
wasChanged = true;
}
- });
+ }
}
}
} while (wasChanged);
@@ -1392,19 +1392,19 @@
_builders.forEach((Uri uri, dynamic l) {
SourceLibraryBuilder library = l;
Set<Builder> members = new Set<Builder>();
- Iterator<Builder> iterator = library.localMembersIterator;
- while (iterator.moveNext()) {
- members.add(iterator.current);
+ Iterator<Builder> memberIterator = library.localMembersIterator;
+ while (memberIterator.moveNext()) {
+ members.add(memberIterator.current);
}
List<String> exports = <String>[];
- library.exportScope
+ NameIterator<Builder> exportsIterator = library.exportScope
.filteredNameIterator(
- includeDuplicates: true, includeAugmentations: false)
- .forEach((String name, Builder member) {
- if (!members.contains(member)) {
- exports.add(name);
+ includeDuplicates: true, includeAugmentations: false);
+ while (exportsIterator.moveNext()) {
+ if (!members.contains(exportsIterator.current)) {
+ exports.add(exportsIterator.name);
}
- });
+ }
if (exports.isNotEmpty) {
print("$uri exports $exports");
}