From 4127cff475a54e9d92d21ae238b74e9af3dd0d23 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 19 Jul 2023 17:32:29 +0100 Subject: Extract checkDependenciesBetweenNamespaceStatements() --- .../shedlang/compiler/typechecker/TypeChecker.java | 51 ++++++++++++---------- 1 file changed, 29 insertions(+), 22 deletions(-) (limited to 'src/main/java') 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.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> dependenciesByBodyStatementIndex + ) { var deferredDependenciesByFunctionName = new HashMap>(); 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.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 typeCheckNamespaceStatement( -- cgit v1.2.3