aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-19 20:43:49 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-19 20:43:49 +0100
commit46ac40c94a250e38d217fac1e75af102f898c4b5 (patch)
tree7fc1776f69f9b935f475a2b9821c5f3c5c72a0af /src/main/java
parent99f714d9a1037a3fab0995ce3414206258e68d05 (diff)
Add return to Patio IR
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java5
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioReturn.java9
4 files changed, 17 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
index 44ec7a19..523eabc7 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.patio;
import org.shedlang.compiler.patio.instructions.PatioDiscard;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
+import org.shedlang.compiler.patio.instructions.PatioReturn;
import org.shedlang.compiler.treetext.Tree;
import java.util.List;
@@ -32,9 +33,11 @@ public class PatioInstructionSerializer {
private static Tree instructionToTree(PatioInstruction instruction) {
return switch (instruction) {
-
case PatioDiscard discard ->
treeList(treeIdentifier("discard"));
+
+ case PatioReturn patioReturn ->
+ treeList(treeIdentifier("return"));
};
}
}
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java
index 859e6b6b..18cff4c3 100644
--- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java
@@ -2,5 +2,8 @@ package org.shedlang.compiler.patio.instructions;
import org.shedlang.compiler.sources.Source;
+/**
+ * Pop a value from the stack and discard it.
+ */
public record PatioDiscard(Source source) implements PatioInstruction {
}
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
index bc4de280..22305e84 100644
--- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java
@@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.instructions;
import org.shedlang.compiler.sources.Source;
-public sealed interface PatioInstruction permits PatioDiscard {
+public sealed interface PatioInstruction permits PatioDiscard, PatioReturn {
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioReturn.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioReturn.java
new file mode 100644
index 00000000..cf7e7990
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioReturn.java
@@ -0,0 +1,9 @@
+package org.shedlang.compiler.patio.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Pop a value from the stack and return with that value from the current function.
+ */
+public record PatioReturn(Source source) implements PatioInstruction {
+}