[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) {