diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-28 19:58:50 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-28 19:58:50 +0100 |
| commit | 9175d04b0652327aa4e52272b1aacad25d24ee38 (patch) | |
| tree | 8d771d9a043f09044913840984e543fcd8976c3c /src/main/java | |
| parent | 58a65750e9935c92832352d168280a8ad464a120 (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.java | 14 |
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) |
