diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-19 20:49:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-19 20:49:13 +0100 |
| commit | fccdbaa4487a4b3d10fa6e554ae9c73d11c12ebc (patch) | |
| tree | 66f9ba780786b1dc84289d91dc287c62858adcc3 /src/main/java | |
| parent | 36ae66b73fab2ef78bc26d3a35fa66d353b5d57f (diff) | |
Add alloc instruction to Patio IR
Diffstat (limited to 'src/main/java')
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(); } |
