diff options
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() ); } |
