aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-28 15:36:08 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-28 15:36:08 +0100
commit12bc0b647eb6276a93c134e35c5babc4efc01d93 (patch)
tree95b731611ad703243e94d093b62021a26cee98ae /src/test/java
parent7aa75e85fad99f25b7db8af932f12201e019d420 (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.java34
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()