diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-28 15:36:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-28 15:36:08 +0100 |
| commit | 12bc0b647eb6276a93c134e35c5babc4efc01d93 (patch) | |
| tree | 95b731611ad703243e94d093b62021a26cee98ae /src/test/java | |
| parent | 7aa75e85fad99f25b7db8af932f12201e019d420 (diff) | |
Handle definition of struct when checking dependencies
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java | 34 |
1 files changed, 34 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 7663a0aa..34179cb2 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -364,6 +364,40 @@ public class TypeCheckerNamespaceTests { } @Test + public void valCanReferenceFunctionDefinedLaterThatUsesStructDefinedEvenLater() { + var untyped = Untyped.namespace(NamespaceName.of("Example", "Project"), List.of( + Untyped.val("none", Untyped.call( + Untyped.reference("createNone"), + List.of() + )), + UntypedFunctionDefinitionNode.builder() + .withName("createNone") + .withReturnType(Untyped.typeLevelReference("None")) + .addStatement(Untyped.functionReturn(Untyped.call( + Untyped.reference("None"), + List.of() + ))) + .build(), + UntypedStructDefinitionNode.builder() + .withName("None") + .build() + )); + var context = TypeCheckerContext.EMPTY; + + var result = TypeChecker.typeCheckNamespace(untyped, context); + + assertThat( + result.value(), + isTypedNamespaceNode() + .withBody(isSequence( + isTypedValNode("none", anything()), + isTypedFunctionDefinitionNode(), + isTypedStructDefinitionNode() + )) + ); + } + + @Test public void functionBodyCanAccessFieldOnTypeDefinedLater() { var untyped = Untyped.namespace(NamespaceName.of("Example", "Project"), List.of( UntypedFunctionDefinitionNode.builder() |
