aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-05 22:15:32 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-05 22:15:32 +0100
commitd28daafdd5a3df782f50f3c460038f894cc4f74b (patch)
tree08ca7f17be680300cc6035fa1fe62c99ddb59762 /src/test/java
parent78a14781f62160e57f2f26a1552319ed37d70b4f (diff)
Add function to environment
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java
index 3ae36edb..e4063606 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java
@@ -55,6 +55,38 @@ public class TypeCheckerNamespaceTests {
}
@Test
+ public void functionCanCallFunctionDefinedEarlier() {
+ var untyped = Untyped.namespace(List.of(
+ UntypedFunctionDefinitionNode.builder()
+ .withName("f")
+ .withReturnType(Untyped.typeLevelReference("Unit"))
+ .build(),
+ UntypedFunctionDefinitionNode.builder()
+ .withName("g")
+ .withReturnType(Untyped.typeLevelReference("Unit"))
+ .addStatement(Untyped.expressionStatement(Untyped.call(
+ Untyped.reference("f"),
+ List.of()
+ )))
+ .build()
+ ));
+ var context = TypeCheckerContext.EMPTY
+ .enterNamespaceWithDefinedVariables(P.map(Map.entry("Unit", Types.metaType(Types.UNIT))));
+
+ var result = TypeChecker.typeCheckNamespace(untyped, context);
+
+ assertThat(
+ result.value(),
+ isTypedNamespaceNode()
+ .withBody(isSequence(
+ isTypedFunctionDefinitionNode().withName("f"),
+ isTypedFunctionDefinitionNode().withName("g")
+ )
+ )
+ );
+ }
+
+ @Test
public void typesOfFieldsAreStored() {
var namespaceName = NamespaceName.of("Example");
var untyped = Untyped.namespace(