summary refs log tree commit diff stats
path: root/tests/closure/tforum.nim
blob: 4f6a16ff7f557f4a144ac1513f0941e9101d84ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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"))