summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-25 18:17:19 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-26 10:56:49 +0100
commitad3e527a337ba2c02eac1aafdc17124c76cc1b92 (patch)
treeda177b3bd140971fd0e9c70a55630ce0a512dde4 /src/main/java
parentbe132b1abe3ef9d1663f15799b971d5cfee3f469 (diff)
Throw better error when value is not type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java9
2 files changed, 8 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java
index b5dbd5d..532d8de 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedTypeLevelExpressionNode.java
@@ -10,6 +10,8 @@ public sealed interface UntypedTypeLevelExpressionNode permits org.zwobble.hobgo
// Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode.Builder body
}
+ public org.zwobble.hobgoblin.compiler.sources.Source source();
+
// Custom area start: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode body
// Custom area end: org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode body
}
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 5003e3a..c291aaf 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -258,7 +258,7 @@ public class TypeChecker {
);
}
- private static TypedTypeLevelExpressionNode<Type> typeCheckMetaType(
+ static TypedTypeLevelExpressionNode<Type> typeCheckMetaType(
UntypedTypeLevelExpressionNode untyped,
TypeCheckerNamespaceContext context
) {
@@ -266,8 +266,11 @@ public class TypeChecker {
if (typed.value() instanceof Type) {
return (TypedTypeLevelExpressionNode<Type>) typed;
} else {
- // TODO: better error
- throw new RuntimeException("not a metatype");
+ throw new UnexpectedTypeError(
+ new TypeSet.MetaType(),
+ new TypeLevelValueType(typed.value()),
+ untyped.source()
+ );
}
}