summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-02 14:34:42 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-02 14:34:42 +0100
commit6fbb580910e954ca14ece69199a75f1f483880e7 (patch)
tree963917a0bbb79483a7e7c18882bb81b5514eef68 /src/main/java
parentff49a4cd2231787867b4aafc95bd5705057bfcc3 (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.java10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/TypeSet.java7
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";
+ }
+ }
}