diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 13 |
1 files changed, 11 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 ebfdc0d5..83285f07 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -10,7 +10,7 @@ public class TypeChecker { private TypeChecker() { } - private static void checkIsSubType(TypedExpressionNode expression, Type expectedType, TypeCheckerContext context) { + private static void checkExpressionType(TypedExpressionNode expression, Type expectedType, TypeCheckerContext context) { if (!isSubType(expression.type(), expectedType, context)) { throw new UnexpectedTypeError( TypeSets.type(expectedType), @@ -45,7 +45,16 @@ public class TypeChecker { var typedArg = typedPositionalArgs.get(i); var paramType = receiverType.positionalParams().get(i); - checkIsSubType(typedArg, paramType, context); + checkExpressionType(typedArg, paramType, context); + } + + for (var typedArg : typedNamedArgs) { + var param = receiverType.namedParams().stream() + .filter(namedParam -> namedParam.name().equals(typedArg.name())) + .findFirst() + .orElseThrow(); + + checkExpressionType(typedArg.expression(), param.type(), context); } return new TypedArgsNode(typedPositionalArgs, typedNamedArgs, args.source()); |
