Skip nested procedures in .async. macro

Fixes #3075
This commit is contained in:
LemonBoy 2018-09-22 15:59:47 +02:00
commit 75a981cf80
2 changed files with 32 additions and 0 deletions

29
tests/async/t3075.nim Normal file
View file

@ -0,0 +1,29 @@
import asyncnet, asyncdispatch, strtabs
type
WebSocketCallback = proc (client: WebSocket, message: WebSocketMessage) {.closure, gcsafe.}
WebSocketRecvClosure = proc (ws: WebSocket): Future[string] {.gcsafe.}
WebSocketMessage = ref object
msg: string
WebSocket = ref object
socket: AsyncSocket
header: StringTableRef
onOpen: WebSocketCallback
onMessage: WebSocketCallback
onClose: WebSocketCallback
proc recv(ws: WebSocket, p: WebSocketRecvClosure): Future[string] {.async.}=
if not ws.socket.isClosed():
result = await ws.p()
if result == "":
ws.socket.close()
if ws.onClose != nil:
ws.onClose(ws, nil)
return result
proc reсvSize(ws: WebSocket, size: int): Future[string] {.async.} =
proc recvSizeClosure(ws: WebSocket): Future[string] {.async.} =
return await ws.socket.recv(size)
return await ws.recv(recvSizeClosure)