aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-02 15:39:10 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-02 15:39:10 +0000
commitf1089538f04062f71f530fa27396f6f446a0fc47 (patch)
tree974fb1a56f4ee4ed5b95bc900232ee9c5e922f5d /src/main/java
parent36aad08599b78b8ec034f567ee41ec7fa3dc5a02 (diff)
Support implicit effect args
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index cff54be0..223323d3 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -401,20 +401,21 @@ public class TypeChecker {
var typeSubstitutionMap = argsResult.value().typeSubstitutionMap;
context = argsResult.context();
- var receiverHasEffects = !receiverType.effect().equals(Effects.NONE);
+ var receiverEffect = TypeSubstitution.substituteEffect(receiverType.effect(), typeSubstitutionMap);
+ var receiverHasEffects = !receiverEffect.equals(Effects.NONE);
if (receiverHasEffects && !untyped.hasEffects()) {
- throw new CallIsMissingEffectsError(receiverType.effect(), untyped.source());
+ throw new CallIsMissingEffectsError(receiverEffect, untyped.source());
}
if (!receiverHasEffects && untyped.hasEffects()) {
throw new FunctionHasNoEffectsError(untyped.source());
}
- if (!isSubEffect(receiverType.effect(), context.effect(), context.toTypeInfos())) {
+ if (!isSubEffect(receiverEffect, context.effect(), context.toTypeInfos())) {
throw new UnexpectedEffectError(
context.effect(),
- receiverType.effect(),
+ receiverEffect,
untyped.source()
);
}