aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-16 22:54:10 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-16 22:54:10 +0100
commitff769ec6795b7725f0bfb4d523e2762cb8e1f8c8 (patch)
tree710888ecf950012ea07030e6c71046cba6b20156 /src/main/java
parentdbb847a2e9524e1a6479c13ea2379dfa453bb32b (diff)
Add return instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java4
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/ReturnInstruction.java9
3 files changed, 14 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
index 9a8ac1ac..a9e6350f 100644
--- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
@@ -116,6 +116,10 @@ public class InstructionSerializer {
treeList(
treeIdentifier("push-unit")
);
+ case ReturnInstruction returnInstruction ->
+ treeList(
+ treeIdentifier("return")
+ );
};
}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
index a2b9d7a7..50607e02 100644
--- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
@@ -3,7 +3,7 @@ package org.shedlang.compiler.stackir.instructions;
import org.shedlang.compiler.sources.Source;
public sealed interface Instruction
- permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction {
+ permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction {
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/ReturnInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/ReturnInstruction.java
new file mode 100644
index 00000000..3b711c7d
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/ReturnInstruction.java
@@ -0,0 +1,9 @@
+package org.shedlang.compiler.stackir.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Pop a value from the stack and return with that value from the current function.
+ */
+public record ReturnInstruction(Source source) implements Instruction {
+}