diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-03-02 15:39:10 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-03-02 15:39:10 +0000 |
| commit | f1089538f04062f71f530fa27396f6f446a0fc47 (patch) | |
| tree | 974fb1a56f4ee4ed5b95bc900232ee9c5e922f5d /src/main/java | |
| parent | 36aad08599b78b8ec034f567ee41ec7fa3dc5a02 (diff) | |
Support implicit effect args
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 9 |
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() ); } |
