Make await a template (#12085)

* Make await a template
* Generate await inside async/multisync
This commit is contained in:
Alexander Ivanov
2020-04-25 21:27:03 +03:00
committed by GitHub
parent caf30e7cb5
commit 56584414f3
5 changed files with 69 additions and 134 deletions

View File

@@ -53,4 +53,13 @@ block: # nkCheckedFieldExpr
waitFor foo()
block: # 12743
template templ = await sleepAsync 0
proc prc {.async.} = templ
waitFor prc()
echo "ok"

View File

@@ -0,0 +1,15 @@
discard """
errormsg: "undeclared identifier: 'await'"
cmd: "nim c $file"
file: "tasync_noasync.nim"
"""
import async
proc a {.async.} =
discard
await a()
# if we overload a fallback handler to get
# await only available within {.async.}
# we would need `{.dirty.}` templates for await

View File

@@ -0,0 +1,11 @@
discard """
errormsg: "await expects Future[T], got int"
cmd: "nim c $file"
file: "asyncmacro.nim"
"""
import async
proc a {.async.} =
await 0
waitFor a()

View File

@@ -82,7 +82,7 @@ Async traceback:
asyncmacro\.nim\(\d+?\)\s+?a
asyncmacro\.nim\(\d+?\)\s+?aNimAsyncContinue
## Resumes an async procedure
tasync_traceback\.nim\(\d+?\)\s+?aIter
asyncmacro\.nim\(\d+?\)\s+?aIter
asyncfutures\.nim\(\d+?\)\s+?read
\]#
Exception message: b failure
@@ -110,13 +110,15 @@ Async traceback:
## Executes pending callbacks
asyncmacro\.nim\(\d+?\)\s+?fooNimAsyncContinue
## Resumes an async procedure
tasync_traceback\.nim\(\d+?\)\s+?fooIter
asyncmacro\.nim\(\d+?\)\s+?fooIter
asyncfutures\.nim\(\d+?\)\s+?read
\]#
Exception message: bar failure
Exception type:
"""
# TODO: is asyncmacro good enough location for fooIter traceback/debugging? just put the callsite info for all?
let resLines = splitLines(result.strip)
let expLines = splitLines(expected.strip)