From 9c9fe47aef087f49c673e91b47aac6d403537575 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 1 Oct 2023 20:45:04 +0100 Subject: Add unreachable instruction to Patio --- .../org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java | 3 +++ .../org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 4 ++++ .../java/org/shedlang/compiler/patio/ast/PatioSerializer.java | 3 +++ .../compiler/patio/ast/instructions/PatioInstruction.java | 2 +- .../compiler/patio/ast/instructions/PatioUnreachable.java | 10 ++++++++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java index 167c85be..c4a23ac6 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java @@ -506,6 +506,9 @@ public class LlvmPatioCodeGen { patioOperandToLlvmOperand(patioReturn.value(), context) )); + case PatioUnreachable patioUnreachable -> + throw new UnsupportedOperationException(); + case PatioVarLoad patioVarLoad -> { var targetResult = context.addPatioLocalToLlvmLocal(patioVarLoad.target()); var target = targetResult.value; diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java index dadfa918..d315bfdd 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -306,6 +306,10 @@ public class WasmPatioCodeGen { yield context; } + case PatioUnreachable patioUnreachable -> { + throw new UnsupportedOperationException("TODO"); + } + case PatioVarLoad patioVarLoad -> { yield generateOperandToPatioLocal( patioVarLoad.target(), diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java index c8b51f0a..c581e180 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -293,6 +293,9 @@ public class PatioSerializer { operandToTree(return_.value()) ); + case PatioUnreachable unreachable -> + treeList(treeIdentifier("unreachable")); + case PatioVarLoad varLoad -> treeList( treeIdentifier("var-load"), diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java index f68f752e..8b11d25b 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java @@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.ast.instructions; import org.shedlang.compiler.sources.Source; -public sealed interface PatioInstruction permits PatioAllocHeap, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioReturn, PatioVarLoad, PatioVarStore { +public sealed interface PatioInstruction permits PatioAllocHeap, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioReturn, PatioUnreachable, PatioVarLoad, PatioVarStore { Source source(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java new file mode 100644 index 00000000..55821afe --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.patio.ast.instructions; + +import org.shedlang.compiler.sources.Source; + +/** + * Unreachable instructions have undefined behaviour, and are used to indicate + * that an instruction sequence is unreachable. + */ +public record PatioUnreachable(Source source) implements PatioInstruction { +} -- cgit v1.2.3