diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-26 17:48:05 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-26 17:48:05 +0000 |
| commit | 92431737b02154be7500d5df18a5b4fc883c5fd1 (patch) | |
| tree | f5f030aa52f92a98cdd64fdd2254947302c37dad /src/main/java | |
| parent | 0e0bec6bf3698801624283c44af061858561bb6f (diff) | |
Extract receiverTypeToFunctionType() that accepts type
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 27 |
1 files changed, 19 insertions, 8 deletions
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<TypedConditionalBranchNode> typeCheckConditionalBranch( |
