From fccc76e339651d6451bb8fc7394f21eed96e3318 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 28 Sep 2023 12:07:09 +0100 Subject: Check for namespace name when defining struct --- .../java/org/shedlang/compiler/typechecker/TypeChecker.java | 6 ++++-- .../errors/CannotDefineStructOutsideOfNamespace.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/typechecker/errors/CannotDefineStructOutsideOfNamespace.java (limited to 'src/main/java') 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() { @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); + } +} -- cgit v1.2.3