diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:34:42 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:34:42 +0100 |
| commit | 6fbb580910e954ca14ece69199a75f1f483880e7 (patch) | |
| tree | 963917a0bbb79483a7e7c18882bb81b5514eef68 /src/main/java | |
| parent | ff49a4cd2231787867b4aafc95bd5705057bfcc3 (diff) | |
Check that receiver of type-level args is type constructor
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 10 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java | 7 |
2 files changed, 15 insertions, 2 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 9429313..eb47870 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -393,8 +393,14 @@ public class TypeChecker { TypeCheckerNamespaceContext context ) { var typedReceiver = typeCheckTypeLevelExpression(untyped.receiver(), context); - // TODO: check this properly - var receiver = (TypeConstructor<?>) typedReceiver.value(); + + if (!(typedReceiver.value() instanceof TypeConstructor<?> receiver)) { + throw new UnexpectedTypeError( + new TypeSet.TypeConstructor(), + new TypeLevelValueType(typedReceiver.value()), + untyped.receiver().source() + ); + } if (untyped.args().size() != receiver.params().size()) { throw new WrongNumberOfTypeLevelArgsError( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java index f587897..c3896d9 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java @@ -16,4 +16,11 @@ public sealed interface TypeSet { return "metatype"; } } + + record TypeConstructor() implements TypeSet { + @Override + public String describe() { + return "type constructor"; + } + } } |
