summary refs log blame commit diff stats
path: root/tests/closure/tforum.nim
blob: 4f6a16ff7f557f4a144ac1513f0941e9101d84ae (plain) (tree)











































                                                    
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"))