diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2018-01-10 23:11:26 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-10 23:11:26 +0000 |
commit | 2c905f5e81f29d79b26df966a413f01306775800 (patch) | |
tree | b26356fa5c3561cefd808ac0d35b2fb4c1ec07d9 /lib | |
parent | 1256f211f5c1d40b477baa70f70b7e4fe2a289a8 (diff) | |
parent | 52cc925e0e34580403b1a405ec8b4fa44c844de5 (diff) | |
download | Nim-2c905f5e81f29d79b26df966a413f01306775800.tar.gz |
Merge pull request #6962 from nim-lang/fixes/6100
Fixes #6100.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/asyncfutures.nim | 6 | ||||
-rw-r--r-- | lib/pure/asyncmacro.nim | 6 |
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 " & |