Merge pull request #9035 from LemonBoy/fix-3075
Skip nested procedures in .async. macro
This commit is contained in:
commit
a2587aad0d
2 changed files with 32 additions and 0 deletions
|
|
@ -177,6 +177,9 @@ proc processBody(node, retFutureSym: NimNode,
|
|||
var newDiscard = node
|
||||
result.createVar("futureDiscard_" & $toStrLit(node[0][1]), node[0][1],
|
||||
newDiscard[0], newDiscard, node)
|
||||
of RoutineNodes:
|
||||
# skip all the nested procedure definitions
|
||||
return
|
||||
else: discard
|
||||
|
||||
for i in 0 ..< result.len:
|
||||
|
|
|
|||
29
tests/async/t3075.nim
Normal file
29
tests/async/t3075.nim
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue