From 5582721f6069ce9a0b36d19f36ef51f62acb5adc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 27 Jan 2024 11:03:17 +0000 Subject: Add PatioOperandConst::type() --- .../compiler/backends/llvm/codegen/PatioToLlvm.java | 16 ++-------------- .../org/shedlang/compiler/backends/wasm/PatioToWasm.java | 14 +++----------- .../shedlang/compiler/patio/operands/PatioBoolConst.java | 7 +++++++ .../compiler/patio/operands/PatioDataPtrConst.java | 7 +++++++ .../compiler/patio/operands/PatioFunctionPtrConst.java | 7 +++++++ .../compiler/patio/operands/PatioInt32Const.java | 7 +++++++ .../shedlang/compiler/patio/operands/PatioIntConst.java | 7 +++++++ .../compiler/patio/operands/PatioOperandConst.java | 4 +++- 8 files changed, 43 insertions(+), 26 deletions(-) (limited to 'src/main/java') 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(); } -- cgit v1.2.3