@@ -8,6 +8,7 @@ import 'dart:typed_data';
88
99import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
1010 show ScannerConfiguration;
11+ import 'package:front_end/src/base/name_space.dart' ;
1112import 'package:kernel/binary/ast_from_binary.dart'
1213 show
1314 BinaryBuilderWithMetadata,
@@ -65,13 +66,12 @@ import '../api_prototype/incremental_kernel_generator.dart'
6566import '../api_prototype/lowering_predicates.dart'
6667 show isExtensionThisName, syntheticThisName;
6768import '../api_prototype/memory_file_system.dart' show MemoryFileSystem;
68- import '../builder/builder.dart' show Builder;
69+ import '../builder/builder.dart' show Builder, NamedBuilder ;
6970import '../builder/declaration_builders.dart'
7071 show ClassBuilder, ExtensionBuilder, ExtensionTypeDeclarationBuilder;
7172import '../builder/library_builder.dart'
7273 show CompilationUnit, LibraryBuilder, SourceCompilationUnit;
7374import '../builder/member_builder.dart' show MemberBuilder;
74- import '../builder/name_iterator.dart' show NameIterator;
7575import '../builder/property_builder.dart' ;
7676import '../codes/cfe_codes.dart' ;
7777import '../dill/dill_class_builder.dart' show DillClassBuilder;
@@ -99,10 +99,9 @@ import 'compiler_context.dart' show CompilerContext;
9999import 'hybrid_file_system.dart' show HybridFileSystem;
100100import 'incremental_serializer.dart' show IncrementalSerializer;
101101import 'library_graph.dart' show LibraryGraph;
102- import 'lookup_result.dart' ;
103102import 'ticker.dart' show Ticker;
104103import 'uri_translator.dart' show UriTranslator;
105- import 'uris.dart' show dartCore, getPartUri;
104+ import 'uris.dart' show getPartUri;
106105
107106final Uri dartFfiUri = Uri .parse ("dart:ffi" );
108107
@@ -594,10 +593,11 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
594593 /// source builders. Patch that up.
595594
596595 // Maps from old library builder to map of new content.
597- Map <LibraryBuilder , Map <String , Builder >>? replacementMap = {};
596+ Map <LibraryBuilder , Map <String , NamedBuilder >>? replacementMap = {};
598597
599598 // Maps from old library builder to map of new content.
600- Map <LibraryBuilder , Map <String , Builder >>? replacementSettersMap = {};
599+ Map <LibraryBuilder , Map <String , NamedBuilder >>? replacementSettersMap =
600+ {};
601601
602602 _experimentalInvalidationFillReplacementMaps (
603603 convertedLibraries! , replacementMap, replacementSettersMap);
@@ -609,10 +609,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
609609
610610 // Clear cached calculations that points (potential) to now replaced
611611 // things.
612- for ( Builder builder in builder.libraryNameSpace.localMembers) {
613- if (builder is DillClassBuilder ) {
614- builder. clearCachedValues ();
615- }
612+ Iterator < DillClassBuilder > iterator = builder.libraryNameSpace
613+ . filteredIterator (includeDuplicates : true );
614+ while (iterator. moveNext ()) {
615+ iterator.current. clearCachedValues ();
616616 }
617617 }
618618 }
@@ -652,62 +652,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
652652 // Coverage-ignore(suite): Not run.
653653 String ? _hasEquivalentScopes (SourceLibraryBuilder sourceLibraryBuilder,
654654 DillLibraryBuilder dillLibraryBuilder) {
655- bool isEquivalent = true ;
656- StringBuffer sb = new StringBuffer ();
657- sb.writeln ('Mismatch on ${sourceLibraryBuilder .importUri }:' );
658- sourceLibraryBuilder.exportNameSpace
659- .forEachLocalMember ((String name, Builder sourceBuilder) {
660- Builder ? dillBuilder =
661- dillLibraryBuilder.exportNameSpace.lookupLocalMember (name)? .getable;
662- if (dillBuilder == null ) {
663- if ((name == 'dynamic' || name == 'Never' ) &&
664- sourceLibraryBuilder.importUri == dartCore) {
665- // The source library builder for dart:core has synthetically
666- // injected builders for `dynamic` and `Never` which do not have
667- // corresponding classes in the AST.
668- return ;
669- }
670- sb.writeln ('No dill builder for ${name }: $sourceBuilder ' );
671- isEquivalent = false ;
672- }
673- });
674- dillLibraryBuilder.exportNameSpace
675- .forEachLocalMember ((String name, Builder dillBuilder) {
676- Builder ? sourceBuilder =
677- sourceLibraryBuilder.exportNameSpace.lookupLocalMember (name)? .getable;
678- if (sourceBuilder == null ) {
679- sb.writeln ('No source builder for ${name }: $dillBuilder ' );
680- isEquivalent = false ;
681- }
682- });
683- sourceLibraryBuilder.exportNameSpace
684- .forEachLocalSetter ((String name, Builder sourceBuilder) {
685- Builder ? dillBuilder =
686- dillLibraryBuilder.exportNameSpace.lookupLocalMember (name)? .setable;
687- if (dillBuilder == null ) {
688- sb.writeln ('No dill builder for ${name }=: $sourceBuilder ' );
689- isEquivalent = false ;
690- }
691- });
692- dillLibraryBuilder.exportNameSpace
693- .forEachLocalSetter ((String name, Builder dillBuilder) {
694- LookupResult ? result =
695- sourceLibraryBuilder.exportNameSpace.lookupLocalMember (name);
696- Builder ? sourceBuilder = result? .setable;
697- if (sourceBuilder == null ) {
698- sourceBuilder = result? .getable;
699- if (sourceBuilder is PropertyBuilder && sourceBuilder.hasSetter) {
700- // Assignable fields can be lowered into a getter and setter.
701- return ;
702- }
703- sb.writeln ('No source builder for ${name }=: $dillBuilder ' );
704- isEquivalent = false ;
705- }
706- });
707- if (isEquivalent) {
708- return null ;
709- }
710- return sb.toString ();
655+ return areNameSpacesEquivalent (
656+ importUri: sourceLibraryBuilder.importUri,
657+ sourceNameSpace: sourceLibraryBuilder.exportNameSpace,
658+ dillNameSpace: dillLibraryBuilder.exportNameSpace);
711659 }
712660
713661 /// Compute which libraries to output and which (previous) errors/warnings we
@@ -819,24 +767,24 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
819767 /// happen because of experimental invalidation.
820768 void _experimentalInvalidationFillReplacementMaps (
821769 Map <LibraryBuilder , CompilationUnit > rebuildBodiesMap,
822- Map <LibraryBuilder , Map <String , Builder >> replacementMap,
823- Map <LibraryBuilder , Map <String , Builder >> replacementSettersMap) {
770+ Map <LibraryBuilder , Map <String , NamedBuilder >> replacementMap,
771+ Map <LibraryBuilder , Map <String , NamedBuilder >> replacementSettersMap) {
824772 for (MapEntry <LibraryBuilder , CompilationUnit > entry
825773 in rebuildBodiesMap.entries) {
826- Map <String , Builder > childReplacementMap = {};
827- Map <String , Builder > childReplacementSettersMap = {};
774+ Map <String , NamedBuilder > childReplacementMap = {};
775+ Map <String , NamedBuilder > childReplacementSettersMap = {};
828776 CompilationUnit mainCompilationUnit = rebuildBodiesMap[entry.key]! ;
829777 replacementMap[entry.key] = childReplacementMap;
830778 replacementSettersMap[entry.key] = childReplacementSettersMap;
831- NameIterator iterator =
832- mainCompilationUnit.libraryBuilder.localMembersNameIterator ;
779+ Iterator < NamedBuilder > iterator =
780+ mainCompilationUnit.libraryBuilder.localMembersIterator ;
833781 while (iterator.moveNext ()) {
834- Builder childBuilder = iterator.current;
782+ NamedBuilder childBuilder = iterator.current;
835783 if (childBuilder is SourceExtensionBuilder &&
836784 childBuilder.isUnnamedExtension) {
837785 continue ;
838786 }
839- String name = iterator .name;
787+ String name = childBuilder .name;
840788 Map <String , Builder > map;
841789 if (isMappedAsSetter (childBuilder)) {
842790 map = childReplacementSettersMap;
@@ -889,10 +837,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
889837 Map <DillLibraryBuilder , CompilationUnit > rebuildBodiesMap) {
890838 if (experimentalInvalidation != null ) {
891839 // Maps from old library builder to map of new content.
892- Map <LibraryBuilder , Map <String , Builder >> replacementMap = {};
840+ Map <LibraryBuilder , Map <String , NamedBuilder >> replacementMap = {};
893841
894842 // Maps from old library builder to map of new content.
895- Map <LibraryBuilder , Map <String , Builder >> replacementSettersMap = {};
843+ Map <LibraryBuilder , Map <String , NamedBuilder >> replacementSettersMap = {};
896844
897845 _experimentalInvalidationFillReplacementMaps (
898846 rebuildBodiesMap, replacementMap, replacementSettersMap);
@@ -961,10 +909,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
961909 if (builder.isBuiltAndMarked) {
962910 // Clear cached calculations in classes which upon calculation can
963911 // mark things as needed.
964- for ( Builder builder in builder.libraryNameSpace.localMembers) {
965- if (builder is DillClassBuilder ) {
966- builder. clearCachedValues ();
967- }
912+ Iterator < DillClassBuilder > iterator = builder.libraryNameSpace
913+ . filteredIterator (includeDuplicates : true );
914+ while (iterator. moveNext ()) {
915+ iterator.current. clearCachedValues ();
968916 }
969917 builder.isBuiltAndMarked = false ;
970918 }
@@ -1883,7 +1831,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
18831831 packageLanguageVersion:
18841832 new ImplicitLanguageVersion (libraryBuilder.languageVersion),
18851833 loader: lastGoodKernelTarget.loader,
1886- nameOrigin : libraryBuilder,
1834+ resolveInLibrary : libraryBuilder,
18871835 isUnsupported: libraryBuilder.isUnsupported,
18881836 forAugmentationLibrary: false ,
18891837 forPatchLibrary: false ,
@@ -1897,17 +1845,6 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
18971845
18981846 SourceLibraryBuilder debugLibrary = debugCompilationUnit.createLibrary ();
18991847 debugLibrary.buildNameSpace ();
1900- libraryBuilder.libraryNameSpace.forEachLocalMember ((name, member) {
1901- debugLibrary.libraryNameSpace
1902- .addLocalMember (name, member, setter: false );
1903- });
1904- libraryBuilder.libraryNameSpace.forEachLocalSetter ((name, member) {
1905- debugLibrary.libraryNameSpace
1906- .addLocalMember (name, member, setter: true );
1907- });
1908- libraryBuilder.libraryNameSpace.forEachLocalExtension ((member) {
1909- debugLibrary.libraryNameSpace.addExtension (member);
1910- });
19111848 debugLibrary.buildScopes (lastGoodKernelTarget.loader.coreLibrary);
19121849 _ticker.logMs ("Created debug library" );
19131850
@@ -1939,15 +1876,14 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
19391876 debugLibrary.addImportsToScope ();
19401877 _ticker.logMs ("Added imports" );
19411878 }
1942- SourceCompilationUnit ? orgCompilationUnit = debugCompilationUnit;
19431879 debugCompilationUnit = new SourceCompilationUnitImpl (
19441880 importUri: libraryUri,
19451881 fileUri: debugExprUri,
19461882 originImportUri: libraryUri,
19471883 packageLanguageVersion:
19481884 new ImplicitLanguageVersion (libraryBuilder.languageVersion),
19491885 loader: lastGoodKernelTarget.loader,
1950- nameOrigin : libraryBuilder,
1886+ resolveInLibrary : libraryBuilder,
19511887 parentScope: debugCompilationUnit.compilationUnitScope,
19521888 isUnsupported: libraryBuilder.isUnsupported,
19531889 forAugmentationLibrary: false ,
@@ -1962,24 +1898,6 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
19621898
19631899 debugLibrary = debugCompilationUnit.createLibrary ();
19641900
1965- // Copy over the prefix namespace for extensions
1966- // (`forEachExtensionInScope`) to be found when imported via prefixes.
1967- // TODO(johnniwinther): Do we still need these with the new scope
1968- // structure?
1969- orgCompilationUnit.prefixNameSpace.forEachLocalMember ((name, member) {
1970- debugCompilationUnit.prefixNameSpace
1971- .addLocalMember (name, member, setter: false );
1972- });
1973- // Does a prefix namespace ever have anything but locals?
1974- orgCompilationUnit.prefixNameSpace.forEachLocalSetter ((name, member) {
1975- debugCompilationUnit.prefixNameSpace
1976- .addLocalMember (name, member, setter: true );
1977- });
1978- orgCompilationUnit.prefixNameSpace.forEachLocalExtension ((member) {
1979- debugCompilationUnit.prefixNameSpace.addExtension (member);
1980- });
1981- orgCompilationUnit = null ;
1982-
19831901 HybridFileSystem hfs =
19841902 lastGoodKernelTarget.fileSystem as HybridFileSystem ;
19851903 MemoryFileSystem fs = hfs.memory;
0 commit comments