From f56afdfe4c659ac3ea3cd5f11b84455c5e424063 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 21 Oct 2023 13:23:09 +0100 Subject: Add imports to typed namespace node --- .../java/org/shedlang/compiler/ast/typed/TypedImportNode.java | 10 ++++++++++ .../org/shedlang/compiler/ast/typed/TypedNamespaceNode.java | 1 + .../java/org/shedlang/compiler/typechecker/TypeChecker.java | 6 ++++++ 3 files changed, 17 insertions(+) create mode 100644 src/main/java/org/shedlang/compiler/ast/typed/TypedImportNode.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedImportNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedImportNode.java new file mode 100644 index 00000000..e9932300 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedImportNode.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.ast.typed; + +import org.shedlang.compiler.sources.Source; +import org.shedlang.compiler.types.NamespaceName; + +public record TypedImportNode( + NamespaceName namespaceName, + Source source +) implements TypedNode { +} 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 628cffd2..26da9e61 100644 --- a/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java +++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java @@ -7,6 +7,7 @@ import java.util.List; public record TypedNamespaceNode( NamespaceName namespaceName, + List imports, List body, List boundVariableNames, List fieldNames, diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index cc68861a..f2844b33 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -686,12 +686,17 @@ public class TypeChecker { ) { var namespaceEnvironment = EnvironmentBuilder.EMPTY; + var typedImportNodes = new ArrayList(); for (var import_ : untyped.imports()) { namespaceEnvironment = namespaceEnvironment.add( import_.namespaceName().parts().getLast(), Variable.defined(new NamespaceType(import_.namespaceName()), VariableType.IMPORT), import_.source() ); + typedImportNodes.add(new TypedImportNode( + import_.namespaceName(), + import_.source() + )); } for (var statement : untyped.body()) { @@ -805,6 +810,7 @@ public class TypeChecker { var typed = new TypedNamespaceNode( untyped.namespaceName(), + typedImportNodes, typedBody, declaredVariables.stream() .map(boundVariable -> boundVariable.name()) -- cgit v1.2.3