From ee2e428aaecda2ca0dd46decc9e046630accd0ac Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 26 Dec 2023 22:55:35 +0000 Subject: Pass in context to patioOperandToWasmValueType() --- .../compiler/backends/wasm/PatioToWasm.java | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java index 9f488b8a..e4ed6101 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -231,10 +231,8 @@ public class PatioToWasm { context = generateOperand(patioCallPointer.functionPointer(), context); var wasmFuncType = new WasmFuncType( - patioCallPointer.args().stream() - .map(arg -> patioOperandToWasmValueType(arg, platformTarget)) - .toList(), - List.of(patioOperandToWasmValueType(patioCallPointer.target(), platformTarget)) + patioOperandsToWasmValueTypes(patioCallPointer.args(), context), + List.of(patioOperandToWasmValueType(patioCallPointer.target(), context)) ); context = context.addType(wasmFuncType); @@ -260,7 +258,7 @@ public class PatioToWasm { case PatioIf patioIf -> { context = generateOperand(patioIf.condition(), context); - var wasmBlockType = generateBlockType(patioIf.targets(), platformTarget); + var wasmBlockType = generateBlockType(patioIf.targets(), context); context = context.enterIfInstruction(wasmBlockType); context = generateBlockBody(patioIf.trueBody(), context); @@ -399,7 +397,7 @@ public class PatioToWasm { case PatioSwitch patioSwitch -> { // TODO: use br_table? - var wasmBlockType = generateBlockType(patioSwitch.targets(), platformTarget); + var wasmBlockType = generateBlockType(patioSwitch.targets(), context); for (var patioSwitchCase : patioSwitch.cases()) { context = generateOperand(patioSwitch.value(), context); @@ -474,11 +472,11 @@ public class PatioToWasm { private static WasmBlockType generateBlockType( List targets, - WasmTarget platformTarget + Context context ) { return new WasmBlockType( targets.stream() - .map(patioTarget -> patioOperandToWasmValueType(patioTarget, platformTarget)) + .map(patioTarget -> patioOperandToWasmValueType(patioTarget, context)) .toList() ); } @@ -697,9 +695,18 @@ public class PatioToWasm { return new WasmLocal(local.name(), patioTypeToWasmValueType(local.type(), platformTarget)); } + private static List patioOperandsToWasmValueTypes( + List operands, + Context context + ) { + return operands.stream() + .map(operand -> patioOperandToWasmValueType(operand, context)) + .toList(); + } + private static WasmValueType patioOperandToWasmValueType( PatioOperand operand, - WasmTarget platformTarget + Context context ) { // TODO: push into PatioOperand? var patioType = switch (operand) { @@ -710,7 +717,7 @@ public class PatioToWasm { // TODO: don't assume locals are all ints case PatioLocalRef patioLocalRef -> PatioTypes.INT; }; - return patioTypeToWasmValueType(patioType, platformTarget); + return patioTypeToWasmValueType(patioType, context.platformTarget); } private static WasmValueType patioTypeToWasmValueType( -- cgit v1.2.3