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 --- .../StackCompilerExpressionStatementTests.java | 24 ++++++++++++++++++++++ .../stackir/instructions/InstructionMatchers.java | 6 ++++++ 2 files changed, 30 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/stackir/StackCompilerExpressionStatementTests.java (limited to 'src/test/java/org/shedlang/compiler/stackir') diff --git a/src/test/java/org/shedlang/compiler/stackir/StackCompilerExpressionStatementTests.java b/src/test/java/org/shedlang/compiler/stackir/StackCompilerExpressionStatementTests.java new file mode 100644 index 00000000..a408f19d --- /dev/null +++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerExpressionStatementTests.java @@ -0,0 +1,24 @@ +package org.shedlang.compiler.stackir; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.ast.typed.Typed; + +import java.util.List; + +import static org.shedlang.compiler.stackir.instructions.InstructionMatchers.*; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.isSequence; + +public class StackCompilerExpressionStatementTests { + @Test + public void expressionIsEvaluatedAndTheResultDiscarded() { + var node = Typed.expressionStatement(Typed.stringLiteral("hello")); + + var instructions = StackCompiler.compileFunctionStatement(node); + + assertThat(instructions, isSequence( + isPushStringInstruction("hello"), + isDiscardInstruction() + )); + } +} diff --git a/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java b/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java index c9cd8621..3863c2f9 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java @@ -19,6 +19,12 @@ public class InstructionMatchers { ); } + public static Matcher isDiscardInstruction() { + return instanceOf( + DiscardInstruction.class + ); + } + public static Matcher isLocalLoadInstruction(String name) { return instanceOf( LocalLoadInstruction.class, -- cgit v1.2.3