diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 11:20:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 11:20:32 +0100 |
| commit | 8d9a828fcdaa35b8826c8d3988a8927ea916555c (patch) | |
| tree | 01643bb90cded539a3dfa2496c1a946de39a4fab /src/main/java | |
| parent | 646c5b9673ffbbc691db246ca8a253cb3e6ea8a1 (diff) | |
Check named arg type matched named param type
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()); |
