From 9175d04b0652327aa4e52272b1aacad25d24ee38 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 28 Jun 2023 19:58:50 +0100 Subject: Fix indirect call types when generating code for WASM closures --- .../compiler/backends/wasm/WasmCodeGenClosures.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/main/java') 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(); + 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) -- cgit v1.2.3