Skip to content

Commit 36262e7

Browse files
jason-simmonsaam
authored andcommitted
Revert "[dart2wasm] Remove FunctionNode dependency from ClosureDynamicEntryGenerator"
This reverts commit 0045c0e. Reason for revert: This causes exceptions when running Flutter's skwasm test suite. Change-Id: Ic32be4902a2e4f7b2c56977725845f145384c02b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/432361 Reviewed-by: Alexander Aprelev <[email protected]> Reviewed-by: Siva Annamalai <[email protected]>
1 parent 5663697 commit 36262e7

File tree

1 file changed

+33
-7
lines changed

1 file changed

+33
-7
lines changed

pkg/dart2wasm/lib/translator.dart

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ class Translator with KernelNodes {
11091109
compilationQueue.add(CompilationTask(
11101110
function,
11111111
_ClosureDynamicEntryGenerator(
1112-
this, target, paramInfo, name, function)));
1112+
this, functionNode, target, paramInfo, name, function)));
11131113
return function;
11141114
}
11151115

@@ -2048,13 +2048,14 @@ class _ClosureTrampolineGenerator implements CodeGenerator {
20482048
/// entries.
20492049
class _ClosureDynamicEntryGenerator implements CodeGenerator {
20502050
final Translator translator;
2051+
final FunctionNode functionNode;
20512052
final w.BaseFunction target;
20522053
final ParameterInfo paramInfo;
20532054
final String name;
20542055
final w.FunctionBuilder function;
20552056

2056-
_ClosureDynamicEntryGenerator(
2057-
this.translator, this.target, this.paramInfo, this.name, this.function);
2057+
_ClosureDynamicEntryGenerator(this.translator, this.functionNode, this.target,
2058+
this.paramInfo, this.name, this.function);
20582059

20592060
@override
20602061
void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
@@ -2063,6 +2064,8 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
20632064

20642065
final b = function.body;
20652066

2067+
final int typeCount = functionNode.typeParameters.length;
2068+
20662069
final closureLocal = function.locals[0];
20672070
final typeArgsListLocal = function.locals[1];
20682071
final posArgsListLocal = function.locals[2];
@@ -2096,7 +2099,7 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
20962099
}
20972100

20982101
// Push type arguments
2099-
for (int typeIdx = 0; typeIdx < paramInfo.typeParamCount; typeIdx += 1) {
2102+
for (int typeIdx = 0; typeIdx < typeCount; typeIdx += 1) {
21002103
b.local_get(typeArgsListLocal);
21012104
b.i32_const(typeIdx);
21022105
b.array_get(translator.typeArrayType);
@@ -2132,11 +2135,22 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21322135

21332136
// Push named arguments
21342137

2138+
Expression? initializerForNamedParamInMember(String paramName) {
2139+
for (int i = 0; i < functionNode.namedParameters.length; i += 1) {
2140+
if (functionNode.namedParameters[i].name == paramName) {
2141+
return functionNode.namedParameters[i].initializer;
2142+
}
2143+
}
2144+
return null;
2145+
}
2146+
21352147
final namedArgValueIndexLocal = b
21362148
.addLocal(translator.classInfo[translator.boxedIntClass]!.nullableType);
21372149

21382150
for (String paramName in paramInfo.names) {
21392151
final Constant? paramInfoDefaultValue = paramInfo.named[paramName];
2152+
final Expression? functionNodeDefaultValue =
2153+
initializerForNamedParamInMember(paramName);
21402154

21412155
// Get passed value
21422156
b.local_get(namedArgsListLocal);
@@ -2147,7 +2161,7 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21472161
translator.callReference(translator.getNamedParameterIndex.reference, b);
21482162
b.local_set(namedArgValueIndexLocal);
21492163

2150-
if (paramInfoDefaultValue == null) {
2164+
if (functionNodeDefaultValue == null && paramInfoDefaultValue == null) {
21512165
// Shape check passed, parameter must be passed
21522166
b.local_get(namedArgsListLocal);
21532167
b.local_get(namedArgValueIndexLocal);
@@ -2163,8 +2177,20 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21632177
b.local_get(namedArgValueIndexLocal);
21642178
b.ref_is_null();
21652179
b.if_([], [translator.topType]);
2166-
translator.constants.instantiateConstant(
2167-
b, paramInfoDefaultValue, translator.topType);
2180+
if (functionNodeDefaultValue != null) {
2181+
// Used by the member, has a default value
2182+
translator.constants.instantiateConstant(
2183+
b,
2184+
(functionNodeDefaultValue as ConstantExpression).constant,
2185+
translator.topType);
2186+
} else {
2187+
// Not used by the member
2188+
translator.constants.instantiateConstant(
2189+
b,
2190+
paramInfoDefaultValue!,
2191+
translator.topType,
2192+
);
2193+
}
21682194
b.else_(); // value index not null
21692195
b.local_get(namedArgsListLocal);
21702196
b.local_get(namedArgValueIndexLocal);

0 commit comments

Comments
 (0)