simplify asyncfutures, asyncmacro (#17633)

This commit is contained in:
Timothee Cour 2021-04-14 12:22:22 -07:00 • committed by GitHub
commit d6242d7fe1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 62 additions and 92 deletions

View file

@ -189,24 +189,22 @@ proc add(callbacks: var CallbackList, function: CallbackFunc) =
last = last.next
last.next = newCallback
proc complete*[T](future: Future[T], val: T) =
## Completes `future` with value `val`.
proc completeImpl[T, U](future: Future[T], val: U, isVoid: static bool) =
#assert(not future.finished, "Future already finished, cannot finish twice.")
checkFinished(future)
assert(future.error == nil)
future.value = val
when not isVoid:
future.value = val
future.finished = true
future.callbacks.call()
when isFutureLoggingEnabled: logFutureFinish(future)
proc complete*(future: Future[void]) =
## Completes a void `future`.
#assert(not future.finished, "Future already finished, cannot finish twice.")
checkFinished(future)
assert(future.error == nil)
future.finished = true
future.callbacks.call()
when isFutureLoggingEnabled: logFutureFinish(future)
proc complete*[T](future: Future[T], val: T) =
## Completes `future` with value `val`.
completeImpl(future, val, false)
proc complete*(future: Future[void], val = Future[void].default) =
completeImpl(future, (), true)
proc complete*[T](future: FutureVar[T]) =
## Completes a `FutureVar`.