aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/PartialFunctionSignature.java9
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java5
2 files changed, 12 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/PartialFunctionSignature.java b/src/main/java/org/shedlang/compiler/typechecker/PartialFunctionSignature.java
index 68541f64..c0501856 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/PartialFunctionSignature.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/PartialFunctionSignature.java
@@ -24,6 +24,15 @@ public record PartialFunctionSignature(
return Lists.concat(positionalParams, namedParams);
}
+ public PartialFunctionSignature withEffect(Effect effect) {
+ return new PartialFunctionSignature(
+ this.positionalParams,
+ this.namedParams,
+ effect,
+ this.returnType
+ );
+ }
+
public static Builder builder() {
return new Builder(
P.vector(),
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 90d68238..8dbf0927 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -1641,7 +1641,7 @@ public class TypeChecker {
context = typedHandlerFieldResult.context();
checkIsSubType(
- typedHandlerField.type(),
+ typedHandlerField.type().withEffect(Effects.NONE),
effectFieldType,
untypedHandlerField.source(),
context
@@ -1672,7 +1672,8 @@ public class TypeChecker {
) {
var typedSignature = typeCheckFunctionSignature(untyped.signature(), context);
- var partialSignature = inferFunctionPartialSignature(typedSignature, Optional.of(effectFieldType));
+ var partialSignature = inferFunctionPartialSignature(typedSignature, Optional.of(effectFieldType))
+ .withEffect(context.effect());
// TODO: don't allow returns, allow resumes
var typedBodyResult = typeCheckFunctionBody(