Skip to content

Commit 92a6d21

Browse files
mkustermannCommit Queue
authored andcommitted
[dart2wasm] Avoid O(n) scan to find module for a [Library].
Change-Id: I6e0a6813b8519b9432d4f7da18cfca1153d813c5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/464900 Reviewed-by: Ömer Ağacan <[email protected]> Commit-Queue: Martin Kustermann <[email protected]>
1 parent 39c60bc commit 92a6d21

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

pkg/dart2wasm/lib/modules.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,6 @@ class ModuleMetadata {
7272
ModuleMetadata._(this.moduleImportName, this.moduleName,
7373
{this.skipEmit = false, this.isMain = false});
7474

75-
/// Whether or not the provided kernel [Reference] is included in this module.
76-
bool containsReference(Reference reference) {
77-
final enclosingLibrary = _enclosingLibraryForReference(reference);
78-
if (enclosingLibrary == null) return false;
79-
return libraries.contains(enclosingLibrary);
80-
}
81-
8275
@override
8376
String toString() => '$moduleImportName($libraries)';
8477
}
@@ -88,6 +81,12 @@ class ModuleOutputData {
8881
/// All [ModuleMetadata]s generated for the program.
8982
final List<ModuleMetadata> modules;
9083

84+
/// Maps the [Library] to the corresponding [ModuleMetadata].
85+
late final Map<Library, ModuleMetadata> _libraryToModuleMetadata = {
86+
for (final metadata in modules)
87+
for (final library in metadata.libraries) library: metadata,
88+
};
89+
9190
ModuleOutputData(this.modules) : assert(modules[0].isMain);
9291

9392
ModuleMetadata get mainModule => modules[0];
@@ -96,8 +95,9 @@ class ModuleOutputData {
9695
bool get hasMultipleModules => modules.length > 1;
9796

9897
/// Returns the module that contains [reference].
99-
ModuleMetadata moduleForReference(Reference reference) =>
100-
modules.firstWhere((e) => e.containsReference(reference));
98+
ModuleMetadata moduleForReference(Reference reference) {
99+
return _libraryToModuleMetadata[_enclosingLibraryForReference(reference)]!;
100+
}
101101
}
102102

103103
/// Module strategy that puts all libraries into a single module.

0 commit comments

Comments
 (0)