summary refs log blame commit diff stats
path: root/tests/effects/teffects6.nim
blob: e69fe73b66540cde474f151e38e8704e54784d9e (plain) (tree)
1
2
3
4
5
6
7




                        
                                                
                                                                                









                                                 



                                                      
 








                                                     
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 EInvalidValue:
          echo("blah")
)


proc noRaise(x: proc()) {.raises: [].} =
  # unknown call that might raise anything, but valid:
  x()

proc doRaise() {.raises: [EIO].} =
  raise newException(EIO, "IO")

proc use*() =
  noRaise(doRaise)
  # Here the compiler inferes that EIO can be raised.


use()