mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-30 19:23:57 +00:00
Make await a template (#12085)
* Make await a template * Generate await inside async/multisync
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user