From ff4dad7fc61d13aee7ed1191cc3afd9a8a75a240 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Jun 2023 12:04:59 +0100 Subject: Compile expression statements to stack instructions --- .../java/org/shedlang/compiler/stackir/StackCompiler.java | 11 +++++++++++ .../compiler/stackir/instructions/DiscardInstruction.java | 6 ++++++ .../shedlang/compiler/stackir/instructions/Instruction.java | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.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 index c16674e0..4623bc5d 100644 --- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java +++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java @@ -56,6 +56,17 @@ public class StackCompiler { }; } + private static PVector compileExpressionStatement(TypedExpressionStatementNode node) { + return compileExpression(node.expression()).plus(new DiscardInstruction(node.source())); + } + + public static PVector compileFunctionStatement(TypedFunctionStatementNode node) { + return switch (node) { + case TypedExpressionStatementNode expressionStatement -> + compileExpressionStatement(expressionStatement); + }; + } + private static PVector compileIntLiteral(TypedIntLiteralNode node) { return P.vector(new PushIntInstruction(node.value(), node.source())); } diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java new file mode 100644 index 00000000..6efd3c03 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java @@ -0,0 +1,6 @@ +package org.shedlang.compiler.stackir.instructions; + +import org.shedlang.compiler.sources.Source; + +public record DiscardInstruction(Source source) implements Instruction { +} diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java index 33007bf2..0b5d9dd8 100644 --- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java +++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java @@ -1,5 +1,5 @@ package org.shedlang.compiler.stackir.instructions; public sealed interface Instruction - permits CallInstruction, LocalLoadInstruction, LocalStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction { + permits CallInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction { } -- cgit v1.2.3