diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-13 23:31:37 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-13 23:31:37 +0100 |
| commit | b003b9c7bad4126d7963d1a28ef46faeab4b4b6e (patch) | |
| tree | 4843e783dee5252589a94d3272a5a2c43eda2217 /src/main/java | |
| parent | ca6da7e84d372cb1922fac1a2b2513b7af6b975f (diff) | |
Store field names in typed namespace node
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java | 1 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 21 |
2 files changed, 14 insertions, 8 deletions
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<TypedNamespaceStatementNode> body, + List<String> 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.<String, Type>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); } |
