Skip to content

Commit 0045c0e

Browse files
osa1Commit Queue
authored andcommitted
[dart2wasm] Remove FunctionNode dependency from ClosureDynamicEntryGenerator
The information we need when generating closure dynamic call entries are available in `ParameterInfo`, we don't need `FunctionNode`. Just using `ParameterInfo` removes the `FunctionNode` dependency from `ClosureDynamicEntryGenerator`, makes it easier to refactor and reuse. Change-Id: I2b1b731f61fa15cec89b3f822955949ea86060c2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/431241 Reviewed-by: Martin Kustermann <[email protected]> Commit-Queue: Ömer Ağacan <[email protected]>
1 parent 2fc0c8b commit 0045c0e

File tree

1 file changed

+7
-33
lines changed

1 file changed

+7
-33
lines changed

pkg/dart2wasm/lib/translator.dart

Lines changed: 7 additions & 33 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, functionNode, target, paramInfo, name, function)));
1112+
this, target, paramInfo, name, function)));
11131113
return function;
11141114
}
11151115

@@ -2047,14 +2047,13 @@ class _ClosureTrampolineGenerator implements CodeGenerator {
20472047
/// entries.
20482048
class _ClosureDynamicEntryGenerator implements CodeGenerator {
20492049
final Translator translator;
2050-
final FunctionNode functionNode;
20512050
final w.BaseFunction target;
20522051
final ParameterInfo paramInfo;
20532052
final String name;
20542053
final w.FunctionBuilder function;
20552054

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

20592058
@override
20602059
void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
@@ -2063,8 +2062,6 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
20632062

20642063
final b = function.body;
20652064

2066-
final int typeCount = functionNode.typeParameters.length;
2067-
20682065
final closureLocal = function.locals[0];
20692066
final typeArgsListLocal = function.locals[1];
20702067
final posArgsListLocal = function.locals[2];
@@ -2098,7 +2095,7 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
20982095
}
20992096

21002097
// Push type arguments
2101-
for (int typeIdx = 0; typeIdx < typeCount; typeIdx += 1) {
2098+
for (int typeIdx = 0; typeIdx < paramInfo.typeParamCount; typeIdx += 1) {
21022099
b.local_get(typeArgsListLocal);
21032100
b.i32_const(typeIdx);
21042101
b.array_get(translator.typeArrayType);
@@ -2134,22 +2131,11 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21342131

21352132
// Push named arguments
21362133

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

21492137
for (String paramName in paramInfo.names) {
21502138
final Constant? paramInfoDefaultValue = paramInfo.named[paramName];
2151-
final Expression? functionNodeDefaultValue =
2152-
initializerForNamedParamInMember(paramName);
21532139

21542140
// Get passed value
21552141
b.local_get(namedArgsListLocal);
@@ -2160,7 +2146,7 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21602146
translator.callReference(translator.getNamedParameterIndex.reference, b);
21612147
b.local_set(namedArgValueIndexLocal);
21622148

2163-
if (functionNodeDefaultValue == null && paramInfoDefaultValue == null) {
2149+
if (paramInfoDefaultValue == null) {
21642150
// Shape check passed, parameter must be passed
21652151
b.local_get(namedArgsListLocal);
21662152
b.local_get(namedArgValueIndexLocal);
@@ -2176,20 +2162,8 @@ class _ClosureDynamicEntryGenerator implements CodeGenerator {
21762162
b.local_get(namedArgValueIndexLocal);
21772163
b.ref_is_null();
21782164
b.if_([], [translator.topType]);
2179-
if (functionNodeDefaultValue != null) {
2180-
// Used by the member, has a default value
2181-
translator.constants.instantiateConstant(
2182-
b,
2183-
(functionNodeDefaultValue as ConstantExpression).constant,
2184-
translator.topType);
2185-
} else {
2186-
// Not used by the member
2187-
translator.constants.instantiateConstant(
2188-
b,
2189-
paramInfoDefaultValue!,
2190-
translator.topType,
2191-
);
2192-
}
2165+
translator.constants.instantiateConstant(
2166+
b, paramInfoDefaultValue, translator.topType);
21932167
b.else_(); // value index not null
21942168
b.local_get(namedArgsListLocal);
21952169
b.local_get(namedArgValueIndexLocal);

0 commit comments

Comments
 (0)