aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-09 11:59:27 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-09 11:59:27 +0100
commit85be56d890f100b72dde8e011d7421e597888363 (patch)
tree063057b5f430d5e392031863c95432f3b40af990 /src/test/java
parent1259efb6a83148827445849232dc34e9342c1f96 (diff)
Add explicit function return statement
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/Typed.java8
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java2
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java8
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java18
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserFunctionReturnTests.java18
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/StackCompilerReturnTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java (renamed from src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReturnTests.java)10
9 files changed, 44 insertions, 26 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 f7dfb097..ab575632 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/Typed.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/Typed.java
@@ -35,6 +35,10 @@ public class Typed {
return new TypedExpressionStatementNode(expression, Sources.NULL);
}
+ public static TypedFunctionReturnNode functionReturn(TypedExpressionNode expression) {
+ return new TypedFunctionReturnNode(expression, Sources.NULL);
+ }
+
public static TypedBinaryOperationNode intAdd(
TypedExpressionNode left,
TypedExpressionNode right
@@ -122,10 +126,6 @@ public class Typed {
return new TypedReferenceNode(name, type, Sources.NULL);
}
- public static TypedReturnNode return_(TypedExpressionNode expression) {
- return new TypedReturnNode(expression, Sources.NULL);
- }
-
public static TypedBinaryOperationNode stringAdd(
TypedExpressionNode left,
TypedExpressionNode right
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
index d32e0d23..befeb326 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
@@ -148,7 +148,7 @@ public class TypedNodeMatchers {
Matcher<TypedExpressionNode> expression
) {
return instanceOf(
- TypedReturnNode.class,
+ TypedFunctionReturnNode.class,
has("expression", x -> x.expression(), expression)
);
}
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
index 6465f27a..db7037ce 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
@@ -62,6 +62,10 @@ public class Untyped {
return new UntypedExpressionStatementNode(expression, Sources.NULL);
}
+ public static UntypedFunctionReturnNode functionReturn_(UntypedExpressionNode expression) {
+ return new UntypedFunctionReturnNode(expression, Sources.NULL);
+ }
+
public static UntypedIntLiteralNode intLiteral(int value) {
return new UntypedIntLiteralNode(BigInteger.valueOf(value), Sources.NULL);
}
@@ -101,10 +105,6 @@ public class Untyped {
return new UntypedReferenceNode(name, Sources.NULL);
}
- public static UntypedReturnNode return_(UntypedExpressionNode expression) {
- return new UntypedReturnNode(expression, Sources.NULL);
- }
-
public static UntypedStringLiteralNode stringLiteral(String value) {
return new UntypedStringLiteralNode(value, Sources.NULL);
}
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
index 17675e35..54edfc9d 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
@@ -69,6 +69,15 @@ public class UntypedNodeMatchers {
return UntypedFunctionDefinitionNodeMatcher.empty();
}
+ public static Matcher<UntypedFunctionStatementNode> isUntypedFunctionReturnNode(
+ Matcher<UntypedExpressionNode> expression
+ ) {
+ return instanceOf(
+ UntypedFunctionReturnNode.class,
+ has("expression", x -> x.expression(), expression)
+ );
+ }
+
public static Matcher<UntypedExpressionNode> isUntypedIfNode(
Matcher<Iterable<? extends UntypedConditionalBranchNode>> conditionalBranches,
Matcher<Iterable<? extends UntypedFunctionStatementNode>> elseBody
@@ -135,15 +144,6 @@ public class UntypedNodeMatchers {
);
}
- public static Matcher<UntypedFunctionStatementNode> isUntypedReturnNode(
- Matcher<UntypedExpressionNode> expression
- ) {
- return instanceOf(
- UntypedReturnNode.class,
- has("expression", x -> x.expression(), expression)
- );
- }
-
public static Matcher<UntypedExpressionNode> isUntypedStringLiteralNode(String value) {
return instanceOf(
UntypedStringLiteralNode.class,
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
index 0f96b59b..88bde61d 100644
--- a/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/parser/ParserFunctionDefinitionTests.java
@@ -221,7 +221,7 @@ public class ParserFunctionDefinitionTests {
.withBody(isSequence(
isUntypedExpressionStatementNode(isUntypedReferenceNode("a")),
isUntypedExpressionStatementNode(isUntypedReferenceNode("b")),
- isUntypedReturnNode(isUntypedReferenceNode("c"))
+ isUntypedFunctionReturnNode(isUntypedReferenceNode("c"))
))
);
}
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserFunctionReturnTests.java b/src/test/java/org/shedlang/compiler/parser/ParserFunctionReturnTests.java
new file mode 100644
index 00000000..6e7f5cc3
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/parser/ParserFunctionReturnTests.java
@@ -0,0 +1,18 @@
+package org.shedlang.compiler.parser;
+
+import org.junit.jupiter.api.Test;
+
+import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.*;
+import static org.shedlang.compiler.parser.ParserTesting.parseString;
+import static org.zwobble.precisely.AssertThat.assertThat;
+
+public class ParserFunctionReturnTests {
+ @Test
+ public void canParseFunctionReturn() {
+ var source = "return f;";
+
+ var node = parseString(source, Parser::parseFunctionStatement);
+
+ assertThat(node, isUntypedFunctionReturnNode(isUntypedReferenceNode("f")));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/stackir/StackCompilerReturnTests.java b/src/test/java/org/shedlang/compiler/stackir/StackCompilerReturnTests.java
index 69a3f735..dcb1af47 100644
--- a/src/test/java/org/shedlang/compiler/stackir/StackCompilerReturnTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerReturnTests.java
@@ -10,7 +10,7 @@ import static org.zwobble.precisely.Matchers.isSequence;
public class StackCompilerReturnTests {
@Test
public void expressionIsEvaluatedAndTheResultDiscarded() {
- var node = Typed.return_(Typed.stringLiteral("hello"));
+ var node = Typed.functionReturn(Typed.stringLiteral("hello"));
var instructions = StackCompiler.compileFunctionStatement(node);
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
index 7bb490a8..2ff53f74 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
@@ -205,7 +205,7 @@ public class TypeCheckerFunctionDefinitionTests {
public void bodyHasReturnTypeAsDefinedInSignature() {
var untyped = UntypedFunctionDefinitionNode.builder()
.withReturnType(Untyped.typeLevelReference("String"))
- .addStatement(Untyped.return_(Untyped.intLiteral(42)))
+ .addStatement(Untyped.functionReturn_(Untyped.intLiteral(42)))
.build();
var context = TypeCheckerContext.EMPTY
.enterNamespaceWithDefinedVariables(P.map(
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReturnTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java
index 08fb61fd..bea2d4d9 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReturnTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionReturnTests.java
@@ -14,10 +14,10 @@ import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
-public class TypeCheckerReturnTests {
+public class TypeCheckerFunctionReturnTests {
@Test
public void expressionIsTypeChecked() {
- var untyped = Untyped.return_(Untyped.stringLiteral("hello"));
+ var untyped = Untyped.functionReturn_(Untyped.stringLiteral("hello"));
var context = TypeCheckerContext.EMPTY
.enterFunction(P.map(), Effects.NONE, Types.STRING);
@@ -28,7 +28,7 @@ public class TypeCheckerReturnTests {
@Test
public void whenNotInFunctionThenReturnIsForbidden() {
- var untyped = Untyped.return_(Untyped.stringLiteral("hello"));
+ var untyped = Untyped.functionReturn_(Untyped.stringLiteral("hello"));
var context = TypeCheckerContext.EMPTY
.enterNamespace(P.map());
@@ -40,7 +40,7 @@ public class TypeCheckerReturnTests {
@Test
public void canReturnSubtypeOfReturnType() {
- var untyped = Untyped.return_(Untyped.stringLiteral("hello"));
+ var untyped = Untyped.functionReturn_(Untyped.stringLiteral("hello"));
var context = TypeCheckerContext.EMPTY
.enterFunction(P.map(), Effects.NONE, Types.TOP);
@@ -51,7 +51,7 @@ public class TypeCheckerReturnTests {
@Test
public void cannotReturnNonSubtypeOfReturnType() {
- var untyped = Untyped.return_(Untyped.stringLiteral("hello"));
+ var untyped = Untyped.functionReturn_(Untyped.stringLiteral("hello"));
var context = TypeCheckerContext.EMPTY
.enterFunction(P.map(), Effects.NONE, Types.INT);