diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:48:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-19 17:49:28 +0100 |
| commit | 4f211efe89c3d86073369fc4b609ec8498aa61db (patch) | |
| tree | 5abd1d46d9b7289a01f73c13cc5c3d994d47157d /src/main/java | |
| parent | 81d6985af5c1d43a8d03af18eca3ec51242362c3 (diff) | |
Handle unknown namespace in import type checking
Diffstat (limited to 'src/main/java')
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; } } |
