summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2018-01-10 23:11:26 +0000
committerGitHub <noreply@github.com>2018-01-10 23:11:26 +0000
commit2c905f5e81f29d79b26df966a413f01306775800 (patch)
treeb26356fa5c3561cefd808ac0d35b2fb4c1ec07d9 /lib
parent1256f211f5c1d40b477baa70f70b7e4fe2a289a8 (diff)
parent52cc925e0e34580403b1a405ec8b4fa44c844de5 (diff)
downloadNim-2c905f5e81f29d79b26df966a413f01306775800.tar.gz
Merge pull request #6962 from nim-lang/fixes/6100
Fixes #6100.
Diffstat (limited to 'lib')
-rw-r--r--lib/pure/asyncfutures.nim6
-rw-r--r--lib/pure/asyncmacro.nim6
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/pure/asyncfutures.nim b/lib/pure/asyncfutures.nim
index bcc3ab613..11461d994 100644
--- a/lib/pure/asyncfutures.nim
+++ b/lib/pure/asyncfutures.nim
@@ -324,12 +324,12 @@ proc mget*[T](future: FutureVar[T]): var T =
   ## Future has not been finished.
   result = Future[T](future).value
 
-proc finished*[T](future: Future[T] | FutureVar[T]): bool =
+proc finished*(future: FutureBase | FutureVar): bool =
   ## Determines whether ``future`` has completed.
   ##
   ## ``True`` may indicate an error or a value. Use ``failed`` to distinguish.
-  when future is FutureVar[T]:
-    result = (Future[T](future)).finished
+  when future is FutureVar:
+    result = (FutureBase(future)).finished
   else:
     result = future.finished
 
diff --git a/lib/pure/asyncmacro.nim b/lib/pure/asyncmacro.nim
index 8c679929d..f70714309 100644
--- a/lib/pure/asyncmacro.nim
+++ b/lib/pure/asyncmacro.nim
@@ -32,6 +32,12 @@ template createCb(retFutureSym, iteratorNameSym,
     try:
       if not nameIterVar.finished:
         var next = nameIterVar()
+        # Continue while the yielded future is already finished.
+        while (not next.isNil) and next.finished:
+          next = nameIterVar()
+          if nameIterVar.finished:
+            break
+
         if next == nil:
           if not retFutureSym.finished:
             let msg = "Async procedure ($1) yielded `nil`, are you await'ing a " &