aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-21 13:23:09 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-21 13:23:09 +0100
commitf56afdfe4c659ac3ea3cd5f11b84455c5e424063 (patch)
tree4ac6317a4ba9e06457a4705bc3d3bdc58ea5faab /src/main/java
parentb1313781607516060ce36fe676eaed521fbe75d2 (diff)
Add imports to typed namespace node
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedImportNode.java10
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedNamespaceNode.java1
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java6
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())