aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-28 19:58:50 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-28 19:58:50 +0100
commit9175d04b0652327aa4e52272b1aacad25d24ee38 (patch)
tree8d771d9a043f09044913840984e543fcd8976c3c /src/main/java
parent58a65750e9935c92832352d168280a8ad464a120 (diff)
Fix indirect call types when generating code for WASM closures
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenClosures.java14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenClosures.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenClosures.java
index 5a9e0628..c63facd0 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenClosures.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenClosures.java
@@ -9,6 +9,7 @@ import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmLocalIndex;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmFuncType;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmValueType;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -118,7 +119,18 @@ public class WasmCodeGenClosures {
context = loadClosureFunctionTableIndex(closure, context);
- var funcType = new WasmFuncType(List.of(CLOSURE_TYPE), List.of(WasmCodeGenTypes.VALUE_TYPE));
+ var paramTypes = new ArrayList<WasmValueType>();
+ paramTypes.add(CLOSURE_TYPE);
+
+ var argCount = positionalArgs.size() + namedArgsByName.size();
+ for (var i = 0; i < argCount; i++) {
+ paramTypes.add(WasmCodeGenTypes.VALUE_TYPE);
+ }
+
+ var funcType = new WasmFuncType(
+ paramTypes,
+ List.of(WasmCodeGenTypes.VALUE_TYPE)
+ );
return context
.addType(funcType)