@@ -12,16 +12,12 @@ import 'package:kernel/ast.dart';
1212import 'package:kernel/class_hierarchy.dart' ;
1313import 'package:kernel/core_types.dart' ;
1414
15- import '../target.dart' as wasm_target;
1615import 'interop_transformer.dart' ;
1716import 'method_collector.dart' ;
1817import 'runtime_blob.dart' ;
1918
20- JSMethods _performJSInteropTransformations (
21- Component component,
22- CoreTypes coreTypes,
23- ClassHierarchy classHierarchy,
24- Set <Library > interopDependentLibraries) {
19+ JSMethods _performJSInteropTransformations (CoreTypes coreTypes,
20+ ClassHierarchy classHierarchy, Set <Library > interopDependentLibraries) {
2521 // Transform kernel and generate JS methods.
2622 final transformer = InteropTransformer (coreTypes, classHierarchy);
2723 for (final library in interopDependentLibraries) {
@@ -50,18 +46,13 @@ JSMethods _performJSInteropTransformations(
5046}
5147
5248class RuntimeFinalizer {
49+ static String escape (String s) => json.encode (s);
50+
5351 final Map <Procedure , ({String importName, String jsCode})> allJSMethods;
5452
5553 RuntimeFinalizer (this .allJSMethods);
5654
57- String generate (
58- Iterable <Procedure > translatedProcedures,
59- List <String > constantStrings,
60- bool requireJsBuiltin,
61- bool supportsAdditionalModuleLoading,
62- wasm_target.Mode mode) {
63- String escape (String s) => json.encode (s);
64-
55+ String generateJsMethods (Iterable <Procedure > translatedProcedures) {
6556 Set <Procedure > usedProcedures = {};
6657 final usedJSMethods = < ({String importName, String jsCode})> [];
6758 for (Procedure p in translatedProcedures) {
@@ -91,19 +82,31 @@ class RuntimeFinalizer {
9182 }
9283 }
9384
94- final builtins = [
95- 'builtins: [\' js-string\' ]' ,
96- if (requireJsBuiltin) 'importedStringConstants: \' S\' ' ,
97- ];
85+ return jsMethods.toString ();
86+ }
9887
99- String internalizedStrings = '' ;
100- if (constantStrings.isNotEmpty) {
101- internalizedStrings = '''
88+ String _generateInternalizedStrings ( List < String > constantStrings) {
89+ if (constantStrings.isEmpty) return '' ;
90+ return '''
10291 s: [
10392 ${constantStrings .map (escape ).join (',\n ' )}
10493 ],
10594''' ;
106- }
95+ }
96+
97+ String generate (
98+ Iterable <Procedure > translatedProcedures,
99+ List <String > constantStrings,
100+ bool requireJsBuiltin,
101+ bool supportsAdditionalModuleLoading) {
102+ final jsMethods = generateJsMethods (translatedProcedures);
103+
104+ final builtins = [
105+ 'builtins: [\' js-string\' ]' ,
106+ if (requireJsBuiltin) 'importedStringConstants: \' S\' ' ,
107+ ];
108+
109+ String internalizedStrings = _generateInternalizedStrings (constantStrings);
107110
108111 final jsStringBuiltinPolyfillImportVars = {
109112 'JS_POLYFILL_IMPORT' :
@@ -125,29 +128,40 @@ class RuntimeFinalizer {
125128 ...jsStringBuiltinPolyfillImportVars,
126129 ...moduleLoadingImportVars,
127130 'BUILTINS_MAP_BODY' : builtins.join (', ' ),
128- 'JS_METHODS' : jsMethods. toString () ,
131+ 'JS_METHODS' : jsMethods,
129132 'IMPORTED_JS_STRINGS_IN_MJS' : internalizedStrings,
130133 'JS_STRING_POLYFILL_METHODS' : requireJsBuiltin ? '' : jsPolyFillMethods,
131134 'DEFERRED_LIBRARY_HELPER_METHODS' : moduleLoadingHelperMethods,
132135 });
133136 }
137+
138+ String generateDynamicModule (
139+ Iterable <Procedure > translatedProcedures, List <String > constantStrings) {
140+ final jsMethods = generateJsMethods (translatedProcedures);
141+
142+ return dynamicModuleJsImportTemplate.instantiate ({
143+ 'JS_METHODS' : jsMethods,
144+ 'IMPORTED_JS_STRINGS_IN_MJS' :
145+ _generateInternalizedStrings (constantStrings),
146+ });
147+ }
134148}
135149
136- RuntimeFinalizer createRuntimeFinalizer (
137- Component component, CoreTypes coreTypes, ClassHierarchy classHierarchy) {
150+ JSMethods performJSInteropTransformations ( List < Library > libraries,
151+ CoreTypes coreTypes, ClassHierarchy classHierarchy) {
138152 Set <Library > transitiveImportingJSInterop = {
139153 ...calculateTransitiveImportsOfJsInteropIfUsed (
140- component , Uri .parse ("package:js/js.dart" )),
154+ libraries , Uri .parse ("package:js/js.dart" )),
141155 ...calculateTransitiveImportsOfJsInteropIfUsed (
142- component , Uri .parse ("dart:_js_annotations" )),
156+ libraries , Uri .parse ("dart:_js_annotations" )),
143157 ...calculateTransitiveImportsOfJsInteropIfUsed (
144- component , Uri .parse ("dart:_js_helper" )),
158+ libraries , Uri .parse ("dart:_js_helper" )),
145159 ...calculateTransitiveImportsOfJsInteropIfUsed (
146- component , Uri .parse ("dart:js_interop" )),
160+ libraries , Uri .parse ("dart:js_interop" )),
147161 };
148- final jsInteropMethods = _performJSInteropTransformations (
149- component, coreTypes, classHierarchy, transitiveImportingJSInterop);
150- return RuntimeFinalizer (jsInteropMethods );
162+
163+ return _performJSInteropTransformations (
164+ coreTypes, classHierarchy, transitiveImportingJSInterop );
151165}
152166
153167// Removes indentation common among all lines of [block] (except for first one)
0 commit comments