aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-03 11:50:45 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-03 11:50:45 +0000
commit96ac268ff5f1ae25915c19f4d7810dbdccb4dc60 (patch)
treefd7535195013dbffa5a7d6e2f8032062602c7b0a /src/main/java/org
parent9688f65cec6e119659e23efd45d2b9aaa63461e0 (diff)
Add return-void instruction to Patio
Diffstat (limited to 'src/main/java/org')
-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.java5
-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/PatioReturnVoid.java9
5 files changed, 22 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 12c58729..2129ebc6 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
@@ -554,6 +554,9 @@ public class LlvmPatioCodeGen {
patioOperandToLlvmOperand(patioReturn.value(), context)
));
+ case PatioReturnVoid patioReturnVoid ->
+ throw new UnsupportedOperationException("TODO");
+
case PatioSwitch patioSwitch -> {
var switchDefaultStartLabelResult = context.allocateLocalName(
LlvmCodeGenLocalVariableSpace.SWITCH_DEFAULT_START
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 3f7e7eca..f83aa2d3 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
@@ -321,6 +321,10 @@ public class WasmPatioCodeGen {
yield context;
}
+ case PatioReturnVoid patioReturnVoid -> {
+ throw new UnsupportedOperationException("TODO");
+ }
+
case PatioSwitch patioSwitch -> {
// TODO: use br_table?
var wasmBlockType = generateBlockType(patioSwitch.targets());
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 9ccc2766..fcb9fd52 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -301,6 +301,11 @@ public class PatioSerializer {
operandToTree(return_.value())
);
+ case PatioReturnVoid returnVoid ->
+ treeList(
+ treeIdentifier("return-void")
+ );
+
case PatioSwitch switch_ ->
treeListIndented(
treeIdentifier("switch"),
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 c02a6041..b2a0a8ad 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, PatioAllocStack, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore {
+public sealed interface PatioInstruction permits PatioAllocHeap, PatioAllocStack, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore {
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java
new file mode 100644
index 00000000..0fc8c0cb
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java
@@ -0,0 +1,9 @@
+package org.shedlang.compiler.patio.ast.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Return with no value from the current function.
+ */
+public record PatioReturnVoid(Source source) implements PatioInstruction {
+}