diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-28 12:07:09 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-28 12:07:09 +0100 |
| commit | fccc76e339651d6451bb8fc7394f21eed96e3318 (patch) | |
| tree | 64353f2cfa78b8a7bc858a63b43a915f42e758f4 /src/main/java | |
| parent | 2f8e32636912e23552f5b43a2c84109b77fe7a92 (diff) | |
Check for namespace name when defining struct
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); + } +} |
