From b003b9c7bad4126d7963d1a28ef46faeab4b4b6e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 13 Jun 2023 23:31:37 +0100 Subject: Store field names in typed namespace node --- .../compiler/ast/typed/TypedNamespaceNode.java | 1 + .../shedlang/compiler/typechecker/TypeChecker.java | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java index d03b5ff5..359d91b1 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java @@ -8,6 +8,7 @@ import java.util.List; public record TypedNamespaceNode( NamespaceName namespaceName, List body, + List fieldNames, Source source ) implements TypedNode { } diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 259e517d..770b7063 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -254,15 +254,11 @@ public class TypeChecker { UntypedNamespaceNode untyped, TypeCheckerContext context ) { - var typed = new TypedNamespaceNode( - untyped.namespaceName(), - untyped.body().stream() - .map(statement -> typeCheckNamespaceStatement(statement, context)) - .toList(), - untyped.source() - ); + var typedBody = untyped.body().stream() + .map(statement -> typeCheckNamespaceStatement(statement, context)) + .toList(); - var fieldTypes = typed.body().stream() + var fieldTypes = typedBody.stream() .flatMap(bodyStatement -> bodyStatement instanceof TypedFunctionDefinitionNode functionDefinition ? Stream.of(Map.entry(functionDefinition.name(), functionDefinition.type())) @@ -270,6 +266,15 @@ public class TypeChecker { ) .collect(PCollectors.toOrderedMap()); + var fieldNames = fieldTypes.keys(); + + var typed = new TypedNamespaceNode( + untyped.namespaceName(), + typedBody, + fieldNames, + untyped.source() + ); + return context.addNamespaceFields(typed.namespaceName(), fieldTypes).toResult(typed); } -- cgit v1.2.3