aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
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
parentd2769fe60d264607f2e1c338657dc7e4d4bfba52 (diff)
Compile expression statements to stack instructions
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/Typed.java4
-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
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java8
4 files changed, 34 insertions, 8 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java
index ed58b4d4..80c02765 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java
@@ -29,6 +29,10 @@ public class Typed {
);
}
+ public static TypedExpressionStatementNode expressionStatement(TypedExpressionNode expression) {
+ return new TypedExpressionStatementNode(expression, Sources.NULL);
+ }
+
public static TypedIntLiteralNode intLiteral(int value) {
return new TypedIntLiteralNode(BigInteger.valueOf(value), Sources.NULL);
}
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,
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
index 29175665..a475ed6c 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
@@ -1,19 +1,11 @@
package org.shedlang.compiler.typechecker;
import org.junit.jupiter.api.Test;
-import org.shedlang.compiler.ast.typed.Typed;
import org.shedlang.compiler.ast.untyped.Untyped;
-import org.shedlang.compiler.typechecker.errors.UnknownVariableError;
-import org.shedlang.compiler.types.Types;
-import org.shedlang.compiler.util.P;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedExpressionStatementNode;
import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedStringLiteralNode;
import static org.zwobble.precisely.AssertThat.assertThat;
-import static org.zwobble.precisely.Matchers.equalTo;
public class TypeCheckerExpressionStatementTests {
@Test