aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-26 22:55:35 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-26 22:55:35 +0000
commitee2e428aaecda2ca0dd46decc9e046630accd0ac (patch)
tree3ef192c1627be4a12fcfd28cc48d9b57dc18486e /src/main/java
parent7035f25c5690d3e9d9cb3fa6df58519a754e39c5 (diff)
Pass in context to patioOperandToWasmValueType()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java27
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(