diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 10:07:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 10:07:16 +0100 |
| commit | 4a550a5ae083518815ec70c73346705f3778df93 (patch) | |
| tree | 268af6980edd39bde1fbc70559f377e64fb3bba2 /src/main/java | |
| parent | 9d0e6555d1058cd589a1935e33e78211d1514103 (diff) | |
Compile bool literal to stack instruction
Diffstat (limited to 'src/main/java')
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 { +} |
