aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-19 20:34:12 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-19 20:34:12 +0100
commit5900599a7f1cd0dfa5ba269e81f641142511cc57 (patch)
treec09e708de851402759da1f8f133dda1a6313ed83 /src/main/java
parent12a47d1938e53c82bc4fc8df88cf45a956deadbc (diff)
Add Patio IR with discard instruction
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/PatioCodeGenContext.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java40
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioDiscard.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioInstruction.java7
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();
+}