From 8d9a828fcdaa35b8826c8d3988a8927ea916555c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Jun 2023 11:20:32 +0100 Subject: Check named arg type matched named param type --- .../java/org/shedlang/compiler/typechecker/TypeChecker.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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()); -- cgit v1.2.3