summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2018-09-22 20:18:13 +0200
committerGitHub <noreply@github.com>2018-09-22 20:18:13 +0200
commita2587aad0d327f91600fee22399c2e53e9a923cf (patch)
treeb2a756263fc1d3d63a8529cc9825a378282e1245 /tests
parentb2b9af6a5083203d37ec3379d841ec8dc08e6674 (diff)
parent75a981cf80cb9f4cdff83a6ff525f6428b3ab5f1 (diff)
downloadNim-a2587aad0d327f91600fee22399c2e53e9a923cf.tar.gz
Merge pull request #9035 from LemonBoy/fix-3075
Skip nested procedures in .async. macro
Diffstat (limited to 'tests')
-rw-r--r--tests/async/t3075.nim29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/async/t3075.nim b/tests/async/t3075.nim
new file mode 100644
index 000000000..d26aa0a36
--- /dev/null
+++ b/tests/async/t3075.nim
@@ -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)