From 92431737b02154be7500d5df18a5b4fc883c5fd1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 26 Dec 2023 17:48:05 +0000 Subject: Extract receiverTypeToFunctionType() that accepts type --- .../shedlang/compiler/typechecker/TypeChecker.java | 27 +++++++++++++++------- 1 file changed, 19 insertions(+), 8 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 f42a4030..2eef55f1 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -363,15 +363,27 @@ public class TypeChecker { TypedExpressionNode typedReceiver, TypeCheckerContext context ) { - if (typedReceiver.type() instanceof FunctionType receiverType) { - return receiverType; + return receiverTypeToFunctionType( + typedReceiver.type(), + typedReceiver.source(), + context + ); + } + + private static FunctionType receiverTypeToFunctionType( + Type receiverType, + Source receiverSource, + TypeCheckerContext context + ) { + if (receiverType instanceof FunctionType receiverTypeFunction) { + return receiverTypeFunction; } if ( - typedReceiver.type() instanceof TypeLevelValueType typeLevelValueType && - typeLevelValueType.value() instanceof StructType structType + receiverType instanceof TypeLevelValueType typeLevelValueType && + typeLevelValueType.value() instanceof StructType structType ) { - var structTypeInfo = context.structTypeInfo(structType, typedReceiver.source()); + var structTypeInfo = context.structTypeInfo(structType, receiverSource); var namedParams = structTypeInfo.fields().stream() .map(field -> new NamedParam(field.name(), field.type())) @@ -387,10 +399,9 @@ public class TypeChecker { throw new UnexpectedTypeError( TypeSets.FUNCTION, - typedReceiver.type(), - typedReceiver.source() + receiverType, + receiverSource ); - } private static TypeCheckerResult typeCheckConditionalBranch( -- cgit v1.2.3