aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-20 19:05:13 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-20 19:05:13 +0000
commitf38d5b17426f7faca4793a52c0891227003fe93e (patch)
treeda6355b5ebe72f26334e752d978c97ef6c6b19a1 /src/main/java
parentc472034dcdea19ac4e25202ecf76d7ad4a2616b4 (diff)
Handle unknown namespaces
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariser.java5
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/errors/UnknownNamespaceError.java18
2 files changed, 23 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariser.java b/src/main/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariser.java
index 1afeb258..8fa1876d 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariser.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/NamespaceDependencyLineariser.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.typechecker;
import org.shedlang.compiler.ast.untyped.UntypedNamespaceNode;
import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.typechecker.errors.CircularNamespaceDependencyError;
+import org.shedlang.compiler.typechecker.errors.UnknownNamespaceError;
import org.shedlang.compiler.types.NamespaceName;
import java.util.ArrayList;
@@ -41,6 +42,10 @@ public class NamespaceDependencyLineariser {
}
var untypedNamespaceNode = nodesByName.get(name);
+ if (untypedNamespaceNode == null) {
+ throw new UnknownNamespaceError(name, Sources.NULL);
+ }
+
for (var import_ : untypedNamespaceNode.imports()) {
add(import_.namespaceName());
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/UnknownNamespaceError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/UnknownNamespaceError.java
new file mode 100644
index 00000000..ad598e2a
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/typechecker/errors/UnknownNamespaceError.java
@@ -0,0 +1,18 @@
+package org.shedlang.compiler.typechecker.errors;
+
+import org.shedlang.compiler.errors.SourceError;
+import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.types.NamespaceName;
+
+public class UnknownNamespaceError extends SourceError {
+ private final NamespaceName unknownNamespaceName;
+
+ public UnknownNamespaceError(NamespaceName unknownNamespaceName, Source source) {
+ super("Unknown namespace: " + unknownNamespaceName, source);
+ this.unknownNamespaceName = unknownNamespaceName;
+ }
+
+ public NamespaceName unknownNamespaceName() {
+ return unknownNamespaceName;
+ }
+}