summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java7
3 files changed, 12 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
index 78bdc97..384ef19 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -29,7 +29,9 @@ public class TypeChecker {
untypedImport.source()
);
- var importedNamespaceFields = context.namespaceFields(importedNamespace);
+ var importedNamespaceFields = context.namespaceFields(importedNamespace)
+ .orElseThrow(() -> new UnknownNamespaceError(importedNamespace, untypedImport.source()));
+
for (var importedName : untypedImport.importedNames()) {
var fieldType = importedNamespaceFields.fieldType(importedName)
.orElseThrow(() -> new UnknownNamespaceFieldError(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
index e50e424..ff6cd5e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
@@ -43,8 +43,7 @@ public class TypeCheckerGlobalContext {
this.namespaceFieldsOf.put(namespaceName, new Fields(fields));
}
- public Fields namespaceFields(NamespaceName namespaceName) {
- // TODO: better error handling
- return Optional.ofNullable(namespaceFieldsOf.get(namespaceName)).orElseThrow();
+ public Optional<Fields> namespaceFields(NamespaceName namespaceName) {
+ return Optional.ofNullable(namespaceFieldsOf.get(namespaceName));
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java
index fb06f3b..1ca4ac7 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/UnknownNamespaceError.java
@@ -5,7 +5,14 @@ import org.zwobble.hobgoblin.compiler.sources.Source;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
public class UnknownNamespaceError extends SourceError {
+ private final NamespaceName namespaceName;
+
public UnknownNamespaceError(NamespaceName namespaceName, Source source) {
super("Unknown namespace: " + namespaceName, source);
+ this.namespaceName = namespaceName;
+ }
+
+ public NamespaceName namespaceName() {
+ return namespaceName;
}
}