diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:03:46 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-02 14:03:46 +0100 |
| commit | a17c1e5fcbb159d9c6ef84058d8d10ae9567ffc8 (patch) | |
| tree | 27bf0c59549afbd748dfc75bb3a6bcc7ecff46ac /src/main/java | |
| parent | 65342425fe891ad54b997d8228d72770d02c2441 (diff) | |
Check number of type-level args
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 11 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/WrongNumberOfTypeLevelArgsError.java | 23 |
2 files changed, 32 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 a12677e..2d496e5 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -393,14 +393,21 @@ public class TypeChecker { TypeCheckerNamespaceContext context ) { var typedReceiver = typeCheckTypeLevelExpression(untyped.receiver(), context); + // TODO: check this properly var receiver = (TypeConstructor<SimpleNativeType>) typedReceiver.value(); + if (untyped.args().size() != receiver.params().size()) { + throw new WrongNumberOfTypeLevelArgsError( + receiver.params().size(), + untyped.args().size(), + untyped.source() + ); + } + var args = untyped.args().stream() .map(untypedArg -> typeCheckMetaType(untypedArg, context).value()) .toList(); - // TODO: check number of args - var constructedType = new ConstructedNativeType(receiver, args); return new TypedConstructedTypeNode( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/WrongNumberOfTypeLevelArgsError.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/WrongNumberOfTypeLevelArgsError.java new file mode 100644 index 0000000..86f57f2 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/errors/WrongNumberOfTypeLevelArgsError.java @@ -0,0 +1,23 @@ +package org.zwobble.hobgoblin.compiler.typechecker.errors; + +import org.zwobble.hobgoblin.compiler.errors.SourceError; +import org.zwobble.hobgoblin.compiler.sources.Source; + +public class WrongNumberOfTypeLevelArgsError extends SourceError { + private final int expectedArgCount; + private final int actualArgCount; + + public WrongNumberOfTypeLevelArgsError(int expectedArgCount, int actualArgCount, Source source) { + super("expected " + expectedArgCount + " type-level args, but got " + actualArgCount, source); + this.expectedArgCount = expectedArgCount; + this.actualArgCount = actualArgCount; + } + + public int expectedArgCount() { + return expectedArgCount; + } + + public int actualArgCount() { + return actualArgCount; + } +} |
