diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 6 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineStructOutsideOfNamespace.java | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 54e9d9b9..ad3ed297 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -831,8 +831,10 @@ public class TypeChecker { return new TypeCheckSteps<TypedStructDefinitionNode>() { @Override public TypeCheckerContext declareTypes(TypeCheckerContext context) { - // TODO: better error - var type = new StructType(context.namespaceName().orElseThrow(), untyped.name()); + var namespaceName = context.namespaceName() + .orElseThrow(() -> new CannotDefineStructOutsideOfNamespace(untyped.source())); + + var type = new StructType(namespaceName, untyped.name()); context = context.addLexicalState(untyped.name(), type); diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineStructOutsideOfNamespace.java b/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineStructOutsideOfNamespace.java new file mode 100644 index 00000000..6e8810eb --- /dev/null +++ b/src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineStructOutsideOfNamespace.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.typechecker.errors; + +import org.shedlang.compiler.errors.InternalCompilerError; +import org.shedlang.compiler.sources.Source; + +public class CannotDefineStructOutsideOfNamespace extends InternalCompilerError { + public CannotDefineStructOutsideOfNamespace(Source source) { + super("Cannot define struct outside of namespace", source); + } +} |
