[dart2wasm] Fix default name for pragmas
Fixes the following:
When using `@pragma("wasm:import")` or `@pragma("wasm:export")` without the second argument (as documented in https://github.com/dart-lang/sdk/tree/main/pkg/dart2wasm#imports-and-exports), this would fail with the following error:
```
type 'NullConstant' is not a subtype of type 'String?' in type cast
#0 Translator.getPragma (package:dart2wasm/translator.dart:939)
#1 FunctionCollector._importOrExport (package:dart2wasm/functions.dart:52)
#2 List.forEach (dart:core-patch/growable_array.dart)
#3 FunctionCollector.collectImportsAndExports (package:dart2wasm/functions.dart:37)
#4 Translator.translate (package:dart2wasm/translator.dart:268)
#5 compileToModule (package:dart2wasm/compile.dart:138)
<asynchronous suspension>
#6 main (package:dart2wasm/dart2wasm.dart:134)
<asynchronous suspension>
...
```
Change-Id: Ie9b6766be10ced45ec360c7fb71cffa7097ee38a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323140
Commit-Queue: Jia Hao Goh <jiahaog@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/pkg/dart2wasm/lib/functions.dart b/pkg/dart2wasm/lib/functions.dart
index 0e6a634..074610c 100644
--- a/pkg/dart2wasm/lib/functions.dart
+++ b/pkg/dart2wasm/lib/functions.dart
@@ -47,7 +47,8 @@
Reference popWorkList() => _worklist.removeLast();
void _importOrExport(Member member) {
- String? importName = translator.getPragma(member, "wasm:import");
+ String? importName =
+ translator.getPragma(member, "wasm:import", member.name.text);
if (importName != null) {
int dot = importName.indexOf('.');
if (dot != -1) {
diff --git a/pkg/dart2wasm/lib/translator.dart b/pkg/dart2wasm/lib/translator.dart
index a992e3b..494aa48 100644
--- a/pkg/dart2wasm/lib/translator.dart
+++ b/pkg/dart2wasm/lib/translator.dart
@@ -914,7 +914,7 @@
NodeCounter().countNodes(body) <= options.inliningLimit;
}
- T? getPragma<T>(Annotatable node, String name, [T? defaultvalue]) {
+ T? getPragma<T>(Annotatable node, String name, [T? defaultValue]) {
for (Expression annotation in node.annotations) {
if (annotation is ConstantExpression) {
Constant constant = annotation.constant;
@@ -928,7 +928,10 @@
if (value is PrimitiveConstant<T>) {
return value.value;
}
- return value as T? ?? defaultvalue;
+ if (value is NullConstant) {
+ return defaultValue;
+ }
+ return value as T? ?? defaultValue;
}
}
}