diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 11 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/UnexpectedTypeError.java (renamed from src/main/java/org/shedlang/compiler/typechecker/UnexpectedTypeError.java) | 2 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/UnknownVariableError.java (renamed from src/main/java/org/shedlang/compiler/typechecker/UnknownVariableError.java) | 2 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/errors/WrongNumberOfPositionalArgs.java | 23 |
4 files changed, 36 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index e89bdd61..fee93041 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -2,6 +2,9 @@ package org.shedlang.compiler.typechecker; import org.shedlang.compiler.ast.typed.*; import org.shedlang.compiler.ast.untyped.*; +import org.shedlang.compiler.typechecker.errors.UnexpectedTypeError; +import org.shedlang.compiler.typechecker.errors.UnknownVariableError; +import org.shedlang.compiler.typechecker.errors.WrongNumberOfPositionalArgs; import org.shedlang.compiler.typechecker.typesets.TypeSets; import org.shedlang.compiler.types.FunctionType; import org.shedlang.compiler.types.Type; @@ -29,6 +32,14 @@ public class TypeChecker { TypeCheckerContext context, FunctionType receiverType ) { + if (args.positional().size() != receiverType.positionalParams().size()) { + throw new WrongNumberOfPositionalArgs( + receiverType.positionalParams().size(), + args.positional().size(), + args.source() + ); + } + var typedPositionalArgs = args.positional().stream() .map(arg -> typeCheckExpression(arg, context)) .toList(); diff --git a/src/main/java/org/shedlang/compiler/typechecker/UnexpectedTypeError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/UnexpectedTypeError.java index 51cc6652..02355f2a 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/UnexpectedTypeError.java +++ b/src/main/java/org/shedlang/compiler/typechecker/errors/UnexpectedTypeError.java @@ -1,4 +1,4 @@ -package org.shedlang.compiler.typechecker; +package org.shedlang.compiler.typechecker.errors; import org.shedlang.compiler.errors.SourceError; import org.shedlang.compiler.sources.Source; diff --git a/src/main/java/org/shedlang/compiler/typechecker/UnknownVariableError.java b/src/main/java/org/shedlang/compiler/typechecker/errors/UnknownVariableError.java index 91ab3fae..bc85c18c 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/UnknownVariableError.java +++ b/src/main/java/org/shedlang/compiler/typechecker/errors/UnknownVariableError.java @@ -1,4 +1,4 @@ -package org.shedlang.compiler.typechecker; +package org.shedlang.compiler.typechecker.errors; import org.shedlang.compiler.errors.SourceError; import org.shedlang.compiler.sources.Source; diff --git a/src/main/java/org/shedlang/compiler/typechecker/errors/WrongNumberOfPositionalArgs.java b/src/main/java/org/shedlang/compiler/typechecker/errors/WrongNumberOfPositionalArgs.java new file mode 100644 index 00000000..723c3f7d --- /dev/null +++ b/src/main/java/org/shedlang/compiler/typechecker/errors/WrongNumberOfPositionalArgs.java @@ -0,0 +1,23 @@ +package org.shedlang.compiler.typechecker.errors; + +import org.shedlang.compiler.errors.SourceError; +import org.shedlang.compiler.sources.Source; + +public class WrongNumberOfPositionalArgs extends SourceError { + private final int expected; + private final int actual; + + public WrongNumberOfPositionalArgs(int expected, int actual, Source source) { + super("Expected " + expected + " positional arguments but got " + actual, source); + this.expected = expected; + this.actual = actual; + } + + public int expected() { + return expected; + } + + public int actual() { + return actual; + } +} |
