diff options
Diffstat (limited to 'src/main/java/org/zwobble')
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; } } |
