aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-01 20:45:04 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-01 20:45:04 +0100
commit9c9fe47aef087f49c673e91b47aac6d403537575 (patch)
tree929dd13d0d65710b8b06568d31564822ffb61a94 /src/main/java
parentaf50498623bd37db5f5b60f2828e81b7e50d2ec4 (diff)
Add unreachable instruction to Patio
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java3
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java10
5 files changed, 21 insertions, 1 deletions
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 {
+}