aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-31 11:32:28 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-31 11:32:28 +0000
commit7627623dbf54a69a07e352f0c1515c7ff9c29524 (patch)
tree61e2ae34eb0c41c2eff9b219e458af72bc7c6836 /src/main/java
parent75a6e3a22c6b0ff3f8f61fb51de20a9c7f222ebe (diff)
Remove ReceiverType in favour of using FunctionType directly
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/ReceiverType.java34
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java24
-rw-r--r--src/main/java/org/shedlang/compiler/types/FunctionType.java10
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,