diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 12:04:59 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 12:04:59 +0100 |
| commit | ff4dad7fc61d13aee7ed1191cc3afd9a8a75a240 (patch) | |
| tree | 9897db2ffb994081a32e72213beb6d8962a13dcd /src/test/java | |
| parent | d2769fe60d264607f2e1c338657dc7e4d4bfba52 (diff) | |
Compile expression statements to stack instructions
Diffstat (limited to 'src/test/java')
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 |
