aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/shedlang/compiler/stackir
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 12:04:59 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 12:04:59 +0100
commitff4dad7fc61d13aee7ed1191cc3afd9a8a75a240 (patch)
tree9897db2ffb994081a32e72213beb6d8962a13dcd /src/test/java/org/shedlang/compiler/stackir
parentd2769fe60d264607f2e1c338657dc7e4d4bfba52 (diff)
Compile expression statements to stack instructions
Diffstat (limited to 'src/test/java/org/shedlang/compiler/stackir')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/StackCompilerExpressionStatementTests.java24
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java6
2 files changed, 30 insertions, 0 deletions
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<Instruction> isDiscardInstruction() {
+ return instanceOf(
+ DiscardInstruction.class
+ );
+ }
+
public static Matcher<Instruction> isLocalLoadInstruction(String name) {
return instanceOf(
LocalLoadInstruction.class,