summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorEXetoC <exetoc@gmail.com>2014-05-04 01:52:42 +0200
committerEXetoC <exetoc@gmail.com>2014-05-04 01:52:42 +0200
commitb1c865a656d6ee422f7d841a1e881874766a2b77 (patch)
tree7b530f2b809db1d11693817f4ba47992fb3e6c8b
parent05712fe8053420ecf481757e529a7ef2f32fb75c (diff)
downloadNim-b1c865a656d6ee422f7d841a1e881874766a2b77.tar.gz
Fix #1170.
-rw-r--r--lib/pure/asyncdispatch.nim3
-rw-r--r--tests/async/tasyncdiscard.nim39
2 files changed, 41 insertions, 1 deletions
diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim
index fe9c16308..fcf947831 100644
--- a/lib/pure/asyncdispatch.nim
+++ b/lib/pure/asyncdispatch.nim
@@ -869,7 +869,8 @@ proc processBody(node, retFutureSym: PNimrodNode,
     else: discard
   of nnkDiscardStmt:
     # discard await x
-    if node[0][0].kind == nnkIdent and node[0][0].ident == !"await":
+    if node[0].kind != nnkEmpty and node[0][0].kind == nnkIdent and
+          node[0][0].ident == !"await":
       var newDiscard = node
       createVar("futureDiscard_" & $toStrLit(node[0][1]), node[0][1],
                 newDiscard[0], newDiscard)
diff --git a/tests/async/tasyncdiscard.nim b/tests/async/tasyncdiscard.nim
new file mode 100644
index 000000000..48d8a8c4d
--- /dev/null
+++ b/tests/async/tasyncdiscard.nim
@@ -0,0 +1,39 @@
+discard """
+  output: '''
+1
+2
+3
+4
+1
+2
+1
+6
+'''
+"""
+import asyncio, asyncdispatch, asyncnet
+
+proc main {.async.} =
+  proc f: PFuture[int] {.async.} =
+    discard
+    echo 1
+    discard
+    result = 2
+    discard
+
+  let x = await f()
+  echo x
+  echo 3
+
+  proc g: PFuture[int] {.async.} =
+    discard
+    echo 4
+    discard
+    result = 6
+    discard
+    echo await f()
+    discard await f()
+
+  discard await g()
+  echo 6
+
+main()