@@ -1007,8 +1007,10 @@ class Translator with KernelNodes {
10071007 .getClosureRepresentation (typeCount, positionalCount, names)! ;
10081008 assert (representation.vtableStruct.fields.length ==
10091009 representation.vtableBaseIndex +
1010- (1 + positionalCount) +
1011- representation.nameCombinations.length);
1010+ (dynamicModuleSupportEnabled
1011+ ? 0
1012+ : (1 + positionalCount) +
1013+ representation.nameCombinations.length));
10121014
10131015 List <w.BaseFunction > functions = [];
10141016
@@ -1336,6 +1338,7 @@ class Translator with KernelNodes {
13361338 }
13371339
13381340 DispatchTable dispatchTableForTarget (Reference target) {
1341+ assert (target.asMember.isInstanceMember);
13391342 if (! isDynamicSubmodule) return dispatchTable;
13401343 if (moduleForReference (target) == dynamicSubmodule) return dispatchTable;
13411344 assert (target.asMember.isDynamicSubmoduleCallable (coreTypes));
@@ -1348,18 +1351,28 @@ class Translator with KernelNodes {
13481351 }
13491352
13501353 w.FunctionType signatureForDirectCall (Reference target) {
1351- return _signatureFromDispatchTable (target, dispatchTableForTarget (target));
1354+ return _signatureForModule (
1355+ target,
1356+ target.asMember.isInstanceMember
1357+ ? dispatchTableForTarget (target)
1358+ : null );
13521359 }
13531360
13541361 w.FunctionType signatureForMainModule (Reference target) {
1355- return _signatureFromDispatchTable (target, dynamicMainModuleDispatchTable! );
1362+ return _signatureForModule (
1363+ target,
1364+ target.asMember.isInstanceMember
1365+ ? dynamicMainModuleDispatchTable!
1366+ : null );
13561367 }
13571368
1358- w.FunctionType _signatureFromDispatchTable (
1359- Reference target, DispatchTable table) {
1360- if (target.asMember.isInstanceMember && ! target.isBodyReference) {
1369+ w.FunctionType _signatureForModule (Reference target, DispatchTable ? table) {
1370+ if (table != null &&
1371+ ! target.isBodyReference &&
1372+ ! target.isTypeCheckerReference) {
13611373 final selector = table.selectorForTarget (target);
1362- if (selector.containsTarget (target)) {
1374+ if (selector.containsTarget (target) ||
1375+ selector.isDynamicSubmoduleOverridable) {
13631376 return selector.signature;
13641377 }
13651378 }
0 commit comments