diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-05 22:15:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-05 22:15:32 +0100 |
| commit | d28daafdd5a3df782f50f3c460038f894cc4f74b (patch) | |
| tree | 08ca7f17be680300cc6035fa1fe62c99ddb59762 /src/test/java | |
| parent | 78a14781f62160e57f2f26a1552319ed37d70b4f (diff) | |
Add function to environment
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java | 32 |
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( |
