Fix void async in templates (#17562)

* Fix https://github.com/nim-lang/Nim/issues/16159
* Add test for async in template
* Shorten the expression
* Even shorter

Co-authored-by: Clyybber <darkmine956@gmail.com>
This commit is contained in:
Ardek Romak 2021-03-30 09:07:45 +03:00 • committed by GitHub
commit 9e88425d7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 2 deletions

View file

@ -184,7 +184,8 @@ proc asyncSingleProc(prc: NimNode): NimNode =
verifyReturnType(repr(returnType), returnType) verifyReturnType(repr(returnType), returnType)
let subtypeIsVoid = returnType.kind == nnkEmpty or let subtypeIsVoid = returnType.kind == nnkEmpty or
(baseType.kind == nnkIdent and returnType[1].eqIdent("void")) (baseType.kind in {nnkIdent, nnkSym} and
baseType.eqIdent("void"))
let futureVarIdents = getFutureVarIdents(prc.params) let futureVarIdents = getFutureVarIdents(prc.params)

View file

@ -0,0 +1,12 @@
discard """
output: 42
"""
import asyncdispatch
template foo() =
proc temp(): Future[int] {.async.} = return 42
proc tempVoid(): Future[void] {.async.} = echo await temp()
foo()
waitFor tempVoid()