Make await a template (#12085)
* Make await a template * Generate await inside async/multisync
This commit is contained in:
parent
caf30e7cb5
commit
56584414f3
5 changed files with 69 additions and 134 deletions
|
|
@ -53,4 +53,13 @@ block: # nkCheckedFieldExpr
|
|||
|
||||
waitFor foo()
|
||||
|
||||
block: # 12743
|
||||
|
||||
template templ = await sleepAsync 0
|
||||
|
||||
proc prc {.async.} = templ
|
||||
|
||||
waitFor prc()
|
||||
|
||||
|
||||
echo "ok"
|
||||
|
|
|
|||
15
tests/async/tasync_noasync.nim
Normal file
15
tests/async/tasync_noasync.nim
Normal 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
|
||||
11
tests/async/tasync_nofuture.nim
Normal file
11
tests/async/tasync_nofuture.nim
Normal 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()
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue