aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-13 23:31:37 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-13 23:31:37 +0100
commitb003b9c7bad4126d7963d1a28ef46faeab4b4b6e (patch)
tree4843e783dee5252589a94d3272a5a2c43eda2217 /src/main/java
parentca6da7e84d372cb1922fac1a2b2513b7af6b975f (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.java1
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java21
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);
}