From 7627623dbf54a69a07e352f0c1515c7ff9c29524 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Dec 2023 11:32:28 +0000 Subject: Remove ReceiverType in favour of using FunctionType directly --- .../compiler/typechecker/ReceiverType.java | 34 ---------------------- .../shedlang/compiler/typechecker/TypeChecker.java | 24 +++++++-------- .../org/shedlang/compiler/types/FunctionType.java | 10 +++++++ 3 files changed, 21 insertions(+), 47 deletions(-) delete mode 100644 src/main/java/org/shedlang/compiler/typechecker/ReceiverType.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/typechecker/ReceiverType.java b/src/main/java/org/shedlang/compiler/typechecker/ReceiverType.java deleted file mode 100644 index 5bd3645b..00000000 --- a/src/main/java/org/shedlang/compiler/typechecker/ReceiverType.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.shedlang.compiler.typechecker; - -import org.shedlang.compiler.types.*; - -import java.util.List; - -public record ReceiverType(List typeLevelParams, FunctionType type) { - public static ReceiverType function(FunctionType type) { - return new ReceiverType(List.of(), type); - } - - public static ReceiverType genericFunction( - List typeLevelParams, - FunctionType type - ) { - return new ReceiverType(typeLevelParams, type); - } - - public List positionalParams() { - return type.positionalParams(); - } - - public List namedParams() { - return type.namedParams(); - } - - public Effect effect() { - return type.effect(); - } - - public Type returnType() { - return type.returnType(); - } -} diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index f47e1273..b2cd1a7a 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -68,10 +68,10 @@ public class TypeChecker { private static TypeCheckerResult typeCheckArgs( UntypedArgsNode args, TypeCheckerContext context, - ReceiverType receiverType + FunctionType receiverType ) { var constraints = TypeCheckerSubTyping.constraints( - receiverType.typeLevelParams(), + receiverType.typeLevelParams().orElse(List.of()), context ); @@ -402,7 +402,7 @@ public class TypeChecker { )); } - private static ReceiverType typeCheckCallReceiverType( + private static FunctionType typeCheckCallReceiverType( TypedExpressionNode typedReceiver, TypeCheckerContext context ) { @@ -413,13 +413,13 @@ public class TypeChecker { ); } - private static ReceiverType typeCheckCallReceiverType( + private static FunctionType typeCheckCallReceiverType( Type receiverType, Source receiverSource, TypeCheckerContext context ) { if (receiverType instanceof FunctionType receiverTypeFunction) { - return ReceiverType.function(receiverTypeFunction); + return receiverTypeFunction; } if ( @@ -427,10 +427,10 @@ public class TypeChecker { typeLevelValueType.value() instanceof StructType structType ) { var structTypeInfo = context.structTypeInfo(structType, receiverSource); - return ReceiverType.function(receiverStructTypeInfoToFunctionType( + return receiverStructTypeInfoToFunctionType( structType, structTypeInfo - )); + ); } if ( @@ -440,10 +440,10 @@ public class TypeChecker { ) { // TODO: make specific constructed types to avoid generic casting? var structTypeInfo = context.structTypeInfo((ConstructedType) constructedType, receiverSource); - return ReceiverType.function(receiverStructTypeInfoToFunctionType( + return receiverStructTypeInfoToFunctionType( constructedType, structTypeInfo - )); + ); } if ( @@ -459,10 +459,8 @@ public class TypeChecker { typeConstructor, typeConstructor.params() ); - return ReceiverType.genericFunction( - typeConstructor.params(), - receiverStructTypeInfoToFunctionType(constructedType, structTypeInfo) - ); + return receiverStructTypeInfoToFunctionType(constructedType, structTypeInfo) + .withTypeLevelParams(typeConstructor.params()); } throw new UnexpectedTypeError( diff --git a/src/main/java/org/shedlang/compiler/types/FunctionType.java b/src/main/java/org/shedlang/compiler/types/FunctionType.java index 2c6b4841..aad68885 100644 --- a/src/main/java/org/shedlang/compiler/types/FunctionType.java +++ b/src/main/java/org/shedlang/compiler/types/FunctionType.java @@ -54,6 +54,16 @@ public record FunctionType( return description.toString(); } + public FunctionType withTypeLevelParams(List typeLevelParams) { + return new FunctionType( + Optional.of(typeLevelParams), + this.positionalParams, + this.namedParams, + this.effect, + this.returnType + ); + } + public FunctionType withEffect(Effect effect) { return new FunctionType( this.typeLevelParams, -- cgit v1.2.3