[dart2wasm] Replace "dynamic module" with "submodule" where appropriate.
Change-Id: I4e51e10928ccc26c18f2a63f6cb6b23cd618d853
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426003
Commit-Queue: Mayank Patke <fishythefish@google.com>
Reviewed-by: Ömer Ağacan <omersa@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
diff --git a/pkg/dart2wasm/lib/class_info.dart b/pkg/dart2wasm/lib/class_info.dart
index 979aa36..6424b84 100644
--- a/pkg/dart2wasm/lib/class_info.dart
+++ b/pkg/dart2wasm/lib/class_info.dart
@@ -374,13 +374,13 @@
info = ClassInfo(cls, classId, superInfo.depth + 1, struct, superInfo,
typeParameterMatch: typeParameterMatch);
if (translator.dynamicModuleSupportEnabled &&
- cls.isDynamicModuleExtendable(translator.coreTypes)) {
- // If a class is extendable in a dynamic module then we have to be
+ cls.isDynamicSubmoduleExtendable(translator.coreTypes)) {
+ // If a class is extendable in a submodule then we have to be
// conservative and mark it as not being final.
struct.hasAnySubtypes = true;
}
- if (translator.isDynamicModule) {
+ if (translator.isDynamicSubmodule) {
final brandIndex = translator
.dynamicModuleInfo!.metadata.classMetadata[cls]?.brandIndex;
if (brandIndex != null) {
@@ -504,7 +504,7 @@
// Class infos by class-id, will be populated by the calls to
// [_createStructForClass] and [_createStructForRecordClass] below.
translator.classes = List<ClassInfo>.filled(
- (classIdNumbering.maxDynamicModuleClassId ??
+ (classIdNumbering.maxDynamicSubmoduleClassId ??
classIdNumbering.maxClassId) +
1,
topInfo);
@@ -540,10 +540,10 @@
for (final cls in dfsOrder) {
ClassInfo? representation;
if (translator.dynamicModuleSupportEnabled &&
- cls.isDynamicModuleExtendable(translator.coreTypes)) {
+ cls.isDynamicSubmoduleExtendable(translator.coreTypes)) {
assert(!translator.builtinTypes.containsKey(cls));
- // If a class is extendable in a dynamic module then we have to be
+ // If a class is extendable in a dynamic submodule then we have to be
// conservative and assume it might be a subclass of Object. The Object
// class maps to topInfo because boxed values are a subtype of Object in
// Dart but not of the object struct.
@@ -567,16 +567,16 @@
final mainModuleConcreteRange =
classIdNumbering.getConcreteClassIdRangeForMainModule(cls);
// Only non-extendable classes can get here so they should only have
- // concrete implementations in either the main module or the dynamic
- // module, not both.
- if (translator.isDynamicModule && mainModuleConcreteRange.isEmpty) {
- final dynamicModuleConcreteRange =
- classIdNumbering.getConcreteClassIdRangeForDynamicModule(cls);
- assert(dynamicModuleConcreteRange.isNotEmpty);
- addRanges(dynamicModuleConcreteRange);
+ // concrete implementations in either the main module or the submodule,
+ // not both.
+ if (translator.isDynamicSubmodule && mainModuleConcreteRange.isEmpty) {
+ final submoduleConcreteRange =
+ classIdNumbering.getConcreteClassIdRangeForDynamicSubmodule(cls);
+ assert(submoduleConcreteRange.isNotEmpty);
+ addRanges(submoduleConcreteRange);
} else {
assert(classIdNumbering
- .getConcreteClassIdRangeForDynamicModule(cls)
+ .getConcreteClassIdRangeForDynamicSubmodule(cls)
.isEmpty);
addRanges(mainModuleConcreteRange);
}
@@ -608,31 +608,31 @@
final Map<Class, List<Class>> _subclasses;
final Map<Class, List<Class>> _implementors;
final Map<Class, List<Range>> _concreteSubclassIdRange;
- final Map<Class, List<Range>> _concreteSubclassIdRangeForDynamicModule;
+ final Map<Class, List<Range>> _concreteSubclassIdRangeForDynamicSubmodule;
final Set<Class> _masqueraded;
final List<Class> dfsOrder;
final Map<Class, ClassId> classIds;
final int maxConcreteClassId;
final int maxClassId;
- final int? maxDynamicModuleConcreteClassId;
- final int? maxDynamicModuleClassId;
+ final int? maxDynamicSubmoduleConcreteClassId;
+ final int? maxDynamicSubmoduleClassId;
- int get firstDynamicModuleClassId => maxClassId + 1;
+ int get firstDynamicSubmoduleClassId => maxClassId + 1;
ClassIdNumbering._(
this.translator,
this._subclasses,
this._implementors,
this._concreteSubclassIdRange,
- this._concreteSubclassIdRangeForDynamicModule,
+ this._concreteSubclassIdRangeForDynamicSubmodule,
this._masqueraded,
this.dfsOrder,
this.classIds,
this.maxConcreteClassId,
this.maxClassId,
- this.maxDynamicModuleConcreteClassId,
- this.maxDynamicModuleClassId);
+ this.maxDynamicSubmoduleConcreteClassId,
+ this.maxDynamicSubmoduleClassId);
final Map<Class, Set<Class>> _transitiveImplementors = {};
Set<Class> _getTransitiveImplementors(Class klass) {
@@ -670,17 +670,17 @@
klass, _concreteClassIdRanges, _concreteSubclassIdRange);
}
- final Map<Class, List<Range>> _concreteClassIdRangesForDynamicModule = {};
- List<Range> getConcreteClassIdRangeForDynamicModule(Class klass) {
+ final Map<Class, List<Range>> _concreteClassIdRangesForDynamicSubmodule = {};
+ List<Range> getConcreteClassIdRangeForDynamicSubmodule(Class klass) {
return _getConcreteClassIdRange(
klass,
- _concreteClassIdRangesForDynamicModule,
- _concreteSubclassIdRangeForDynamicModule);
+ _concreteClassIdRangesForDynamicSubmodule,
+ _concreteSubclassIdRangeForDynamicSubmodule);
}
List<Range> getConcreteClassIdRangeForCurrentModule(Class klass) {
- return translator.isDynamicModule
- ? getConcreteClassIdRangeForDynamicModule(klass)
+ return translator.isDynamicSubmodule
+ ? getConcreteClassIdRangeForDynamicSubmodule(klass)
: getConcreteClassIdRangeForMainModule(klass);
}
@@ -727,7 +727,7 @@
final implementors = <Class, List<Class>>{};
final classIds = <Class, ClassId>{};
- if (translator.isDynamicModule) {
+ if (translator.isDynamicSubmodule) {
final savedMapping = translator.dynamicModuleInfo!.metadata.classMetadata;
savedMapping.forEach((cls, metadata) {
final classId = metadata.classId;
@@ -832,7 +832,7 @@
// Maps any class to a dense range of concrete class ids that are subclasses
// of that class.
final concreteSubclassRanges = <Class, List<Range>>{};
- final concreteSubclassRangesForDynamicModule = <Class, List<Range>>{};
+ final concreteSubclassRangesForDynamicSubmodule = <Class, List<Range>>{};
int nextConcreteClassId = (savedMaxClassId ?? (firstClassId - 1)) + 1;
int nextAbstractClassId = nextConcreteClassId + concreteClassCount;
@@ -867,7 +867,7 @@
}
final subclassesRangesToBuild = savedMaxClassId != null
- ? concreteSubclassRangesForDynamicModule
+ ? concreteSubclassRangesForDynamicSubmodule
: concreteSubclassRanges;
dfs(root, (Class cls) {
@@ -911,7 +911,7 @@
subclasses,
implementors,
concreteSubclassRanges,
- concreteSubclassRangesForDynamicModule,
+ concreteSubclassRangesForDynamicSubmodule,
masqueraded,
dfsOrder,
classIds,
diff --git a/pkg/dart2wasm/lib/closures.dart b/pkg/dart2wasm/lib/closures.dart
index d282d1f..3937344 100644
--- a/pkg/dart2wasm/lib/closures.dart
+++ b/pkg/dart2wasm/lib/closures.dart
@@ -203,11 +203,11 @@
late final List<List<ClosureRepresentationsForParameterCount>>
representations;
- // Dynamic modules invoke closures dynamically so they use the base structs
+ // Dynamic submodules invoke closures dynamically so they use the base structs
// in all cases. Therefore, We only need one global copy of the
// ClosureRepresentation for generic and one for non-generic functions.
- ClosureRepresentation? _dynamicModuleRepresentation;
- ClosureRepresentation? _dynamicModuleGenericRepresentation;
+ ClosureRepresentation? _dynamicSubmoduleRepresentation;
+ ClosureRepresentation? _dynamicSubmoduleGenericRepresentation;
Set<Constant> visitedConstants = Set.identity();
@@ -327,7 +327,7 @@
final type = translator.typesBuilder
.defineStruct(name, fields: fields, superType: superType);
if (translator.dynamicModuleSupportEnabled) {
- // Pessimistically assume there will be subtypes in a dynamic module. This
+ // Pessimistically assume there will be subtypes in a submodule. This
// ensures the struct is not final in all modules so the types are equal.
type.hasAnySubtypes = true;
}
@@ -406,10 +406,10 @@
int typeCount, int positionalCount, List<String> names) {
if (translator.dynamicModuleSupportEnabled) {
if (typeCount == 0) {
- return _dynamicModuleRepresentation ??=
+ return _dynamicSubmoduleRepresentation ??=
_createRepresentation(typeCount, 0, const [], null, null, const []);
}
- return _dynamicModuleGenericRepresentation ??=
+ return _dynamicSubmoduleGenericRepresentation ??=
_createRepresentation(typeCount, 0, const [], null, null, const []);
}
final representations =
@@ -524,7 +524,7 @@
// generation, after the imports have been added.
representation._instantiationTrampolinesGenerator = (module) {
- // Dynamic modules do not have any trampolines, only a dynamic call
+ // Dynamic submodules do not have any trampolines, only a dynamic call
// entry point.
if (translator.dynamicModuleSupportEnabled) return const [];
List<w.BaseFunction> instantiationTrampolines = [
diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart
index c8c927e..5d11477 100644
--- a/pkg/dart2wasm/lib/code_generator.dart
+++ b/pkg/dart2wasm/lib/code_generator.dart
@@ -1952,7 +1952,7 @@
List<({Range range, Reference target})> targetRanges = targets.targetRanges;
List<({Range range, Reference target})> staticDispatchRanges =
targets.staticDispatchRanges;
- if (!selector.isDynamicModuleOverrideable) {
+ if (!selector.isDynamicSubmoduleOverridable) {
if (targetRanges.length == 1) {
final target = translator.getFunctionEntry(targetRanges[0].target,
uncheckedEntry: useUncheckedEntry);
diff --git a/pkg/dart2wasm/lib/compile.dart b/pkg/dart2wasm/lib/compile.dart
index 11b60b2..edc6fd4 100644
--- a/pkg/dart2wasm/lib/compile.dart
+++ b/pkg/dart2wasm/lib/compile.dart
@@ -174,14 +174,14 @@
compilerOptions.compileSdk = true;
}
- final dynamicModuleMainUri = await resolveUri(options.dynamicModuleMainUri);
+ final dynamicMainModuleUri = await resolveUri(options.dynamicMainModuleUri);
final dynamicInterfaceUri = await resolveUri(options.dynamicInterfaceUri);
final isDynamicMainModule =
options.dynamicModuleType == DynamicModuleType.main;
final isDynamicSubmodule =
options.dynamicModuleType == DynamicModuleType.submodule;
if (isDynamicSubmodule) {
- compilerOptions.additionalDills.add(dynamicModuleMainUri!);
+ compilerOptions.additionalDills.add(dynamicMainModuleUri!);
if (options.validateDynamicModules) {
// We must pass the unresolved URI here to be compatible with the CFE
@@ -218,16 +218,16 @@
}
var jsInteropMethods = js.performJSInteropTransformations(
- component.getDynamicModuleLibraries(coreTypes),
+ component.getDynamicSubmoduleLibraries(coreTypes),
coreTypes,
classHierarchy);
if (isDynamicSubmodule) {
- // Join the dynamic module libraries with the TFAed component from the main
+ // Join the submodule libraries with the TFAed component from the main
// module compilation. JS interop transformer must be run before this since
// some methods it uses may have been tree-shaken from the TFAed component.
- (component, jsInteropMethods) = await generateDynamicModuleComponent(
- component, coreTypes, dynamicModuleMainUri!, jsInteropMethods);
+ (component, jsInteropMethods) = await generateDynamicSubmoduleComponent(
+ component, coreTypes, dynamicMainModuleUri!, jsInteropMethods);
coreTypes = CoreTypes(component);
classHierarchy =
ClassHierarchy(component, coreTypes) as ClosedWorldClassHierarchy;
@@ -235,7 +235,7 @@
}
final librariesToTransform = isDynamicSubmodule
- ? component.getDynamicModuleLibraries(coreTypes)
+ ? component.getDynamicSubmoduleLibraries(coreTypes)
: component.libraries;
final constantEvaluator = ConstantEvaluator(
options, target, component, coreTypes, classHierarchy, libraryIndex);
@@ -245,7 +245,7 @@
final Map<RecordShape, Class> recordClasses = generateRecordClasses(
component, coreTypes,
isDynamicMainModule: isDynamicMainModule,
- isDynamicModule: isDynamicSubmodule);
+ isDynamicSubmodule: isDynamicSubmodule);
target.recordClasses = recordClasses;
if (options.dumpKernelBeforeTfa != null) {
@@ -268,8 +268,8 @@
File.fromUri(dynamicInterfaceUri!).readAsStringSync(),
options.dynamicInterfaceUri!);
} else if (isDynamicSubmodule) {
- moduleStrategy = DynamicModuleStrategy(
- component, options, target, coreTypes, dynamicModuleMainUri!);
+ moduleStrategy = DynamicSubmoduleStrategy(
+ component, options, target, coreTypes, dynamicMainModuleUri!);
} else {
moduleStrategy = DefaultModuleStrategy(component);
}
@@ -282,10 +282,10 @@
if (isDynamicSubmodule) {
mainModuleMetadata =
await deserializeMainModuleMetadata(component, options);
- mainModuleMetadata.verifyDynamicModuleOptions(options);
+ mainModuleMetadata.verifyDynamicSubmoduleOptions(options);
} else if (isDynamicMainModule) {
MainModuleMetadata.verifyMainModuleOptions(options);
- await serializeMainModuleComponent(component, dynamicModuleMainUri!,
+ await serializeMainModuleComponent(component, dynamicMainModuleUri!,
optimized: false);
}
@@ -340,7 +340,7 @@
final jsRuntimeFinalizer = js.RuntimeFinalizer(jsInteropMethods);
final jsRuntime = isDynamicSubmodule
- ? jsRuntimeFinalizer.generateDynamicModule(
+ ? jsRuntimeFinalizer.generateDynamicSubmodule(
translator.functions.translatedProcedures,
translator.internalizedStringsForJSRuntime)
: jsRuntimeFinalizer.generate(
@@ -354,7 +354,7 @@
final supportJs = _generateSupportJs(options.translatorOptions);
if (isDynamicMainModule) {
await serializeMainModuleMetadata(component, translator, options);
- await serializeMainModuleComponent(component, dynamicModuleMainUri!,
+ await serializeMainModuleComponent(component, dynamicMainModuleUri!,
optimized: true);
}
diff --git a/pkg/dart2wasm/lib/compiler_options.dart b/pkg/dart2wasm/lib/compiler_options.dart
index a3e2987..6d120e7 100644
--- a/pkg/dart2wasm/lib/compiler_options.dart
+++ b/pkg/dart2wasm/lib/compiler_options.dart
@@ -17,7 +17,7 @@
String outputFile;
String? depFile;
DynamicModuleType? dynamicModuleType;
- Uri? dynamicModuleMainUri;
+ Uri? dynamicMainModuleUri;
Uri? dynamicInterfaceUri;
Uri? dynamicModuleMetadataFile;
bool validateDynamicModules = true;
@@ -45,7 +45,7 @@
}
if (enableDynamicModules) {
- if (dynamicModuleMainUri == null) {
+ if (dynamicMainModuleUri == null) {
throw ArgumentError("--dynamic-module-main must be specified if "
"compiling dynamic modules.");
}
diff --git a/pkg/dart2wasm/lib/constant_evaluator.dart b/pkg/dart2wasm/lib/constant_evaluator.dart
index 367be69..797884e 100644
--- a/pkg/dart2wasm/lib/constant_evaluator.dart
+++ b/pkg/dart2wasm/lib/constant_evaluator.dart
@@ -34,7 +34,7 @@
LibraryIndex libraryIndex)
: _checkBounds = !options.translatorOptions.omitBoundsChecks,
_minify = options.translatorOptions.minify,
- _hasDynamicModuleSupport = options.dynamicModuleMainUri != null,
+ _hasDynamicModuleSupport = options.enableDynamicModules,
_deferredLoadingEnabled =
options.translatorOptions.enableDeferredLoading ||
options.translatorOptions.enableMultiModuleStressTestMode,
diff --git a/pkg/dart2wasm/lib/constants.dart b/pkg/dart2wasm/lib/constants.dart
index ffbfa6e..d3a1b83 100644
--- a/pkg/dart2wasm/lib/constants.dart
+++ b/pkg/dart2wasm/lib/constants.dart
@@ -480,7 +480,7 @@
final w.ModuleBuilder targetModule;
ConstantCreator(this.constants, w.ModuleBuilder module)
- : targetModule = constants.translator.isDynamicModule
+ : targetModule = constants.translator.isDynamicSubmodule
? module
: constants.translator.mainModule;
@@ -517,8 +517,8 @@
{bool lazy = false}) {
assert(!type.nullable);
- // This function is only called once per [Constant]. If we compile a
- // dynamic module then the [dynamicModuleConstantIdMap] is pre-populated and
+ // This function is only called once per [Constant]. If we compile a dynamic
+ // submodule then the [dynamicModuleConstantIdMap] is pre-populated and
// we may find an export name. If we compile the main module, then the id
// will be `null`.
final dynamicModuleConstantIdMap = constants.dynamicMainModuleConstantId;
@@ -526,7 +526,7 @@
final isShareableAcrossModules = dynamicModuleConstantIdMap != null &&
constant.accept(_ConstantDynamicModuleSharedChecker(translator));
final needsRuntimeCanonicalization = isShareableAcrossModules &&
- translator.isDynamicModule &&
+ translator.isDynamicSubmodule &&
mainModuleExportId == null;
if (lazy || needsRuntimeCanonicalization) {
@@ -718,7 +718,7 @@
constants.instantiateConstant(
b, subConstant, info.struct.fields[i].type.unpacked);
if (isRelativeInterfaceType && i == FieldIndex.interfaceTypeClassId) {
- assert(translator.isDynamicModule);
+ assert(translator.isDynamicSubmodule);
translator.pushModuleId(b);
translator.callReference(translator.globalizeClassId.reference, b);
}
@@ -1219,12 +1219,13 @@
String _intToBase64(int i) => base64.encode(_intToLittleEndianBytes(i));
-/// Resolves to true if the visited Constant is accessible from dynamic modules.
+/// Resolves to true if the visited Constant is accessible from dynamic
+/// submodules.
///
-/// Constants that are accessible from dynamic modules should be:
+/// Constants that are accessible from dynamic submodules should be:
/// (1) Exported from the main module if they exist there and then imported
-/// into dynamic modules.
-/// (2) Runtime canonicalized by dynamic modules if they are not in the main
+/// into dynamic submodules.
+/// (2) Runtime canonicalized by dynamic submodules if they are not in the main
/// module.
class _ConstantDynamicModuleSharedChecker extends ConstantVisitor<bool>
with ConstantVisitorDefaultMixin<bool> {
@@ -1248,6 +1249,6 @@
return true;
}
return constant.classNode.constructors.any(
- (c) => c.isConst && c.isDynamicModuleCallable(translator.coreTypes));
+ (c) => c.isConst && c.isDynamicSubmoduleCallable(translator.coreTypes));
}
}
diff --git a/pkg/dart2wasm/lib/dart2wasm.dart b/pkg/dart2wasm/lib/dart2wasm.dart
index ab438b2..55a56bb 100644
--- a/pkg/dart2wasm/lib/dart2wasm.dart
+++ b/pkg/dart2wasm/lib/dart2wasm.dart
@@ -109,20 +109,18 @@
StringOption("dynamic-module-type",
(o, value) => o.dynamicModuleType = DynamicModuleType.parse(value)),
- // The modified dill file to be output by the main module compilation for
- // dynamic modules. The dill will contain the AST for the main module as well
- // as some annotations to help identify entities when compiling dynamic
- // modules.
+ // The modified dill file to be output by the dynamic main module compilation.
+ // The dill will contain the AST for the main module as well as some
+ // annotations to help identify entities when compiling dynamic submodules.
UriOption(
- "dynamic-module-main", (o, value) => o.dynamicModuleMainUri = value),
+ "dynamic-module-main", (o, value) => o.dynamicMainModuleUri = value),
// A yaml file describing the interface of the main module accessible from
- // dynamic modules.
+ // dynamic submodules.
UriOption(
"dynamic-module-interface", (o, value) => o.dynamicInterfaceUri = value),
- // A binary metadata file produced by the main module compilation for dynamic
- // modules.
+ // A binary metadata file produced by the dynamic main module compilation.
UriOption("dynamic-module-metadata",
(o, value) => o.dynamicModuleMetadataFile = value),
diff --git a/pkg/dart2wasm/lib/dispatch_table.dart b/pkg/dart2wasm/lib/dispatch_table.dart
index df694d4..f81d92c 100644
--- a/pkg/dart2wasm/lib/dispatch_table.dart
+++ b/pkg/dart2wasm/lib/dispatch_table.dart
@@ -50,8 +50,8 @@
/// performs type checks on the passed arguments.
bool useMultipleEntryPoints = false;
- bool isDynamicModuleOverrideable = false;
- bool isDynamicModuleCallable = false;
+ bool isDynamicSubmoduleOverridable = false;
+ bool isDynamicSubmoduleCallable = false;
/// Wasm function type for the selector.
///
@@ -98,8 +98,8 @@
sink.writeBoolList([
isSetter,
useMultipleEntryPoints,
- isDynamicModuleOverrideable,
- isDynamicModuleCallable,
+ isDynamicSubmoduleOverridable,
+ isDynamicSubmoduleCallable,
isNoSuchMethod
]);
sink.writeNullable(_checked, (targets) => targets.serialize(sink));
@@ -116,8 +116,8 @@
final [
isSetter,
useMultipleEntryPoints,
- isDynamicModuleOverrideable,
- isDynamicModuleCallable,
+ isDynamicSubmoduleOverridable,
+ isDynamicSubmoduleCallable,
isNoSuchMethod
] = source.readBoolList();
final checked =
@@ -134,8 +134,8 @@
return SelectorInfo._(dispatchTable, id, name, callCount, paramInfo,
isSetter: isSetter, isNoSuchMethod: isNoSuchMethod)
..useMultipleEntryPoints = useMultipleEntryPoints
- ..isDynamicModuleCallable = isDynamicModuleCallable
- ..isDynamicModuleOverrideable = isDynamicModuleOverrideable
+ ..isDynamicSubmoduleCallable = isDynamicSubmoduleCallable
+ ..isDynamicSubmoduleOverridable = isDynamicSubmoduleOverridable
.._checked = checked
.._unchecked = unchecked
.._normal = normal;
@@ -363,11 +363,11 @@
/// Builds the dispatch table for member calls.
class DispatchTable {
static const _functionType = w.RefType.func(nullable: true);
- final bool isDynamicModuleTable;
+ final bool isDynamicSubmoduleTable;
late final Map<TreeNode, ProcedureAttributesMetadata>
procedureAttributeMetadata =
- translator.isDynamicModule && !isDynamicModuleTable
+ translator.isDynamicSubmodule && !isDynamicSubmoduleTable
? (translator.component
.metadata[dynamicMainModuleProcedureAttributeMetadataTag]
as ProcedureAttributesMetadataRepository)
@@ -377,7 +377,7 @@
late final Translator translator;
late final List<TableSelectorInfo> _selectorMetadata =
- translator.isDynamicModule && !isDynamicModuleTable
+ translator.isDynamicSubmodule && !isDynamicSubmoduleTable
? (translator.component.metadata[dynamicMainModuleSelectorMetadataTag]
as TableSelectorMetadataRepository)
.mapping[translator.component]!
@@ -387,11 +387,11 @@
as TableSelectorMetadataRepository)
.mapping[translator.component]!
.selectors;
- late final int minClassId = isDynamicModuleTable
- ? translator.classIdNumbering.firstDynamicModuleClassId
+ late final int minClassId = isDynamicSubmoduleTable
+ ? translator.classIdNumbering.firstDynamicSubmoduleClassId
: 0;
- late final int maxClassId = isDynamicModuleTable
- ? translator.classIdNumbering.maxDynamicModuleConcreteClassId!
+ late final int maxClassId = isDynamicSubmoduleTable
+ ? translator.classIdNumbering.maxDynamicSubmoduleConcreteClassId!
: translator.classIdNumbering.maxConcreteClassId;
/// Maps selector IDs to selectors.
@@ -419,7 +419,7 @@
w.Table getWasmTable(w.ModuleBuilder module) =>
_importedWasmTables.get(_definedWasmTable, module);
- DispatchTable({this.isDynamicModuleTable = false});
+ DispatchTable({this.isDynamicSubmoduleTable = false});
void serialize(DataSerializer sink) {
sink.writeList(_selectorInfo.values, (s) => s.serialize(sink));
@@ -481,8 +481,8 @@
metadata.methodOrSetterCalledDynamically ||
member.name.text == "call");
- final isDynamicModuleOverrideable =
- member.isDynamicModuleOverrideable(translator.coreTypes);
+ final isDynamicSubmoduleOverridable =
+ member.isDynamicSubmoduleOverridable(translator.coreTypes);
final selector = _selectorInfo.putIfAbsent(
selectorId,
@@ -501,9 +501,9 @@
!target.isTearOffReference &&
translator.needToCheckTypesFor(member);
selector.useMultipleEntryPoints |= useMultipleEntryPoints;
- selector.isDynamicModuleOverrideable |= isDynamicModuleOverrideable;
- selector.isDynamicModuleCallable |=
- member.isDynamicModuleCallable(translator.coreTypes);
+ selector.isDynamicSubmoduleOverridable |= isDynamicSubmoduleOverridable;
+ selector.isDynamicSubmoduleCallable |=
+ member.isDynamicSubmoduleCallable(translator.coreTypes);
selector._addImplementationReference(target);
@@ -533,10 +533,11 @@
_dynamicMethods[memberName] ?? Iterable.empty();
void _initializeWasmTable() {
- final module =
- isDynamicModuleTable ? translator.dynamicModule : translator.mainModule;
+ final module = isDynamicSubmoduleTable
+ ? translator.dynamicSubmodule
+ : translator.mainModule;
_definedWasmTable = module.tables.define(_functionType, _table.length);
- if (!isDynamicModuleTable) {
+ if (!isDynamicSubmoduleTable) {
for (final module in translator.modules) {
// Ensure the dispatch table is imported into every module as the first
// table.
@@ -546,7 +547,7 @@
}
void build() {
- if (!isDynamicModuleTable && translator.isDynamicModule) {
+ if (!isDynamicSubmoduleTable && translator.isDynamicSubmodule) {
_initializeWasmTable();
return;
}
@@ -573,8 +574,8 @@
selectors = Map.of(selectorsInClass[superCls]!);
}
- final classIsDynamicModuleExtendable =
- cls.isDynamicModuleExtendable(translator.coreTypes);
+ final classIsDynamicSubmoduleExtendable =
+ cls.isDynamicSubmoduleExtendable(translator.coreTypes);
/// Add a method (or getter, setter) of the current class ([info]) to
/// [reference]'s selector's targets.
@@ -622,10 +623,10 @@
// it's not possible to tear-off an operator. (no syntax for it)
if (member.kind == ProcedureKind.Method &&
(procedureMetadata.hasTearOffUses ||
- // If the member can be invoked from a dynamic module then
+ // If the member can be invoked from a dynamic submodule then
// we need to include the tearoff too.
- member.isDynamicModuleCallable(translator.coreTypes) ||
- classIsDynamicModuleExtendable)) {
+ member.isDynamicSubmoduleCallable(translator.coreTypes) ||
+ classIsDynamicSubmoduleExtendable)) {
addMember(member.tearOffReference, staticDispatch);
}
}
@@ -671,7 +672,7 @@
}
ranges.length = writeIndex + 1;
- final staticDispatchRanges = selector.isDynamicModuleOverrideable
+ final staticDispatchRanges = selector.isDynamicSubmoduleOverridable
? const <({Range range, Reference target})>[]
: (translator.options.polymorphicSpecialization || ranges.length == 1)
? ranges
@@ -777,7 +778,8 @@
}
void output() {
- final Map<w.BaseFunction, w.BaseFunction> wrappedDynamicModuleImports = {};
+ final Map<w.BaseFunction, w.BaseFunction> wrappedDynamicSubmoduleImports =
+ {};
for (int i = 0; i < _table.length; i++) {
Reference? target = _table[i];
if (target != null) {
@@ -793,13 +795,13 @@
if (fun != null) {
final targetModule = fun.enclosingModule;
if (targetModule == _definedWasmTable.enclosingModule) {
- if (isDynamicModuleTable &&
- targetModule == translator.dynamicModule &&
+ if (isDynamicSubmoduleTable &&
+ targetModule == translator.dynamicSubmodule &&
fun is w.ImportedFunction) {
- // Functions imported into dynamic modules may need to be wrapped
- // to match the updated dispatch table signature.
- fun = wrappedDynamicModuleImports[fun] ??=
- _wrapDynamicModuleFunction(target, fun);
+ // Functions imported into submodules may need to be wrapped to
+ // match the updated dispatch table signature.
+ fun = wrappedDynamicSubmoduleImports[fun] ??=
+ _wrapDynamicSubmoduleFunction(target, fun);
}
_definedWasmTable.setElement(i, fun);
} else {
@@ -813,7 +815,7 @@
}
}
- w.BaseFunction _wrapDynamicModuleFunction(
+ w.BaseFunction _wrapDynamicSubmoduleFunction(
Reference target, w.BaseFunction importedFunction) {
final mainSelector =
translator.dynamicMainModuleDispatchTable!.selectorForTarget(target);
@@ -821,8 +823,8 @@
final localSelector = translator.dispatchTable.selectorForTarget(target);
final localSignature = localSelector.signature;
- // If the type is the same in both the main module and the dynamic module,
- // use the imported function itself.
+ // If the type is the same in both the main module and the submodule, use
+ // the imported function itself.
if (mainSignature.isStructurallyEqualTo(localSignature)) {
return importedFunction;
}
@@ -831,7 +833,7 @@
// The local signature should include all the parameters necessary to call
// the target in main since the local signature must include the target
// member itself and any other members in the main module's selector range.
- final wrapper = translator.dynamicModule.functions
+ final wrapper = translator.dynamicSubmodule.functions
.define(localSignature, '${target.asMember} wrapper');
final ib = wrapper.body;
@@ -876,12 +878,12 @@
if (selector.isNoSuchMethod) {
return true;
}
- if (selector.isDynamicModuleCallable) return true;
+ if (selector.isDynamicSubmoduleCallable) return true;
if (selector.callCount == 0) {
return false;
}
- if (selector.isDynamicModuleOverrideable) return true;
+ if (selector.isDynamicSubmoduleOverridable) return true;
final targets = selector.targets(unchecked: false);
diff --git a/pkg/dart2wasm/lib/dynamic_forwarders.dart b/pkg/dart2wasm/lib/dynamic_forwarders.dart
index dc38424..03237d1 100644
--- a/pkg/dart2wasm/lib/dynamic_forwarders.dart
+++ b/pkg/dart2wasm/lib/dynamic_forwarders.dart
@@ -78,7 +78,7 @@
w.ModuleBuilder module)
: function = module.functions.define(_kind.functionType(translator),
"$_kind forwarder for '$memberName'"),
- assert(!translator.isDynamicModule ||
+ assert(!translator.isDynamicSubmodule ||
(memberName == 'call' && _kind == _ForwarderKind.Getter));
void _generateCode(Translator translator) {
diff --git a/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart b/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
index a878c53..5703f70 100644
--- a/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
+++ b/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
@@ -121,8 +121,8 @@
final int callCount;
final bool isSetter;
final bool useMultipleEntryPoints;
- final bool isDynamicModuleOverrideable;
- final bool isDynamicModuleCallable;
+ final bool isDynamicSubmoduleOverridable;
+ final bool isDynamicSubmoduleCallable;
final bool isNoSuchMethod;
final SelectorTargets? checked;
final SelectorTargets? unchecked;
@@ -135,8 +135,8 @@
this.callCount,
this.isSetter,
this.useMultipleEntryPoints,
- this.isDynamicModuleOverrideable,
- this.isDynamicModuleCallable,
+ this.isDynamicSubmoduleOverridable,
+ this.isDynamicSubmoduleCallable,
this.isNoSuchMethod,
this.checked,
this.unchecked,
@@ -150,8 +150,8 @@
sink.writeBoolList([
isSetter,
useMultipleEntryPoints,
- isDynamicModuleOverrideable,
- isDynamicModuleCallable,
+ isDynamicSubmoduleOverridable,
+ isDynamicSubmoduleCallable,
isNoSuchMethod
]);
sink.writeNullable(checked, (targets) => targets.serialize(sink));
@@ -167,8 +167,8 @@
final [
isSetter,
useMultipleEntryPoints,
- isDynamicModuleOverrideable,
- isDynamicModuleCallable,
+ isDynamicSubmoduleOverridable,
+ isDynamicSubmoduleCallable,
isNoSuchMethod
] = source.readBoolList();
final checked =
@@ -185,8 +185,8 @@
callCount,
isSetter,
useMultipleEntryPoints,
- isDynamicModuleOverrideable,
- isDynamicModuleCallable,
+ isDynamicSubmoduleOverridable,
+ isDynamicSubmoduleCallable,
isNoSuchMethod,
checked,
unchecked,
@@ -200,7 +200,7 @@
final List<Reference?> table;
// Ignore dynamic selectors since dynamic calls are not allowed from
- // dynamic modules.
+ // submodules.
DispatchTableMetadata(this.selectors, this.table);
}
@@ -208,8 +208,8 @@
/// Metadata produced by the main module.
///
/// This data will get serialized as part of the main module compilation process
-/// and will be provided as an input to be deserialized by subsequent dynamic
-/// module compilations.
+/// and will be provided as an input to be deserialized by subsequent submodule
+/// compilations.
class MainModuleMetadata {
/// Class to metadata about the class.
final Map<Class, ClassMetadata> classMetadata;
@@ -221,7 +221,7 @@
late final DispatchTable dispatchTable;
/// Contains each invoked reference that targets an updateable function.
- final Set<Reference> invokedOverrideableReferences;
+ final Set<Reference> invokedOverridableReferences;
/// Maps invocation keys (either selector or builtin) to the implementation's
/// index in the runtime table. Key includes whether the key was invoked
@@ -232,7 +232,7 @@
final List<Class> dfsOrderClassIds;
/// Saved flags from the main module to verify that settings have not changed
- /// between main module invocation and dynamic module invocation.
+ /// between main module invocation and submodule invocation.
final TranslatorOptions mainModuleTranslatorOptions;
final Map<String, String> mainModuleEnvironment;
@@ -240,7 +240,7 @@
this.classMetadata,
this.callableReferenceIds,
this.dispatchTable,
- this.invokedOverrideableReferences,
+ this.invokedOverridableReferences,
this.keyInvocationToIndex,
this.dfsOrderClassIds,
this.mainModuleTranslatorOptions,
@@ -250,7 +250,7 @@
this.mainModuleTranslatorOptions, this.mainModuleEnvironment)
: classMetadata = {},
callableReferenceIds = {},
- invokedOverrideableReferences = {},
+ invokedOverridableReferences = {},
keyInvocationToIndex = {},
dfsOrderClassIds = [];
@@ -299,7 +299,7 @@
dispatchTable.serialize(sink);
- sink.writeList(invokedOverrideableReferences, sink.writeReference);
+ sink.writeList(invokedOverridableReferences, sink.writeReference);
sink.writeMap(keyInvocationToIndex, sink.writeInt, sink.writeInt);
@@ -357,16 +357,16 @@
}
}
- void verifyDynamicModuleOptions(WasmCompilerOptions options) {
+ void verifyDynamicSubmoduleOptions(WasmCompilerOptions options) {
final translatorOptions = options.translatorOptions;
Never fail(String optionName) {
throw StateError(
- 'Inconsistent flag for dynamic module compilation: $optionName');
+ 'Inconsistent flag for dynamic submodule compilation: $optionName');
}
// TODO(natebiggs): Disallow certain flags from being used in conjunction
- // with dynamic modules.
+ // with submodules.
if (translatorOptions.enableAsserts !=
mainModuleTranslatorOptions.enableAsserts) {
@@ -457,20 +457,20 @@
includeSource: false);
}
-Future<(Component, JSMethods)> generateDynamicModuleComponent(
+Future<(Component, JSMethods)> generateDynamicSubmoduleComponent(
Component component,
CoreTypes coreTypes,
Uri dynamicModuleMainUri,
JSMethods jsInteropMethods) async {
- final dynamicModuleComponentBytes = writeComponentToBytes(
- Component(libraries: component.getDynamicModuleLibraries(coreTypes)));
+ final submoduleComponentBytes = writeComponentToBytes(
+ Component(libraries: component.getDynamicSubmoduleLibraries(coreTypes)));
final optimizedMainComponentBytes =
await File(_makeOptDillPath(dynamicModuleMainUri.path)).readAsBytes();
final concatenatedComponentBytes = Uint8List(
- dynamicModuleComponentBytes.length + optimizedMainComponentBytes.length);
+ submoduleComponentBytes.length + optimizedMainComponentBytes.length);
concatenatedComponentBytes.setAll(0, optimizedMainComponentBytes);
concatenatedComponentBytes.setAll(
- optimizedMainComponentBytes.length, dynamicModuleComponentBytes);
+ optimizedMainComponentBytes.length, submoduleComponentBytes);
final newComponent = Component()
..addMetadataRepository(DynamicModuleGlobalIdRepository())
..addMetadataRepository(DynamicModuleConstantRepository())
@@ -499,7 +499,7 @@
Component component, WasmCompilerOptions options) async {
final filename = options.dynamicModuleMetadataFile ??
Uri.parse(path.setExtension(
- options.dynamicModuleMainUri!.toFilePath(), '.dyndata'));
+ options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
final dynamicModuleMetadataBytes = await File.fromUri(filename).readAsBytes();
final source = DataDeserializer(dynamicModuleMetadataBytes, component);
return MainModuleMetadata.deserialize(source);
@@ -509,7 +509,7 @@
Translator translator, WasmCompilerOptions options) async {
final filename = options.dynamicModuleMetadataFile ??
Uri.parse(path.setExtension(
- options.dynamicModuleMainUri!.toFilePath(), '.dyndata'));
+ options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
final serializer = DataSerializer(component);
translator.dynamicModuleInfo!.metadata.serialize(serializer, translator);
await File.fromUri(filename).writeAsBytes(serializer.takeBytes());
diff --git a/pkg/dart2wasm/lib/dynamic_modules.dart b/pkg/dart2wasm/lib/dynamic_modules.dart
index d310257..dafe28b 100644
--- a/pkg/dart2wasm/lib/dynamic_modules.dart
+++ b/pkg/dart2wasm/lib/dynamic_modules.dart
@@ -34,7 +34,7 @@
// Pragmas used to annotate the kernel during main module compilation.
const String _mainModLibPragma = 'wasm:mainMod';
-const String _dynamicModuleEntryPointName = '\$invokeEntryPoint';
+const String _submoduleEntryPointName = '\$invokeEntryPoint';
enum DynamicModuleType {
main,
@@ -47,12 +47,11 @@
};
}
-extension DynamicModuleComponent on Component {
- static final Expando<Procedure> _dynamicModuleEntryPoint =
- Expando<Procedure>();
+extension DynamicSubmoduleComponent on Component {
+ static final Expando<Procedure> _submoduleEntryPoint = Expando<Procedure>();
- Procedure? get dynamicModuleEntryPoint => _dynamicModuleEntryPoint[this];
- List<Library> getDynamicModuleLibraries(CoreTypes coreTypes) =>
+ Procedure? get dynamicSubmoduleEntryPoint => _submoduleEntryPoint[this];
+ List<Library> getDynamicSubmoduleLibraries(CoreTypes coreTypes) =>
[...libraries.where((l) => !l.isFromMainModule(coreTypes))];
}
@@ -62,37 +61,37 @@
}
extension DynamicModuleClass on Class {
- bool isDynamicModuleExtendable(CoreTypes coreTypes) =>
+ bool isDynamicSubmoduleExtendable(CoreTypes coreTypes) =>
hasPragma(coreTypes, this, kDynModuleExtendablePragmaName) ||
hasPragma(coreTypes, this, kDynModuleImplicitlyExtendablePragmaName);
}
extension DynamicModuleMember on Member {
- bool isDynamicModuleCallable(CoreTypes coreTypes) =>
+ bool isDynamicSubmoduleCallable(CoreTypes coreTypes) =>
hasPragma(coreTypes, this, kDynModuleCallablePragmaName) ||
hasPragma(coreTypes, this, kDynModuleImplicitlyCallablePragmaName);
- bool isDynamicModuleCallableNoTearOff(CoreTypes coreTypes) =>
+ bool isDynamicSubmoduleCallableNoTearOff(CoreTypes coreTypes) =>
getPragma(coreTypes, this, kDynModuleCallablePragmaName,
defaultValue: '') ==
'call';
- bool isDynamicModuleOverrideable(CoreTypes coreTypes) =>
+ bool isDynamicSubmoduleOverridable(CoreTypes coreTypes) =>
hasPragma(coreTypes, this, kDynModuleCanBeOverriddenPragmaName) ||
hasPragma(coreTypes, this, kDynModuleCanBeOverriddenImplicitlyPragmaName);
}
-class DynamicModuleOutputData extends ModuleOutputData {
+class DynamicSubmoduleOutputData extends ModuleOutputData {
final CoreTypes coreTypes;
- final ModuleOutput _dynamicModule;
- DynamicModuleOutputData(this.coreTypes, super.modules, super.importMap)
- : _dynamicModule = modules[1];
+ final ModuleOutput _submodule;
+ DynamicSubmoduleOutputData(this.coreTypes, super.modules, super.importMap)
+ : _submodule = modules[1];
@override
ModuleOutput moduleForReference(Reference reference) {
// Rather than create tear-offs for all dynamic callable methods in the main
- // module, we create them as needed in the dynamic modules.
- if (reference.isTearOffReference) return _dynamicModule;
+ // module, we create them as needed in the submodules.
+ if (reference.isTearOffReference) return _submodule;
return super.moduleForReference(reference);
}
@@ -150,7 +149,7 @@
}
// These members don't have normal bodies and should therefore not be
- // considered directly callable from dynamic modules.
+ // considered directly callable from submodules.
final Set<Member> excludedIntrinsics = {
coreTypes.index.getProcedure("dart:_wasm", "WasmFunction", "get:call"),
coreTypes.index.getConstructor("dart:_boxed_int", "BoxedInt", "_"),
@@ -164,9 +163,9 @@
coreTypes, member, kWasmEntryPointPragmaName,
defaultValue: '') !=
null;
- final isDynamicModuleCallable = member.isDynamicModuleCallable(coreTypes);
+ final isSubmoduleCallable = member.isDynamicSubmoduleCallable(coreTypes);
- if (isEntryPoint && !isDynamicModuleCallable) {
+ if (isEntryPoint && !isSubmoduleCallable) {
add(member, kDynModuleCallablePragmaName);
}
}
@@ -200,35 +199,35 @@
}
}
-class DynamicModuleStrategy extends ModuleStrategy {
+class DynamicSubmoduleStrategy extends ModuleStrategy {
final Component component;
final WasmCompilerOptions options;
final WasmTarget kernelTarget;
final Uri mainModuleComponentUri;
final CoreTypes coreTypes;
- DynamicModuleStrategy(this.component, this.options, this.kernelTarget,
+ DynamicSubmoduleStrategy(this.component, this.options, this.kernelTarget,
this.coreTypes, this.mainModuleComponentUri);
@override
void prepareComponent() {
- final dynamicEntryPoint = _findDynamicEntryPoint(component, coreTypes);
- addWasmEntryPointPragma(dynamicEntryPoint, coreTypes);
- DynamicModuleComponent._dynamicModuleEntryPoint[component] =
- dynamicEntryPoint;
+ final submoduleEntryPoint = _findSubmoduleEntryPoint(component, coreTypes);
+ addWasmEntryPointPragma(submoduleEntryPoint, coreTypes);
+ DynamicSubmoduleComponent._submoduleEntryPoint[component] =
+ submoduleEntryPoint;
_registerLibraries();
- _prepareWasmEntryPoint(dynamicEntryPoint);
+ _prepareWasmEntryPoint(submoduleEntryPoint);
_addTfaMetadata();
}
- void _prepareWasmEntryPoint(Procedure dynamicEntryPoint) {
- dynamicEntryPoint.function.returnType = const DynamicType();
+ void _prepareWasmEntryPoint(Procedure submoduleEntryPoint) {
+ submoduleEntryPoint.function.returnType = const DynamicType();
// Export the entry point so that the JS runtime can get the function and
// pass it to the main module.
- addPragma(dynamicEntryPoint, 'wasm:export', coreTypes,
- value: StringConstant(_dynamicModuleEntryPointName));
+ addPragma(submoduleEntryPoint, 'wasm:export', coreTypes,
+ value: StringConstant(_submoduleEntryPointName));
}
void _registerLibraries() {
@@ -236,10 +235,10 @@
// libraries are included across dynamic modules.
final registerLibraryUris = coreTypes.index
.getTopLevelProcedure('dart:_internal', 'registerLibraryUris');
- final entryPoint = component.dynamicModuleEntryPoint!;
+ final entryPoint = component.dynamicSubmoduleEntryPoint!;
final libraryUris = ListLiteral([
...component
- .getDynamicModuleLibraries(coreTypes)
+ .getDynamicSubmoduleLibraries(coreTypes)
.where((l) => '${l.importUri}' != dynamicModulesRecordsLibraryUri)
.map((l) => StringLiteral(l.importUri.toString()))
], typeArgument: coreTypes.stringNonNullableRawType);
@@ -251,7 +250,7 @@
..parent = entryPoint.function;
}
- static Procedure _findDynamicEntryPoint(
+ static Procedure _findSubmoduleEntryPoint(
Component component, CoreTypes coreTypes) {
for (final library in component.libraries) {
for (final procedure in library.procedures) {
@@ -264,7 +263,7 @@
}
}
}
- throw StateError('Entry point not found for dynamic module.');
+ throw StateError('Entry point not found for dynamic submodule.');
}
void _addTfaMetadata() {
@@ -314,16 +313,16 @@
ModuleOutputData buildModuleOutputData() {
final moduleBuilder = ModuleOutputBuilder();
final mainModule = moduleBuilder.buildModule(skipEmit: true);
- final dynamicModule = moduleBuilder.buildModule(emitAsMain: true);
+ final submodule = moduleBuilder.buildModule(emitAsMain: true);
for (final library in component.libraries) {
final module = hasPragma(coreTypes, library, _mainModLibPragma)
? mainModule
- : dynamicModule;
+ : submodule;
module.libraries.add(library);
}
- return DynamicModuleOutputData(
- coreTypes, [mainModule, dynamicModule], const {});
+ return DynamicSubmoduleOutputData(
+ coreTypes, [mainModule, submodule], const {});
}
}
@@ -337,9 +336,9 @@
ib.end();
}
-void _recordIdDynamic(w.FunctionBuilder f, Translator translator) {
+void _recordIdSubmodule(w.FunctionBuilder f, Translator translator) {
final ranges = translator.classIdNumbering
- .getConcreteClassIdRangeForDynamicModule(
+ .getConcreteClassIdRangeForDynamicSubmodule(
translator.coreTypes.recordClass);
final ib = f.body;
@@ -359,28 +358,28 @@
}
enum BuiltinUpdatableFunctions {
- recordId(_recordIdMain, _recordIdDynamic, _recordIdBuildType);
+ recordId(_recordIdMain, _recordIdSubmodule, _recordIdBuildType);
final void Function(w.FunctionBuilder, Translator) _buildMain;
- final void Function(w.FunctionBuilder, Translator) _buildDynamic;
+ final void Function(w.FunctionBuilder, Translator) _buildSubmodule;
final w.FunctionType Function(Translator) _buildType;
const BuiltinUpdatableFunctions(
- this._buildMain, this._buildDynamic, this._buildType);
+ this._buildMain, this._buildSubmodule, this._buildType);
}
class DynamicModuleInfo {
final Translator translator;
- Procedure? get dynamicEntryPoint =>
- translator.component.dynamicModuleEntryPoint;
- bool get isDynamicModule => dynamicEntryPoint != null;
+ Procedure? get submoduleEntryPoint =>
+ translator.component.dynamicSubmoduleEntryPoint;
+ bool get isSubmodule => submoduleEntryPoint != null;
late final w.FunctionBuilder initFunction;
late final MainModuleMetadata metadata;
late final w.Global moduleIdGlobal;
// null is used to indicate that skipDynamic was passed for this key.
- final Map<int, w.BaseFunction?> overrideableFunctions = {};
+ final Map<int, w.BaseFunction?> overridableFunctions = {};
final Map<ClassInfo, Map<w.ModuleBuilder, w.BaseFunction>>
_constantCacheCheckers = {};
@@ -389,28 +388,27 @@
final Map<w.StorageType, Map<w.ModuleBuilder, w.BaseFunction>>
_immutableArrayConstantCacheCheckers = {};
- late final w.ModuleBuilder dynamicModule =
+ late final w.ModuleBuilder submodule =
translator.modules.firstWhere((m) => m != translator.mainModule);
DynamicModuleInfo(this.translator, this.metadata);
- void initDynamicModule() {
- dynamicModule.functions.start = initFunction = dynamicModule.functions
- .define(translator.typesBuilder.defineFunction(const [], const []),
- "#init");
+ void initSubmodule() {
+ submodule.functions.start = initFunction = submodule.functions.define(
+ translator.typesBuilder.defineFunction(const [], const []), "#init");
// Make sure the exception tag is exported from the main module.
- translator.getExceptionTag(dynamicModule);
+ translator.getExceptionTag(submodule);
- if (isDynamicModule) {
- _initDynamicModuleId();
+ if (isSubmodule) {
+ _initSubmoduleId();
_initModuleRtt();
} else {
- _initializeDynamicAllocatableClasses();
+ _initializeSubmoduleAllocatableClasses();
_initializeCallableReferences();
}
- _initializeOverrideableReferences();
+ _initializeOverridableReferences();
}
void _initModuleRtt() {
@@ -423,8 +421,8 @@
b.drop();
}
- void _initDynamicModuleId() {
- final global = moduleIdGlobal = dynamicModule.globals
+ void _initSubmoduleId() {
+ final global = moduleIdGlobal = submodule.globals
.define(w.GlobalType(w.NumType.i64, mutable: true), '#_moduleId');
global.initializer
..i64_const(0)
@@ -432,8 +430,8 @@
final b = initFunction.body;
- final rangeSize = translator.classIdNumbering.maxDynamicModuleClassId! -
- translator.classIdNumbering.firstDynamicModuleClassId +
+ final rangeSize = translator.classIdNumbering.maxDynamicSubmoduleClassId! -
+ translator.classIdNumbering.firstDynamicSubmoduleClassId +
1;
b.i32_const(rangeSize);
@@ -441,18 +439,18 @@
b.global_set(moduleIdGlobal);
}
- bool _isClassDynamicModuleInstantiable(Class cls) {
- return cls.isDynamicModuleExtendable(translator.coreTypes) ||
+ bool _isClassSubmoduleInstantiable(Class cls) {
+ return cls.isDynamicSubmoduleExtendable(translator.coreTypes) ||
cls.constructors
- .any((e) => e.isDynamicModuleCallable(translator.coreTypes)) ||
+ .any((e) => e.isDynamicSubmoduleCallable(translator.coreTypes)) ||
cls.procedures.any((e) =>
- e.isFactory && e.isDynamicModuleCallable(translator.coreTypes));
+ e.isFactory && e.isDynamicSubmoduleCallable(translator.coreTypes));
}
void _initializeCallableReferences() {
for (final lib in translator.component.libraries) {
for (final member in lib.members) {
- if (!member.isDynamicModuleCallable(translator.coreTypes)) continue;
+ if (!member.isDynamicSubmoduleCallable(translator.coreTypes)) continue;
_forEachMemberReference(member, _registerStaticCallableTarget);
}
}
@@ -463,7 +461,7 @@
// Register any callable functions defined within this class.
for (final member in cls.members) {
- if (!member.isDynamicModuleCallable(translator.coreTypes)) continue;
+ if (!member.isDynamicSubmoduleCallable(translator.coreTypes)) continue;
if (!member.isInstanceMember) {
// Generate static members immediately since they are unconditionally
@@ -473,10 +471,10 @@
}
// Consider callable references invoked and therefore if they're
- // overrideable include them in the runtime dispatch table.
- if (member.isDynamicModuleOverrideable(translator.coreTypes)) {
+ // overridable include them in the runtime dispatch table.
+ if (member.isDynamicSubmoduleOverridable(translator.coreTypes)) {
_forEachMemberReference(
- member, metadata.invokedOverrideableReferences.add);
+ member, metadata.invokedOverridableReferences.add);
}
}
@@ -484,7 +482,7 @@
// directly allocatable.
if (cls.isAnonymousMixin) continue;
- if (cls.isAbstract && !_isClassDynamicModuleInstantiable(cls)) {
+ if (cls.isAbstract && !_isClassSubmoduleInstantiable(cls)) {
continue;
}
@@ -493,7 +491,7 @@
final targets = translator.hierarchy.getDispatchTargets(cls).followedBy(
translator.hierarchy.getDispatchTargets(cls, setters: true));
for (final member in targets) {
- if (!member.isDynamicModuleCallable(translator.coreTypes)) continue;
+ if (!member.isDynamicSubmoduleCallable(translator.coreTypes)) continue;
_forEachMemberReference(member,
(reference) => _registerCallableDispatchTarget(reference, cls));
@@ -504,7 +502,7 @@
/// If class [cls] is marked allocated then ensure we compile [target].
///
/// The [cls] may be marked allocated in
- /// [_initializeDynamicAllocatableClasses] which (together with this) will
+ /// [_initializeSubmoduleAllocatableClasses] which (together with this) will
/// enqueue the [target] for compilation. Otherwise the [cls] must be
/// allocated via a constructor call in the program itself.
void _registerCallableDispatchTarget(Reference target, Class cls) {
@@ -541,27 +539,27 @@
translator.functions.getFunction(target);
}
- void _initializeDynamicAllocatableClasses() {
+ void _initializeSubmoduleAllocatableClasses() {
for (final classInfo in translator.classesSupersFirst) {
final cls = classInfo.cls;
if (cls == null) continue;
if (cls.isAnonymousMixin) continue;
- if (_isClassDynamicModuleInstantiable(cls)) {
+ if (_isClassSubmoduleInstantiable(cls)) {
translator.functions.recordClassAllocation(classInfo.classId);
}
}
}
- void _initializeOverrideableReferences() {
+ void _initializeOverridableReferences() {
for (final builtin in BuiltinUpdatableFunctions.values) {
_createUpdateableFunction(builtin.index, builtin._buildType(translator),
buildMain: (f) => builtin._buildMain(f, translator),
- buildDynamic: (f) => builtin._buildDynamic(f, translator),
+ buildSubmodule: (f) => builtin._buildSubmodule(f, translator),
name: '#r_${builtin.name}');
}
- for (final reference in metadata.invokedOverrideableReferences) {
+ for (final reference in metadata.invokedOverridableReferences) {
final selector = translator.dispatchTable.selectorForTarget(reference);
translator.functions.recordSelectorUse(selector, false);
@@ -570,12 +568,12 @@
.selectorForTarget(reference);
final signature = _getGeneralizedSignature(mainSelector);
final buildMain = buildSelectorBranch(reference, mainSelector);
- final buildDynamic = buildSelectorBranch(reference, mainSelector);
+ final buildSubmodule = buildSelectorBranch(reference, mainSelector);
_createUpdateableFunction(
mainSelector.id + BuiltinUpdatableFunctions.values.length, signature,
buildMain: buildMain,
- buildDynamic: buildDynamic,
+ buildSubmodule: buildSubmodule,
name: '#s${mainSelector.id}_${mainSelector.name}');
}
}
@@ -595,8 +593,7 @@
if (member is Procedure) {
passReference(member.reference);
- // We ignore the tear-off and let each dynamic module generate it for
- // itself.
+ // We ignore the tear-off and let each submodule generate it for itself.
} else if (member is Field) {
passReference(member.getterReference);
if (member.hasSetter) {
@@ -615,15 +612,15 @@
void finishDynamicModule() {
_registerModuleRefs(
- isDynamicModule ? initFunction.body : translator.initFunction.body);
+ isSubmodule ? initFunction.body : translator.initFunction.body);
initFunction.body.end();
}
void _registerModuleRefs(w.InstructionsBuilder b) {
- final numKeys = overrideableFunctions.length;
+ final numKeys = overridableFunctions.length;
assert(numKeys < maxArrayNewFixedLength);
- final orderedFunctions = ([...overrideableFunctions.entries]
+ final orderedFunctions = ([...overridableFunctions.entries]
..sort((a, b) => a.key.compareTo(b.key)))
.map((e) => e.value);
@@ -643,26 +640,26 @@
int _createUpdateableFunction(int key, w.FunctionType type,
{required void Function(w.FunctionBuilder function) buildMain,
- required void Function(w.FunctionBuilder function) buildDynamic,
- bool skipDynamic = false,
+ required void Function(w.FunctionBuilder function) buildSubmodule,
+ bool skipSubmodule = false,
required String name}) {
final mapKey = key;
final index = metadata.keyInvocationToIndex[mapKey] ??=
metadata.keyInvocationToIndex.length;
- overrideableFunctions.putIfAbsent(index, () {
- if (!isDynamicModule) {
+ overridableFunctions.putIfAbsent(index, () {
+ if (!isSubmodule) {
final mainFunction = translator.mainModule.functions.define(type, name);
translator.mainModule.functions.declare(mainFunction);
buildMain(mainFunction);
return mainFunction;
}
- if (skipDynamic) return null;
+ if (skipSubmodule) return null;
- final dynamicModuleFunction = dynamicModule.functions.define(type, name);
- dynamicModule.functions.declare(dynamicModuleFunction);
- buildDynamic(dynamicModuleFunction);
- return dynamicModuleFunction;
+ final submoduleFunction = submodule.functions.define(type, name);
+ submodule.functions.declare(submoduleFunction);
+ buildSubmodule(submoduleFunction);
+ return submoduleFunction;
});
return index;
@@ -671,26 +668,25 @@
void _callClassIdBranch(
int key, w.InstructionsBuilder b, w.FunctionType signature,
{required void Function(w.FunctionBuilder b) buildMainMatch,
- required void Function(w.FunctionBuilder b) buildDynamicMatch,
- bool skipDynamic = false,
+ required void Function(w.FunctionBuilder b) buildSubmoduleMatch,
+ bool skipSubmodule = false,
required String name}) {
- // No new types declared in the dynamic module so the branch would always
- // miss.
- final canSkipDynamicBranch = skipDynamic ||
- translator.classIdNumbering.maxDynamicModuleClassId ==
+ // No new types declared in the submodule so the branch would always miss.
+ final canSkipSubmoduleBranch = skipSubmodule ||
+ translator.classIdNumbering.maxDynamicSubmoduleClassId ==
translator.classIdNumbering.maxClassId;
final callIndex = _createUpdateableFunction(key, signature,
buildMain: buildMainMatch,
- buildDynamic: buildDynamicMatch,
- skipDynamic: canSkipDynamicBranch,
+ buildSubmodule: buildSubmoduleMatch,
+ skipSubmodule: canSkipSubmoduleBranch,
name: name);
translator.callReference(translator.classIdToModuleId.reference, b);
b.i64_const(callIndex);
- // getUpdateableFuncRef allows for null entries since a dynamic module may
- // not implement every key. However, only keys that cannot be queried should
- // be unimplemented so it's safe to cast to a non-nullable function here.
+ // getUpdateableFuncRef allows for null entries since a submodule may not
+ // implement every key. However, only keys that cannot be queried should be
+ // unimplemented so it's safe to cast to a non-nullable function here.
translator.callReference(translator.getUpdateableFuncRef.reference, b);
translator.convertType(b, w.RefType.func(nullable: true),
w.RefType(signature, nullable: false));
@@ -699,12 +695,12 @@
void callClassIdBranchBuiltIn(
BuiltinUpdatableFunctions key, w.InstructionsBuilder b,
- {bool skipDynamic = false}) {
+ {bool skipSubmodule = false}) {
_callClassIdBranch(key.index, b, key._buildType(translator),
buildMainMatch: (f) => key._buildMain(f, translator),
- buildDynamicMatch: (f) => key._buildDynamic(f, translator),
+ buildSubmoduleMatch: (f) => key._buildSubmodule(f, translator),
name: '#r_${key.name}',
- skipDynamic: skipDynamic);
+ skipSubmodule: skipSubmodule);
}
w.FunctionType _getGeneralizedSignature(SelectorInfo mainSelector) {
@@ -804,7 +800,7 @@
}
ib.local_get(ib.locals[function.type.inputs.length - 2]);
- if (isDynamicModule) {
+ if (isSubmodule) {
translator.callReference(translator.scopeClassId.reference, ib);
}
if (checkedOffset == uncheckedOffset) {
@@ -839,10 +835,10 @@
};
}
- void callOverrideableDispatch(
+ void callOverridableDispatch(
w.InstructionsBuilder b, SelectorInfo selector, Reference interfaceTarget,
{required bool useUncheckedEntry}) {
- metadata.invokedOverrideableReferences.add(interfaceTarget);
+ metadata.invokedOverridableReferences.add(interfaceTarget);
final localSignature = selector.signature;
// If any input is not a RefType (i.e. it's an unboxed value) then wrap it
@@ -882,9 +878,9 @@
name: '#s${mainModuleSelector.id}_${mainModuleSelector.name}',
buildMainMatch:
buildSelectorBranch(interfaceTarget, mainModuleSelector),
- buildDynamicMatch:
+ buildSubmoduleMatch:
buildSelectorBranch(interfaceTarget, mainModuleSelector),
- skipDynamic: selector.targets(unchecked: false).targetRanges.isEmpty);
+ skipSubmodule: selector.targets(unchecked: false).targetRanges.isEmpty);
translator.convertType(
b, generalizedSignature.outputs.single, localSignature.outputs.single);
}
@@ -909,8 +905,8 @@
///
/// Only classes defined in the main module require canonicalization because
/// these are the only classes that can have identical constants instantiated in
-/// different dynamic modules. A class defined a dynamic module cannot be
-/// accessed from a different dynamic module.
+/// different submodules. A class defined in a submodule cannot be accessed from
+/// a different submodule.
class ConstantCanonicalizer extends ConstantVisitor<void> {
final Translator translator;
final w.InstructionsBuilder b;
@@ -990,8 +986,8 @@
b.i64_const((classId as AbsoluteClassId).value);
translator.callReference(translator.constCacheGetter.reference, b);
- // Get the equality checker for the class. Import it into the dynamic module
- // and use the import if this is in a dynamic module.
+ // Get the equality checker for the class. Import it into the submodule and
+ // use the import if this is in a submodule.
w.BaseFunction checker = _getCanonicalChecker(cls, b.module);
// Declare the function so it can be used as a ref_func in a constant
@@ -1023,8 +1019,8 @@
translator.callReference(cacheField.getterReference, b);
- // Get the equality checker for the class. Import it into the dynamic module
- // and use the import if this is in a dynamic module.
+ // Get the equality checker for the class. Import it into the submodule and
+ // use the import if this is in a submodule.
w.BaseFunction checker = _getCanonicalArrayChecker(
translator.translateStorageType(elementType), mutable, b.module);
@@ -1357,7 +1353,9 @@
@override
void makeDirectCall(
TreeNode node, Member? target, DirectCallMetadata directCall) {
- if (target != null && target.isDynamicModuleOverrideable(coreTypes)) return;
+ if (target != null && target.isDynamicSubmoduleOverridable(coreTypes)) {
+ return;
+ }
super.makeDirectCall(node, target, directCall);
}
}
diff --git a/pkg/dart2wasm/lib/functions.dart b/pkg/dart2wasm/lib/functions.dart
index e1d42d2..f0e4af1 100644
--- a/pkg/dart2wasm/lib/functions.dart
+++ b/pkg/dart2wasm/lib/functions.dart
@@ -35,9 +35,10 @@
FunctionCollector(this.translator);
void _collectImportsAndExports() {
- final isDynamicModule = translator.isDynamicModule;
+ final isDynamicSubmodule = translator.isDynamicSubmodule;
for (Library library in translator.libraries) {
- if (isDynamicModule && library.isFromMainModule(translator.coreTypes)) {
+ if (isDynamicSubmodule &&
+ library.isFromMainModule(translator.coreTypes)) {
continue;
}
library.procedures.forEach(_importOrExport);
@@ -127,8 +128,8 @@
}
final module = translator.moduleForReference(target);
- if (translator.isDynamicModule && module == translator.mainModule) {
- return _importFunctionToDynamicModule(target);
+ if (translator.isDynamicSubmodule && module == translator.mainModule) {
+ return _importFunctionToDynamicSubmodule(target);
}
// If this function is exported via
@@ -150,15 +151,16 @@
final function = module.functions.define(ftype, getFunctionName(target));
if (exportName != null) module.exports.export(exportName, function);
- // Export the function from the main module if it is callable from dynamic
- // modules.
+ // Export the function from the main module if it is callable from
+ // dynamic submodules.
if (translator.dynamicModuleSupportEnabled &&
- !translator.isDynamicModule) {
+ !translator.isDynamicSubmodule) {
final callableReferenceId =
translator.dynamicModuleInfo?.metadata.callableReferenceIds[target];
if (callableReferenceId != null) {
translator.mainModule.exports.export(
- _generateDynamicCallableName(callableReferenceId), function);
+ _generateDynamicSubmoduleCallableName(callableReferenceId),
+ function);
}
}
@@ -168,23 +170,24 @@
});
}
- String _generateDynamicCallableName(int key) => '#dc$key';
+ String _generateDynamicSubmoduleCallableName(int key) => '#dc$key';
- w.BaseFunction _importFunctionToDynamicModule(Reference target) {
- assert(translator.isDynamicModule);
+ w.BaseFunction _importFunctionToDynamicSubmodule(Reference target) {
+ assert(translator.isDynamicSubmodule);
- // Export the function from the main module if it is callable from dynamic
- // modules.
- final dynamicModuleCallableReferenceId =
+ // Export the function from the main module if it is callable from
+ // dynamic submodules.
+ final dynamicSubmoduleCallableReferenceId =
translator.dynamicModuleInfo?.metadata.callableReferenceIds[target];
- if (dynamicModuleCallableReferenceId == null) {
+ if (dynamicSubmoduleCallableReferenceId == null) {
throw StateError(
'Cannot invoke ${target.asMember} since it is not labeled as '
'callable in the dynamic interface.');
}
- return translator.dynamicModule.functions.import(
+ return translator.dynamicSubmodule.functions.import(
translator.mainModule.moduleName,
- _generateDynamicCallableName(dynamicModuleCallableReferenceId),
+ _generateDynamicSubmoduleCallableName(
+ dynamicSubmoduleCallableReferenceId),
translator.signatureForMainModule(target),
getFunctionName(target));
}
diff --git a/pkg/dart2wasm/lib/globals.dart b/pkg/dart2wasm/lib/globals.dart
index 069f2a8..4af9d85 100644
--- a/pkg/dart2wasm/lib/globals.dart
+++ b/pkg/dart2wasm/lib/globals.dart
@@ -111,8 +111,8 @@
if (module == translator.initFunction.enclosingModule) {
// We have to initialize the global field in the same module as where
// the field value is defined in.
- // TODO: Once dynamic modules only compile code for the dynamic module
- // and not the main module, we should turn this into an assert.
+ // TODO: Once dynamic modules only compile code for the submodule and
+ // not the main module, we should turn this into an assert.
EagerStaticFieldInitializerCodeGenerator(translator, field, global)
.generate(translator.initFunction.body, [], null);
}
diff --git a/pkg/dart2wasm/lib/intrinsics.dart b/pkg/dart2wasm/lib/intrinsics.dart
index 3dfab22..38c1766 100644
--- a/pkg/dart2wasm/lib/intrinsics.dart
+++ b/pkg/dart2wasm/lib/intrinsics.dart
@@ -1116,8 +1116,8 @@
assert(ranges.length <= 1);
if (translator.dynamicModuleSupportEnabled) {
- final dynamicModuleRanges = translator.classIdNumbering
- .getConcreteClassIdRangeForDynamicModule(
+ final submoduleRanges = translator.classIdNumbering
+ .getConcreteClassIdRangeForDynamicSubmodule(
translator.coreTypes.recordClass);
final classIdLocal = b.addLocal(w.NumType.i32);
codeGen.translateExpression(classId, w.NumType.i32);
@@ -1125,7 +1125,7 @@
b.local_get(classIdLocal);
translator.dynamicModuleInfo!.callClassIdBranchBuiltIn(
BuiltinUpdatableFunctions.recordId, b,
- skipDynamic: dynamicModuleRanges.isEmpty);
+ skipSubmodule: submoduleRanges.isEmpty);
} else {
codeGen.translateExpression(classId, w.NumType.i32);
b.emitClassIdRangeCheck(ranges);
diff --git a/pkg/dart2wasm/lib/js/runtime_blob.dart b/pkg/dart2wasm/lib/js/runtime_blob.dart
index 9110710..f792e66 100644
--- a/pkg/dart2wasm/lib/js/runtime_blob.dart
+++ b/pkg/dart2wasm/lib/js/runtime_blob.dart
@@ -210,7 +210,7 @@
};
''');
-final dynamicModuleJsImportTemplate = Template(r'''
+final dynamicSubmoduleJsImportTemplate = Template(r'''
export function imports(finalizeWrapper) {
const dart2wasm = {
<<JS_METHODS>>
diff --git a/pkg/dart2wasm/lib/js/runtime_generator.dart b/pkg/dart2wasm/lib/js/runtime_generator.dart
index 0c4c915..d425a93 100644
--- a/pkg/dart2wasm/lib/js/runtime_generator.dart
+++ b/pkg/dart2wasm/lib/js/runtime_generator.dart
@@ -135,11 +135,11 @@
});
}
- String generateDynamicModule(
+ String generateDynamicSubmodule(
Iterable<Procedure> translatedProcedures, List<String> constantStrings) {
final jsMethods = generateJsMethods(translatedProcedures);
- return dynamicModuleJsImportTemplate.instantiate({
+ return dynamicSubmoduleJsImportTemplate.instantiate({
'JS_METHODS': jsMethods,
'IMPORTED_JS_STRINGS_IN_MJS':
_generateInternalizedStrings(constantStrings),
diff --git a/pkg/dart2wasm/lib/record_class_generator.dart b/pkg/dart2wasm/lib/record_class_generator.dart
index b8f71dc..b79ec39 100644
--- a/pkg/dart2wasm/lib/record_class_generator.dart
+++ b/pkg/dart2wasm/lib/record_class_generator.dart
@@ -84,10 +84,10 @@
/// ```
Map<RecordShape, Class> generateRecordClasses(
Component component, CoreTypes coreTypes,
- {bool isDynamicMainModule = false, bool isDynamicModule = false}) {
+ {bool isDynamicMainModule = false, bool isDynamicSubmodule = false}) {
final Map<RecordShape, Class> recordClasses = {};
Library library;
- if (isDynamicModule) {
+ if (isDynamicSubmodule) {
// Put new record classes in their own library so downstream we know to load
// them as new classes.
library = Library(Uri.parse(dynamicModulesRecordsLibraryUri),
@@ -98,7 +98,7 @@
library = coreTypes.coreLibrary;
}
final recordClassGenerator = _RecordClassGenerator(recordClasses, library,
- coreTypes, isDynamicMainModule || isDynamicModule);
+ coreTypes, isDynamicMainModule || isDynamicSubmodule);
final visitor = _RecordVisitor(recordClassGenerator);
component.libraries.forEach(visitor.visitLibrary);
return recordClasses;
@@ -222,7 +222,7 @@
className = '${className}_${shape.names.join('_')}';
}
- // If this is a dynamic module the loaded main module may already contain
+ // If this is a dynamic submodule the loaded main module may already contain
// this class.
final existingClass = _existingCoreClassNames[className];
if (existingClass != null) return existingClass;
diff --git a/pkg/dart2wasm/lib/translator.dart b/pkg/dart2wasm/lib/translator.dart
index 124b4f5..d43b4b7 100644
--- a/pkg/dart2wasm/lib/translator.dart
+++ b/pkg/dart2wasm/lib/translator.dart
@@ -394,8 +394,8 @@
DynamicModuleInfo? dynamicModuleInfo;
bool get dynamicModuleSupportEnabled => dynamicModuleInfo != null;
- bool get isDynamicModule => dynamicModuleInfo?.isDynamicModule ?? false;
- w.ModuleBuilder get dynamicModule => dynamicModuleInfo!.dynamicModule;
+ bool get isDynamicSubmodule => dynamicModuleInfo?.isSubmodule ?? false;
+ w.ModuleBuilder get dynamicSubmodule => dynamicModuleInfo!.submodule;
w.ModuleBuilder moduleForReference(Reference reference) =>
_outputToBuilder[_moduleOutputData.moduleForReference(reference)]!;
@@ -429,9 +429,9 @@
closureLayouter = ClosureLayouter(this);
classInfoCollector = ClassInfoCollector(this);
staticTablesPerType = StaticDispatchTables(this);
- dispatchTable = DispatchTable(isDynamicModuleTable: isDynamicModule)
+ dispatchTable = DispatchTable(isDynamicSubmoduleTable: isDynamicSubmodule)
..translator = this;
- if (isDynamicModule) {
+ if (isDynamicSubmodule) {
dynamicMainModuleDispatchTable = mainModuleMetadata.dispatchTable
..translator = this;
}
@@ -509,7 +509,7 @@
functions.initialize();
- dynamicModuleInfo?.initDynamicModule();
+ dynamicModuleInfo?.initSubmodule();
drainCompletionQueue();
@@ -597,8 +597,8 @@
table ??= dispatchTable;
functions.recordSelectorUse(selector, useUncheckedEntry);
- if (dynamicModuleSupportEnabled && selector.isDynamicModuleOverrideable) {
- dynamicModuleInfo!.callOverrideableDispatch(b, selector, interfaceTarget!,
+ if (dynamicModuleSupportEnabled && selector.isDynamicSubmoduleOverridable) {
+ dynamicModuleInfo!.callOverridableDispatch(b, selector, interfaceTarget!,
useUncheckedEntry: useUncheckedEntry);
} else {
b.struct_get(topInfo.struct, FieldIndex.classId);
@@ -655,7 +655,7 @@
}
void pushModuleId(w.InstructionsBuilder b) {
- if (!isDynamicModule || b.module != dynamicModule) {
+ if (!isDynamicSubmodule || b.module != dynamicSubmodule) {
b.i64_const(0);
} else {
b.global_get(dynamicModuleInfo!.moduleIdGlobal);
@@ -1336,9 +1336,9 @@
}
DispatchTable dispatchTableForTarget(Reference target) {
- if (!isDynamicModule) return dispatchTable;
- if (moduleForReference(target) == dynamicModule) return dispatchTable;
- assert(target.asMember.isDynamicModuleCallable(coreTypes));
+ if (!isDynamicSubmodule) return dispatchTable;
+ if (moduleForReference(target) == dynamicSubmodule) return dispatchTable;
+ assert(target.asMember.isDynamicSubmoduleCallable(coreTypes));
return dynamicMainModuleDispatchTable!;
}
@@ -1429,7 +1429,7 @@
Member? singleTarget(TreeNode node) {
final member = directCallMetadata[node]?.targetMember;
if (!dynamicModuleSupportEnabled || member == null) return member;
- return member.isDynamicModuleOverrideable(coreTypes) ? null : member;
+ return member.isDynamicSubmoduleOverridable(coreTypes) ? null : member;
}
/// Direct call information of a [FunctionInvocation] based on TFA's direct
@@ -1830,8 +1830,8 @@
bool get isEmpty => _pending.isEmpty;
void add(CompilationTask entry) {
- assert(!translator.isDynamicModule ||
- entry.function.enclosingModule == translator.dynamicModule);
+ assert(!translator.isDynamicSubmodule ||
+ entry.function.enclosingModule == translator.dynamicSubmodule);
_pending.add(entry);
}
@@ -2377,7 +2377,7 @@
PolymorphicDispatcherCallTarget(this.translator, this.selector,
this.callingModule, this.useUncheckedEntry)
- : assert(!selector.isDynamicModuleOverrideable),
+ : assert(!selector.isDynamicSubmoduleOverridable),
super(selector.signature);
@override
@@ -2416,7 +2416,7 @@
PolymorphicDispatcherCodeGenerator(
this.translator, this.selector, this.useUncheckedEntry)
- : assert(!selector.isDynamicModuleOverrideable);
+ : assert(!selector.isDynamicSubmoduleOverridable);
@override
void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
diff --git a/pkg/dart2wasm/lib/types.dart b/pkg/dart2wasm/lib/types.dart
index 18587b3..936a863 100644
--- a/pkg/dart2wasm/lib/types.dart
+++ b/pkg/dart2wasm/lib/types.dart
@@ -557,7 +557,7 @@
return (null, checkArguments: false);
}
if (testedAgainstType.classNode
- .isDynamicModuleExtendable(rtt.translator.coreTypes)) {
+ .isDynamicSubmoduleExtendable(rtt.translator.coreTypes)) {
return (null, checkArguments: false);
}
@@ -737,7 +737,7 @@
this.checkArguments,
this.argumentCount)
: assert(!testedAgainstType.classNode
- .isDynamicModuleExtendable(translator.coreTypes));
+ .isDynamicSubmoduleExtendable(translator.coreTypes));
@override
String get name {
@@ -968,7 +968,7 @@
this.checkArguments,
this.argumentCount)
: assert(!testedAgainstType.classNode
- .isDynamicModuleExtendable(translator.coreTypes));
+ .isDynamicSubmoduleExtendable(translator.coreTypes));
@override
void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
@@ -1273,20 +1273,20 @@
final emptyString = StringConstant('');
List<StringConstant> nameConstants = [];
- List<StringConstant> dynamicModuleNameConstants = [];
+ List<StringConstant> dynamicSubmoduleNameConstants = [];
for (ClassInfo classInfo in translator.classes) {
Class? cls = classInfo.cls;
if (cls == null || cls.isAnonymousMixin) {
nameConstants.add(emptyString);
} else {
final constantList = classInfo.classId is RelativeClassId
- ? dynamicModuleNameConstants
+ ? dynamicSubmoduleNameConstants
: nameConstants;
constantList.add(StringConstant(cls.name));
}
}
- return translator.constants.makeArrayOf(
- stringType, isMainModule ? nameConstants : dynamicModuleNameConstants);
+ return translator.constants.makeArrayOf(stringType,
+ isMainModule ? nameConstants : dynamicSubmoduleNameConstants);
}
Map<int, List<(Range, int)>> _buildRanges(Map<int, Map<int, int>> map) {