aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-19 20:49:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-19 20:49:13 +0100
commitfccdbaa4487a4b3d10fa6e554ae9c73d11c12ebc (patch)
tree66f9ba780786b1dc84289d91dc287c62858adcc3 /src/main/java
parent36ae66b73fab2ef78bc26d3a35fa66d353b5d57f (diff)
Add alloc instruction to Patio IR
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioAlloc.java10
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java2
4 files changed, 18 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index 790bf8d7..dfe1e04b 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -17,8 +17,8 @@ public class PatioCodeGen {
case DiscardInstruction discard ->
P.vector(new PatioDiscard(discard.source()));
- case ReturnInstruction discard ->
- P.vector(new PatioReturn(discard.source()));
+ case ReturnInstruction return_ ->
+ P.vector(new PatioReturn(return_.source()));
default ->
throw new IllegalStateException("Unexpected value: " + stackIrInstruction);
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
index 523eabc7..382c4125 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java
@@ -1,5 +1,6 @@
package org.shedlang.compiler.patio;
+import org.shedlang.compiler.patio.instructions.PatioAlloc;
import org.shedlang.compiler.patio.instructions.PatioDiscard;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.instructions.PatioReturn;
@@ -33,10 +34,13 @@ public class PatioInstructionSerializer {
private static Tree instructionToTree(PatioInstruction instruction) {
return switch (instruction) {
+ case PatioAlloc alloc ->
+ treeList(treeIdentifier("alloc"), treeInt(alloc.bytes()));
+
case PatioDiscard discard ->
treeList(treeIdentifier("discard"));
- case PatioReturn patioReturn ->
+ case PatioReturn return_ ->
treeList(treeIdentifier("return"));
};
}
diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioAlloc.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioAlloc.java
new file mode 100644
index 00000000..c5ea9594
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioAlloc.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.patio.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Allocate the given number of bytes, and push the pointer to the allocated
+ * memory onto the stack.
+ */
+public record PatioAlloc(int bytes, 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 22305e84..6928d324 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, PatioReturn {
+public sealed interface PatioInstruction permits PatioAlloc, PatioDiscard, PatioReturn {
Source source();
}