aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 10:07:16 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 10:07:16 +0100
commit4a550a5ae083518815ec70c73346705f3778df93 (patch)
tree268af6980edd39bde1fbc70559f377e64fb3bba2 /src/main/java
parent9d0e6555d1058cd589a1935e33e78211d1514103 (diff)
Compile bool literal to stack instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java32
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java4
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/PushBoolInstruction.java9
3 files changed, 45 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
new file mode 100644
index 00000000..a5b2b829
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -0,0 +1,32 @@
+package org.shedlang.compiler.stackir;
+
+import org.shedlang.compiler.ast.typed.*;
+import org.shedlang.compiler.stackir.instructions.Instruction;
+import org.shedlang.compiler.stackir.instructions.PushBoolInstruction;
+
+import java.util.List;
+
+public class StackCompiler {
+ private StackCompiler() {
+ }
+
+ private static List<Instruction> compileBoolLiteral(TypedBoolLiteralNode node) {
+ return List.of(new PushBoolInstruction(node.value(), node.source()));
+ }
+
+ public static List<Instruction> compileExpression(TypedExpressionNode node) {
+ return switch (node) {
+ case TypedBoolLiteralNode typedBoolLiteralNode ->
+ compileBoolLiteral(typedBoolLiteralNode);
+
+ case TypedIntLiteralNode typedIntLiteralNode ->
+ throw new UnsupportedOperationException("TODO");
+
+ case TypedReferenceNode typedReferenceNode ->
+ throw new UnsupportedOperationException("TODO");
+
+ case TypedStringLiteralNode typedStringLiteralNode ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
new file mode 100644
index 00000000..70c9d7c3
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.stackir.instructions;
+
+public sealed interface Instruction permits PushBoolInstruction {
+}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/PushBoolInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/PushBoolInstruction.java
new file mode 100644
index 00000000..0d9ad6b4
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/PushBoolInstruction.java
@@ -0,0 +1,9 @@
+package org.shedlang.compiler.stackir.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+public record PushBoolInstruction(
+ boolean value,
+ Source source
+) implements Instruction {
+}