diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-26 22:55:35 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-26 22:55:35 +0000 |
| commit | ee2e428aaecda2ca0dd46decc9e046630accd0ac (patch) | |
| tree | 3ef192c1627be4a12fcfd28cc48d9b57dc18486e /src/main/java/org | |
| parent | 7035f25c5690d3e9d9cb3fa6df58519a754e39c5 (diff) | |
Pass in context to patioOperandToWasmValueType()
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java | 27 |
1 files changed, 17 insertions, 10 deletions
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<PatioLocalRef> 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<WasmValueType> patioOperandsToWasmValueTypes( + List<PatioOperand> 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( |
