fixes #9441
This commit is contained in:
parent
467274a19a
commit
7a0191ac7e
2 changed files with 62 additions and 2 deletions
42
tests/closure/tinfer_closure_for_nestedproc.nim
Normal file
42
tests/closure/tinfer_closure_for_nestedproc.nim
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
discard """
|
||||
action: compile
|
||||
"""
|
||||
|
||||
# bug #9441
|
||||
import asyncdispatch, asyncfutures, strtabs
|
||||
|
||||
type
|
||||
Request = object
|
||||
Context = object
|
||||
position: int
|
||||
accept: bool
|
||||
headers: StringTableRef
|
||||
Handler = proc (r: ref Request, c: Context): Future[Context]
|
||||
|
||||
proc respond(req: Request): Future[void] = discard
|
||||
|
||||
proc handle*(h: Handler): auto = # (proc (req: Request): Future[void]) =
|
||||
proc server(req: Request): Future[void] {.async.} =
|
||||
let emptyCtx = Context(
|
||||
position: 0,
|
||||
accept: true,
|
||||
headers: newStringTable()
|
||||
)
|
||||
var reqHeap = new(Request)
|
||||
reqHeap[] = req
|
||||
var
|
||||
f: Future[Context]
|
||||
ctx: Context
|
||||
try:
|
||||
f = h(reqHeap, emptyCtx)
|
||||
ctx = await f
|
||||
except:
|
||||
discard
|
||||
if f.failed:
|
||||
await req.respond()
|
||||
else:
|
||||
if not ctx.accept:
|
||||
await req.respond()
|
||||
return server
|
||||
|
||||
waitFor handle(nil)(Request())
|
||||
Loading…
Add table
Add a link
Reference in a new issue