diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-26 22:58:54 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-26 22:58:54 +0000 |
| commit | 73156b8d99b99c6cdb1eb45f9c7d96a8bf75dc00 (patch) | |
| tree | 7aaa64db3e59a8c6481e5ccdcefe72b2896485cd /src/main/java/org | |
| parent | ee2e428aaecda2ca0dd46decc9e046630accd0ac (diff) | |
Determine correct type of locals
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java | 24 |
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, |
