diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart index b15b5f008cb..bdea89f325f 100644 --- a/pkg/dart2wasm/lib/code_generator.dart +++ b/pkg/dart2wasm/lib/code_generator.dart @@ -2001,9 +2001,10 @@ abstract class AstCodeGenerator w.ValueType visitStaticSet(StaticSet node, w.ValueType expectedType) { bool preserved = expectedType != voidMarker; Member target = node.target; - w.ValueType paramType = target is Field - ? translator.globals.getGlobalForStaticField(target).type.type - : translator.signatureForDirectCall(target.reference).inputs.single; + final reference = + target is Field ? target.setterReference! : target.reference; + w.ValueType paramType = + translator.signatureForDirectCall(reference).inputs.single; translateExpression(node.value, paramType); if (!preserved) { call(node.targetReference); @@ -2012,7 +2013,7 @@ abstract class AstCodeGenerator w.Local temp = addLocal(paramType); b.local_tee(temp); - call(node.targetReference); + call(reference); b.local_get(temp); return temp.type; } diff --git a/pkg/dart2wasm/lib/functions.dart b/pkg/dart2wasm/lib/functions.dart index 4b93afc75f5..bcc96f5a1b8 100644 --- a/pkg/dart2wasm/lib/functions.dart +++ b/pkg/dart2wasm/lib/functions.dart @@ -478,12 +478,11 @@ w.FunctionType _makeFunctionType( final isGetter = target.isImplicitGetter; final isSetter = target.isImplicitSetter; if (isGetter || isSetter) { - final global = translator.globals.getGlobalForStaticField(member); - final globalType = global.type.type; + final fieldType = translator.translateTypeOfField(member); if (isGetter) { - return translator.typesBuilder.defineFunction(const [], [globalType]); + return translator.typesBuilder.defineFunction(const [], [fieldType]); } - return translator.typesBuilder.defineFunction([globalType], const []); + return translator.typesBuilder.defineFunction([fieldType], const []); } }