aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 19:26:53 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 19:26:53 +0100
commite6d39d97d6415ebdaf990d44198ce29472f9cd1e (patch)
tree253aa06196abcc62e19967e170d0d9c844682b04 /src/test/java
parent062175737e6f7f3971075a7446aeae76946b5c9e (diff)
Store free variables used in function
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedArgsNodeMatcher.java2
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNodeMatcher.java6
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java6
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNodeMatcher.java2
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java4
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBoolLiteralTests.java4
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java6
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java22
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIntLiteralTests.java4
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReferenceTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java4
12 files changed, 45 insertions, 19 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedArgsNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedArgsNodeMatcher.java
index 05037526..0d70a40d 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedArgsNodeMatcher.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedArgsNodeMatcher.java
@@ -26,7 +26,7 @@ public class TypedArgsNodeMatcher extends MatcherBuilder<TypedArgsNode, TypedArg
return new TypedArgsNodeMatcher(submatchers);
}
- public TypedArgsNodeMatcher withPositional(Matcher<? super Iterable<TypedExpressionNode>> positional) {
+ public TypedArgsNodeMatcher withPositional(Matcher<? super Iterable<? extends TypedExpressionNode>> positional) {
return with(has("positional", x -> x.positional(), positional));
}
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNodeMatcher.java
index 04a06f64..b1c6e59a 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNodeMatcher.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionDefinitionNodeMatcher.java
@@ -29,7 +29,7 @@ public class TypedFunctionDefinitionNodeMatcher extends MatcherBuilder<TypedName
return new TypedFunctionDefinitionNodeMatcher(submatchers);
}
- public TypedFunctionDefinitionNodeMatcher withBody(Matcher<Iterable<TypedFunctionStatementNode>> body) {
+ public TypedFunctionDefinitionNodeMatcher withBody(Matcher<Iterable<? extends TypedFunctionStatementNode>> body) {
return with(has("body", x -> x.body(), body));
}
@@ -37,6 +37,10 @@ public class TypedFunctionDefinitionNodeMatcher extends MatcherBuilder<TypedName
return with(has("effect", x -> x.effect(), effect));
}
+ public TypedFunctionDefinitionNodeMatcher withFreeVariables(Matcher<Iterable<String>> freeVariables) {
+ return with(has("freeVariables", x -> x.freeVariables(), freeVariables));
+ }
+
public TypedFunctionDefinitionNodeMatcher withName(String name) {
return with(has("name", x -> x.name(), equalTo(name)));
}
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 ebf1ef42..dad777f6 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
@@ -62,7 +62,7 @@ public class TypedNodeMatchers {
}
public static Matcher<TypedNamespaceNode> isTypedNamespaceNode(
- Matcher<Iterable<TypedNamespaceStatementNode>> body
+ Matcher<Iterable<? extends TypedNamespaceStatementNode>> body
) {
return has("body", x -> x.body(), body);
}
@@ -78,8 +78,8 @@ public class TypedNodeMatchers {
}
public static Matcher<TypedParamsNode> isTypedParamsNode(
- Matcher<Iterable<TypedParamNode>> positional,
- Matcher<Iterable<TypedParamNode>> named
+ Matcher<Iterable<? extends TypedParamNode>> positional,
+ Matcher<Iterable<? extends TypedParamNode>> named
) {
return allOf(
has("positional", x -> x.positional(), positional),
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNodeMatcher.java
index c88111df..8dae4a31 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNodeMatcher.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionDefinitionNodeMatcher.java
@@ -29,7 +29,7 @@ public class UntypedFunctionDefinitionNodeMatcher extends MatcherBuilder<Untyped
return new UntypedFunctionDefinitionNodeMatcher(submatchers);
}
- public UntypedFunctionDefinitionNodeMatcher withBody(Matcher<Iterable<UntypedFunctionStatementNode>> body) {
+ public UntypedFunctionDefinitionNodeMatcher withBody(Matcher<Iterable<? extends UntypedFunctionStatementNode>> body) {
return with(has("body", x -> x.body(), body));
}
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 6c06e52a..95d30cc6 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java
@@ -40,8 +40,8 @@ public class UntypedNodeMatchers {
}
public static Matcher<UntypedParamsNode> isUntypedParamsNode(
- Matcher<Iterable<UntypedParamNode>> positional,
- Matcher<Iterable<UntypedParamNode>> named
+ Matcher<Iterable<? extends UntypedParamNode>> positional,
+ Matcher<Iterable<? extends UntypedParamNode>> named
) {
return allOf(
has("positional", x -> x.positional(), positional),
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBoolLiteralTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBoolLiteralTests.java
index 44258695..c39718de 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBoolLiteralTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBoolLiteralTests.java
@@ -15,7 +15,7 @@ public class TypeCheckerBoolLiteralTests {
var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY);
- assertThat(typed, isTypedBoolLiteralNode(true));
- assertThat(typed.type(), equalTo(Types.BOOL));
+ assertThat(typed.value(), isTypedBoolLiteralNode(true));
+ assertThat(typed.value().type(), equalTo(Types.BOOL));
}
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
index 19c08b14..24ded26f 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
@@ -33,7 +33,7 @@ public class TypeCheckerCallTests {
var typed = TypeChecker.typeCheckExpression(untyped, context);
assertThat(
- typed,
+ typed.value(),
isTypedCallNode()
.withReceiver(isTypedReferenceNode("f", functionType))
.withArgs(isTypedArgsNode().withPositional(isSequence()).withNamed(isSequence()))
@@ -79,7 +79,7 @@ public class TypeCheckerCallTests {
var typed = TypeChecker.typeCheckExpression(untyped, context);
assertThat(
- typed,
+ typed.value(),
isTypedCallNode()
.withArgs(isTypedArgsNode().withPositional(isSequence(
isTypedStringLiteralNode("hello"),
@@ -108,7 +108,7 @@ public class TypeCheckerCallTests {
var typed = TypeChecker.typeCheckExpression(untyped, context);
assertThat(
- typed,
+ typed.value(),
isTypedCallNode()
.withArgs(isTypedArgsNode().withNamed(isSequence(
isTypedNamedArgNode("x", isTypedStringLiteralNode("hello")),
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
index a475ed6c..b7ffca1b 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java
@@ -14,6 +14,6 @@ public class TypeCheckerExpressionStatementTests {
var typed = TypeChecker.typeCheckFunctionStatement(untyped, TypeCheckerContext.EMPTY);
- assertThat(typed, isTypedExpressionStatementNode(isTypedStringLiteralNode("hello")));
+ assertThat(typed.value(), isTypedExpressionStatementNode(isTypedStringLiteralNode("hello")));
}
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
index 1671bed4..7ce8c7db 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java
@@ -103,4 +103,26 @@ public class TypeCheckerFunctionDefinitionTests {
))
);
}
+
+ @Test
+ public void freeVariablesIncludeVariablesReferencedInFunctionButDefinedOutsideOfFunction() {
+ var untyped = UntypedFunctionDefinitionNode.builder()
+ .withReturnType(Untyped.typeLevelReference("Unit"))
+ .addStatement(Untyped.expressionStatement(Untyped.reference("y")))
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enter(P.map(
+ Map.entry("Unit", Types.metaType(Types.UNIT)),
+ Map.entry("x", Types.STRING),
+ Map.entry("y", Types.STRING)
+ ));
+
+ var typed = TypeChecker.typeCheckNamespaceStatement(untyped, context);
+
+ assertThat(
+ typed,
+ isTypedFunctionDefinitionNode()
+ .withFreeVariables(containsExactly(equalTo("y")))
+ );
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIntLiteralTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIntLiteralTests.java
index ca47b336..ce007495 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIntLiteralTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIntLiteralTests.java
@@ -15,7 +15,7 @@ public class TypeCheckerIntLiteralTests {
var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY);
- assertThat(typed, isTypedIntLiteralNode(42));
- assertThat(typed.type(), equalTo(Types.INT));
+ assertThat(typed.value(), isTypedIntLiteralNode(42));
+ assertThat(typed.value().type(), equalTo(Types.INT));
}
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReferenceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReferenceTests.java
index 659514f2..9d067cc1 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReferenceTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerReferenceTests.java
@@ -22,7 +22,7 @@ public class TypeCheckerReferenceTests {
var typed = TypeChecker.typeCheckExpression(untyped, context);
- assertThat(typed, isTypedReferenceNode("x", Types.STRING));
+ assertThat(typed.value(), isTypedReferenceNode("x", Types.STRING));
}
@Test
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java
index 352fbef9..7ede9a67 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStringLiteralTests.java
@@ -15,7 +15,7 @@ public class TypeCheckerStringLiteralTests {
var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY);
- assertThat(typed, isTypedStringLiteralNode("hello"));
- assertThat(typed.type(), equalTo(Types.STRING));
+ assertThat(typed.value(), isTypedStringLiteralNode("hello"));
+ assertThat(typed.value().type(), equalTo(Types.STRING));
}
}