better error messages for Nim's effect system

This commit is contained in:
Araq 2020-03-22 19:32:37 +01:00 • committed by Andreas Rumpf
commit ef2566218e
4 changed files with 46 additions and 21 deletions

View file

@ -136,6 +136,23 @@ proc effectProblem(f, a: PType; result: var string) =
elif tfNoSideEffect in f.flags and tfNoSideEffect notin a.flags:
result.add "\n This expression can have side effects. Annotate the " &
"proc with {.noSideEffect.} to get extended error information."
else:
case compatibleEffects(f, a)
of efCompat: discard
of efRaisesDiffer:
result.add "\n The `.raises` requirements differ."
of efRaisesUnknown:
result.add "\n The `.raises` requirements differ. Annotate the " &
"proc with {.raises: [].} to get extended error information."
of efTagsDiffer:
result.add "\n The `.tags` requirements differ."
of efTagsUnknown:
result.add "\n The `.tags` requirements differ. Annotate the " &
"proc with {.tags: [].} to get extended error information."
of efLockLevelsDiffer:
result.add "\n The `.locks` requirements differ. Annotate the " &
"proc with {.locks: 0.} to get extended error information."
proc renderNotLValue(n: PNode): string =
result = $n