aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-19 17:32:29 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-19 17:32:29 +0100
commit4127cff475a54e9d92d21ae238b74e9af3dd0d23 (patch)
tree7e181923394bdbdd3f8868c45fb6d64f1a1145ac /src/main/java
parentf0bcf07aaac58308bf31c97b5d1f9dc9c18d17b0 (diff)
Extract checkDependenciesBetweenNamespaceStatements()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index af843021..1cc7a7d6 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -614,6 +614,35 @@ public class TypeChecker {
dependenciesByBodyStatementIndex.add(dependencies);
}
+ checkDependenciesBetweenNamespaceStatements(untyped, dependenciesByBodyStatementIndex);
+
+ var fieldTypes = typedBody.stream()
+ .flatMap(bodyStatement ->
+ bodyStatement instanceof TypedFunctionDefinitionNode functionDefinition
+ ? Stream.of(Map.<String, Type>entry(functionDefinition.name(), functionDefinition.type()))
+ : Stream.of()
+ )
+ .collect(PCollectors.toOrderedMap());
+
+ var fieldNames = fieldTypes.keys();
+
+ var typed = new TypedNamespaceNode(
+ untyped.namespaceName(),
+ typedBody,
+ fieldNames,
+ untyped.source()
+ );
+
+ return context
+ .exit()
+ .addNamespaceFields(typed.namespaceName(), fieldTypes)
+ .toResult(typed);
+ }
+
+ private static void checkDependenciesBetweenNamespaceStatements(
+ UntypedNamespaceNode untyped,
+ List<Set<FreeVariable>> dependenciesByBodyStatementIndex
+ ) {
var deferredDependenciesByFunctionName = new HashMap<String, Set<FreeVariable>>();
for (var i = 0; i < untyped.body().size(); i++) {
var untypedStatement = untyped.body().get(i);
@@ -668,28 +697,6 @@ public class TypeChecker {
}
}
}
-
- var fieldTypes = typedBody.stream()
- .flatMap(bodyStatement ->
- bodyStatement instanceof TypedFunctionDefinitionNode functionDefinition
- ? Stream.of(Map.<String, Type>entry(functionDefinition.name(), functionDefinition.type()))
- : Stream.of()
- )
- .collect(PCollectors.toOrderedMap());
-
- var fieldNames = fieldTypes.keys();
-
- var typed = new TypedNamespaceNode(
- untyped.namespaceName(),
- typedBody,
- fieldNames,
- untyped.source()
- );
-
- return context
- .exit()
- .addNamespaceFields(typed.namespaceName(), fieldTypes)
- .toResult(typed);
}
static TypeCheckSteps<? extends TypedNamespaceStatementNode> typeCheckNamespaceStatement(