diff options
-rw-r--r-- | tests/closure/tforum.nim | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/closure/tforum.nim b/tests/closure/tforum.nim new file mode 100644 index 000000000..4f6a16ff7 --- /dev/null +++ b/tests/closure/tforum.nim @@ -0,0 +1,44 @@ +discard """ + output: '''asdas +processClient end +false +''' +""" + +type + PAsyncHttpServer = ref object + value: string + PFutureBase = ref object + callback: proc () {.closure.} + value: string + failed: bool + +proc accept(server: PAsyncHttpServer): PFutureBase = + new(result) + result.callback = proc () = + discard + server.value = "hahaha" + +proc processClient(): PFutureBase = + new(result) + +proc serve(server: PAsyncHttpServer): PFutureBase = + iterator serveIter(): PFutureBase {.closure.} = + echo server.value + while true: + var acceptAddrFut = server.accept() + yield acceptAddrFut + var fut = acceptAddrFut.value + + var f = processClient() + f.callback = + proc () = + echo("processClient end") + echo(f.failed) + yield f + var x = serveIter + for i in 0 .. 1: + result = x() + result.callback() + +discard serve(PAsyncHttpServer(value: "asdas")) |