From 4a550a5ae083518815ec70c73346705f3778df93 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Jun 2023 10:07:16 +0100 Subject: Compile bool literal to stack instruction --- .../shedlang/compiler/stackir/StackCompiler.java | 32 ++++++++++++++++++++++ .../compiler/stackir/instructions/Instruction.java | 4 +++ .../stackir/instructions/PushBoolInstruction.java | 9 ++++++ 3 files changed, 45 insertions(+) create mode 100644 src/main/java/org/shedlang/compiler/stackir/StackCompiler.java create mode 100644 src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java create mode 100644 src/main/java/org/shedlang/compiler/stackir/instructions/PushBoolInstruction.java (limited to 'src/main/java') 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 compileBoolLiteral(TypedBoolLiteralNode node) { + return List.of(new PushBoolInstruction(node.value(), node.source())); + } + + public static List 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 { +} -- cgit v1.2.3