aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-26 22:58:54 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-26 22:58:54 +0000
commit73156b8d99b99c6cdb1eb45f9c7d96a8bf75dc00 (patch)
tree7aaa64db3e59a8c6481e5ccdcefe72b2896485cd /src/main/java
parentee2e428aaecda2ca0dd46decc9e046630accd0ac (diff)
Determine correct type of locals
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java24
1 files changed, 16 insertions, 8 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 e4ed6101..9e5f2f45 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -709,15 +709,18 @@ public class PatioToWasm {
Context context
) {
// TODO: push into PatioOperand?
- var patioType = switch (operand) {
- case PatioBool patioBool -> PatioTypes.BOOL;
- case PatioDataPtr patioDataPtr -> PatioTypes.DATA_POINTER;
- case PatioFunctionPtr patioFunctionPtr -> PatioTypes.FUNCTION_POINTER;
- case PatioInt patioInt -> PatioTypes.INT;
- // TODO: don't assume locals are all ints
- case PatioLocalRef patioLocalRef -> PatioTypes.INT;
+ return switch (operand) {
+ case PatioBool patioBool ->
+ patioTypeToWasmValueType(PatioTypes.BOOL, context.platformTarget);
+ case PatioDataPtr patioDataPtr ->
+ patioTypeToWasmValueType(PatioTypes.DATA_POINTER, context.platformTarget);
+ case PatioFunctionPtr patioFunctionPtr ->
+ patioTypeToWasmValueType(PatioTypes.FUNCTION_POINTER, context.platformTarget);
+ case PatioInt patioInt ->
+ patioTypeToWasmValueType(PatioTypes.INT, context.platformTarget);
+ case PatioLocalRef patioLocalRef ->
+ context.wasmLocalType(patioLocalRef);
};
- return patioTypeToWasmValueType(patioType, context.platformTarget);
}
private static WasmValueType patioTypeToWasmValueType(
@@ -887,6 +890,11 @@ public class PatioToWasm {
return this.patioLocalNameToInfo.get(patioLocalRef.name()).wasmLocalIndex;
}
+ public WasmValueType wasmLocalType(PatioLocalRef patioLocalRef) {
+ return this.patioLocalNameToInfo.get(patioLocalRef.name()).wasmType;
+ }
+
+
public Context enterBlockInstruction() {
return new Context(
this.platformTarget,