tcast.nim 510 B

123456789101112131415161718192021222324
  1. discard """
  2. output: '''
  3. Hello World
  4. Hello World'''
  5. """
  6. type MyProc = proc() {.cdecl.}
  7. type MyProc2 = proc() {.nimcall.}
  8. type MyProc3 = proc() #{.closure.} is implicit
  9. proc testProc() = echo "Hello World"
  10. proc callPointer(p: pointer) =
  11. # can cast to proc(){.cdecl.}
  12. let ffunc0 = cast[MyProc](p)
  13. # can cast to proc(){.nimcall.}
  14. let ffunc1 = cast[MyProc2](p)
  15. # cannot cast to proc(){.closure.}
  16. doAssert(not compiles(cast[MyProc3](p)))
  17. ffunc0()
  18. ffunc1()
  19. callPointer(cast[pointer](testProc))