strict effects (#18777)
* fixes #17369 * megatest is green for --cpu:arm64 * docgen output includes more tags/raises * implemented 'effectsOf' * algorithm.nim: uses new effectsOf annotation * closes #18376 * closes #17475 * closes #13905 * allow effectsOf: [a, b] * added a test case * parameters that are not ours cannot be declared as .effectsOf * documentation * manual: added the 'sort' example * bootstrap with the new better options
This commit is contained in:
parent
72fa5833ad
commit
e0ef859130
35 changed files with 482 additions and 203 deletions
27
tests/effects/tstrict_effects.nim
Normal file
27
tests/effects/tstrict_effects.nim
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
discard """
|
||||
errormsg: "s1 can raise an unlisted exception: CatchableError"
|
||||
line: 27
|
||||
"""
|
||||
|
||||
{.push warningAsError[Effect]: on.}
|
||||
{.experimental: "strictEffects".}
|
||||
|
||||
# bug #18376
|
||||
|
||||
{.push raises: [Defect].}
|
||||
type Call = proc (x: int): int {.gcsafe, raises: [Defect, CatchableError].}
|
||||
|
||||
type Bar* = object
|
||||
foo*: Call
|
||||
|
||||
proc passOn*(x: Call) = discard
|
||||
|
||||
proc barCal(b: var Bar, s: string, s1: Call) =
|
||||
#compiler complains that his line can throw CatchableError
|
||||
passOn s1
|
||||
|
||||
|
||||
proc passOnB*(x: Call) {.effectsOf: x.} = discard
|
||||
|
||||
proc barCal2(b: var Bar, s: string, s1: Call) =
|
||||
passOnB s1
|
||||
Loading…
Add table
Add a link
Reference in a new issue