12345678910111213141516171819202122232425262728293031323334353637 |
- discard """
- action: compile
- """
- # XXX: it is not actually tested if the effects are inferred
- type
- PMenu = ref object
- PMenuItem = ref object
- proc createMenuItem*(menu: PMenu, label: string,
- action: proc (i: PMenuItem, p: pointer) {.cdecl.}) = discard
- var s: PMenu
- createMenuItem(s, "Go to definition...",
- proc (i: PMenuItem, p: pointer) {.cdecl.} =
- try:
- echo(i.repr)
- except ValueError:
- echo("blah")
- )
- proc noRaise(x: proc()) {.raises: [].} =
- # unknown call that might raise anything, but valid:
- x()
- proc doRaise() {.raises: [IoError].} =
- raise newException(IoError, "IO")
- proc use*() =
- noRaise(doRaise)
- # Here the compiler inferes that EIO can be raised.
- use()
|