diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-21 13:23:09 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-21 13:23:09 +0100 |
| commit | f56afdfe4c659ac3ea3cd5f11b84455c5e424063 (patch) | |
| tree | 4ac6317a4ba9e06457a4705bc3d3bdc58ea5faab /src/main/java | |
| parent | b1313781607516060ce36fe676eaed521fbe75d2 (diff) | |
Add imports to typed namespace node
Diffstat (limited to 'src/main/java')
3 files changed, 17 insertions, 0 deletions
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<TypedImportNode> imports, List<TypedNamespaceStatementNode> body, List<String> boundVariableNames, List<String> 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<TypedImportNode>(); 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()) |
