From 96c4e4c81f8a4c787f1c90278d2177f632af08bf Mon Sep 17 00:00:00 2001 From: Nate Biggs Date: Tue, 17 Dec 2024 15:59:28 -0800 Subject: [PATCH] [dart2wasm] Use field type instead of global type for static field type. The calls to 'getGlobalForStaticField' eagerly generate the initializer constant for the associated field. In both these cases we don't need that just to get the type of the field. Instead we can use 'translateTypeOfField' directly (same as 'getGlobalForStaticField'). This also removes unnecessary nullness from the type when the field is lazily instantiated. The global type may be nullable even if the field type isn't. Change-Id: Id369e07335fc5350524a1b8b6c04f19dd94f8b8a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401280 Reviewed-by: Martin Kustermann Commit-Queue: Nate Biggs --- pkg/dart2wasm/lib/code_generator.dart | 9 +++++---- pkg/dart2wasm/lib/functions.dart | 7 +++---- 2 files changed, 8 insertions(+), 8 deletions(-) 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 []); } }