Skip to content

Commit b207705

Browse files
natebiggsCommit Queue
authored andcommitted
[dart2wasm] Update interop specializers to live in library with specialized member.
Change-Id: I072240ff98bb9f571156a101b8cf18dcc8c6877c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/439480 Reviewed-by: Srujan Gaddam <[email protected]> Reviewed-by: Ömer Ağacan <[email protected]> Commit-Queue: Nate Biggs <[email protected]>
1 parent 83d8622 commit b207705

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

pkg/dart2wasm/lib/deferred_loading.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,14 @@ class DeferredLoadingModuleStrategy extends DefaultModuleStrategy {
145145
final enqueuedDeferredRoots = <Library>{entryPoint};
146146
final libraryToRootSet = <Library, _RootSet>{};
147147
final importTargetMap = <Library, Map<String, Library>>{};
148+
bool isMainRoot = true;
149+
148150
while (deferredRootStack.isNotEmpty) {
149151
final currentRoot = deferredRootStack.removeLast();
150152
final eagerWorkStack = [currentRoot];
151153
final enqueuedEagerLibraries = <Library>{currentRoot};
152154
final newDeferredRoots = <Library>[];
153-
if (identical(currentRoot, entryPoint)) {
155+
if (isMainRoot) {
154156
// Add required libraries because the compiler has implicit
155157
// dependencies on these. Also add libraries containing 'wasm:export'
156158
// since embedders might need access to these from the main module.
@@ -192,6 +194,7 @@ class DeferredLoadingModuleStrategy extends DefaultModuleStrategy {
192194
deferredRootStack.add(newRoot);
193195
}
194196
}
197+
isMainRoot = false;
195198
}
196199
return (libraryToRootSet, importTargetMap);
197200
}

pkg/dart2wasm/lib/js/interop_specializer.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,18 @@ abstract class _Specializer {
101101
// Create Dart procedure stub for JS method.
102102
String jsMethodName = _methodCollector.generateMethodName();
103103
final dartProcedure = _methodCollector.addInteropProcedure(
104-
'|$jsMethodName',
105-
'dart2wasm.$jsMethodName',
106-
FunctionNode(null,
107-
positionalParameters: dartPositionalParameters,
108-
returnType: function.returnType is VoidType
109-
? VoidType()
110-
: _util.nullableWasmExternRefType),
111-
fileUri,
112-
AnnotationType.import,
113-
isExternal: true);
104+
'|$jsMethodName',
105+
'dart2wasm.$jsMethodName',
106+
FunctionNode(null,
107+
positionalParameters: dartPositionalParameters,
108+
returnType: function.returnType is VoidType
109+
? VoidType()
110+
: _util.nullableWasmExternRefType),
111+
fileUri,
112+
AnnotationType.import,
113+
library: interopMethod.enclosingLibrary,
114+
isExternal: true,
115+
);
114116
_methodCollector.addMethod(
115117
dartProcedure, jsMethodName, generateJS(jsParameterStrings));
116118
return dartProcedure;

pkg/dart2wasm/lib/js/method_collector.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ class MethodCollector {
2525

2626
Procedure addInteropProcedure(String name, String pragmaOptionString,
2727
FunctionNode function, Uri fileUri, AnnotationType type,
28-
{required bool isExternal}) {
28+
{required bool isExternal, Library? library}) {
29+
library ??= _library;
2930
final procedure = Procedure(
30-
Name(name, _library), ProcedureKind.Method, function,
31+
Name(name, library), ProcedureKind.Method, function,
3132
isStatic: true, isExternal: isExternal, fileUri: fileUri);
3233
_util.annotateProcedure(procedure, pragmaOptionString, type);
33-
_library.addProcedure(procedure);
34+
library.addProcedure(procedure);
3435
return procedure;
3536
}
3637

0 commit comments

Comments
 (0)