diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-31 11:32:28 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-31 11:32:28 +0000 |
| commit | 7627623dbf54a69a07e352f0c1515c7ff9c29524 (patch) | |
| tree | 61e2ae34eb0c41c2eff9b219e458af72bc7c6836 /src/main/java | |
| parent | 75a6e3a22c6b0ff3f8f61fb51de20a9c7f222ebe (diff) | |
Remove ReceiverType in favour of using FunctionType directly
Diffstat (limited to 'src/main/java')
3 files changed, 21 insertions, 47 deletions
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<TypeParam> typeLevelParams, FunctionType type) { - public static ReceiverType function(FunctionType type) { - return new ReceiverType(List.of(), type); - } - - public static ReceiverType genericFunction( - List<TypeParam> typeLevelParams, - FunctionType type - ) { - return new ReceiverType(typeLevelParams, type); - } - - public List<Type> positionalParams() { - return type.positionalParams(); - } - - public List<NamedParam> 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<TypeCheckArgsValues> 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<StructType>) 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<TypeParam> 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, |
