diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-27 11:03:17 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-27 11:03:17 +0000 |
| commit | 5582721f6069ce9a0b36d19f36ef51f62acb5adc (patch) | |
| tree | da8169990fd867aa9ecfa6d7c8967abc13643c6e /src/main/java | |
| parent | 21309632c9d207b42de267e3996d7703afcc0dca (diff) | |
Add PatioOperandConst::type()
Diffstat (limited to 'src/main/java')
8 files changed, 43 insertions, 26 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java index d646be12..ee9e36f8 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java @@ -1067,20 +1067,8 @@ public class PatioToLlvm { PatioToLlvmFunctionContext context ) { return switch (patioOperand) { - case PatioBoolConst patioBoolConst -> - LlvmTypes.INT_1; - - case PatioDataPtrConst patioDataPtrConst -> - LlvmTypes.pointer(LlvmTypes.VOID); - - case PatioFunctionPtrConst patioFunctionPtrConst -> - LlvmTypes.pointer(LlvmTypes.VOID); - - case PatioIntConst patioIntConst -> - context.target().patioIntType(); - - case PatioInt32Const patioInt32Const -> - LlvmTypes.INT_32; + case PatioOperandConst patioOperandConst -> + patioTypeToLlvmType(patioOperandConst.type(), context.target()); case PatioLocalRef patioLocalRef -> context.patioLocalToType(patioLocalRef); 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 c6ec5136..c9d862ac 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java @@ -753,19 +753,11 @@ public class PatioToWasm { PatioOperand operand, Context context ) { - // TODO: push into PatioOperand? return switch (operand) { - case PatioBoolConst patioBoolConst -> - patioTypeToWasmValueType(PatioTypes.BOOL, context.target); - case PatioDataPtrConst patioDataPtrConst -> - patioTypeToWasmValueType(PatioTypes.DATA_POINTER, context.target); - case PatioFunctionPtrConst patioFunctionPtrConst -> - patioTypeToWasmValueType(PatioTypes.FUNCTION_POINTER, context.target); - case PatioIntConst patioIntConst -> - patioTypeToWasmValueType(PatioTypes.INT, context.target); - case PatioInt32Const patioInt32Const -> - patioTypeToWasmValueType(PatioTypes.INT32, context.target); + case PatioOperandConst patioOperandConst -> + patioTypeToWasmValueType(patioOperandConst.type(), context.target); case PatioLocalRef patioLocalRef -> + // TODO: push into PatioOperand? context.wasmLocalType(patioLocalRef); }; } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioBoolConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioBoolConst.java index c96ca2ba..941cfdbb 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioBoolConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioBoolConst.java @@ -1,4 +1,11 @@ package org.shedlang.compiler.patio.operands; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; + public record PatioBoolConst(boolean value) implements PatioOperandConst { + @Override + public PatioType type() { + return PatioTypes.BOOL; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioDataPtrConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioDataPtrConst.java index 8af8d805..91fd72f7 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioDataPtrConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioDataPtrConst.java @@ -1,4 +1,11 @@ package org.shedlang.compiler.patio.operands; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; + public record PatioDataPtrConst(String name) implements PatioOperandConst { + @Override + public PatioType type() { + return PatioTypes.DATA_POINTER; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioFunctionPtrConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioFunctionPtrConst.java index 1ab737b8..273f6c61 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioFunctionPtrConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioFunctionPtrConst.java @@ -1,4 +1,11 @@ package org.shedlang.compiler.patio.operands; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; + public record PatioFunctionPtrConst(String name) implements PatioOperandConst { + @Override + public PatioType type() { + return PatioTypes.FUNCTION_POINTER; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java index 66b648c5..f30efef4 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioInt32Const.java @@ -1,5 +1,7 @@ package org.shedlang.compiler.patio.operands; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; import org.shedlang.compiler.patio.values.PatioIntValue; import org.shedlang.compiler.patio.values.PatioIntValueLiteral; @@ -7,4 +9,9 @@ public record PatioInt32Const(PatioIntValue value) implements PatioOperandConst public static PatioInt32Const of(int value) { return new PatioInt32Const(new PatioIntValueLiteral(value)); } + + @Override + public PatioType type() { + return PatioTypes.INT32; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioIntConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioIntConst.java index a122a02c..818a5a10 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioIntConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioIntConst.java @@ -1,5 +1,7 @@ package org.shedlang.compiler.patio.operands; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; import org.shedlang.compiler.patio.values.PatioIntValue; import org.shedlang.compiler.patio.values.PatioIntValueLiteral; @@ -7,4 +9,9 @@ public record PatioIntConst(PatioIntValue value) implements PatioOperandConst { public static PatioIntConst of(int value) { return new PatioIntConst(new PatioIntValueLiteral(value)); } + + @Override + public PatioType type() { + return PatioTypes.INT; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java index 2aabab00..0a31824f 100644 --- a/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java +++ b/src/main/java/org/shedlang/compiler/patio/operands/PatioOperandConst.java @@ -1,5 +1,7 @@ package org.shedlang.compiler.patio.operands; -public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioInt32Const { +import org.shedlang.compiler.patio.types.PatioType; +public sealed interface PatioOperandConst extends PatioOperand permits PatioBoolConst, PatioDataPtrConst, PatioFunctionPtrConst, PatioIntConst, PatioInt32Const { + PatioType type(); } |
