diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-19 20:34:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-19 20:34:12 +0100 |
| commit | 5900599a7f1cd0dfa5ba269e81f641142511cc57 (patch) | |
| tree | c09e708de851402759da1f8f133dda1a6313ed83 /src/main/java | |
| parent | 12a47d1938e53c82bc4fc8df88cf45a956deadbc (diff) | |
Add Patio IR with discard instruction
Diffstat (limited to 'src/main/java')
5 files changed, 61 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java new file mode 100644 index 00000000..ed180aba --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.patio; + +public class PatioCodeGen { +} diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java new file mode 100644 index 00000000..675925e3 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.patio; + +public class PatioCodeGenContext { +} diff --git a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java new file mode 100644 index 00000000..44ec7a19 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java @@ -0,0 +1,40 @@ +package org.shedlang.compiler.patio; + +import org.shedlang.compiler.patio.instructions.PatioDiscard; +import org.shedlang.compiler.patio.instructions.PatioInstruction; +import org.shedlang.compiler.treetext.Tree; + +import java.util.List; + +import static org.shedlang.compiler.treetext.TreeSerializer.serializeTree; +import static org.shedlang.compiler.treetext.Trees.*; + +public class PatioInstructionSerializer { + private PatioInstructionSerializer() {} + + public static void serializeInstructions(List<PatioInstruction> instructions, StringBuilder builder) { + var tree = instructionsToTree(instructions); + serializeTree(tree, builder, 0); + } + + public static void serializeInstruction(PatioInstruction instruction, StringBuilder builder) { + var tree = instructionToTree(instruction); + serializeTree(tree, builder, 0); + } + + private static Tree instructionsToTree(List<PatioInstruction> instructions) { + return treeListIndented( + instructions.stream() + .map(instruction -> instructionToTree(instruction)) + .toList() + ); + } + + private static Tree instructionToTree(PatioInstruction instruction) { + return switch (instruction) { + + case PatioDiscard discard -> + treeList(treeIdentifier("discard")); + }; + } +} diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java new file mode 100644 index 00000000..859e6b6b --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java @@ -0,0 +1,6 @@ +package org.shedlang.compiler.patio.instructions; + +import org.shedlang.compiler.sources.Source; + +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 new file mode 100644 index 00000000..bc4de280 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java @@ -0,0 +1,7 @@ +package org.shedlang.compiler.patio.instructions; + +import org.shedlang.compiler.sources.Source; + +public sealed interface PatioInstruction permits PatioDiscard { + Source source(); +} |
