mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-13 06:43:52 +00:00
Fix const in async regression (#21898)
* Add test case for a const being used inside an async proc * Use `typeof` to get the type of the block instead of overloaded templates This removes the problem with the symbol having different types I am unsure why I didn't use this in the first place. IIRC I had problems with `typeof` when I first tried to use it in the original implementation
This commit is contained in:
@@ -221,13 +221,11 @@ proc asyncSingleProc(prc: NimNode): NimNode =
|
||||
procBody = newStmtList()
|
||||
let resultIdent = ident"result"
|
||||
procBody.add quote do:
|
||||
template nimAsyncDispatchSetResult(x: `subRetType`) {.used.} =
|
||||
# If the proc has implicit return then this will get called
|
||||
`resultIdent` = x
|
||||
template nimAsyncDispatchSetResult(x: untyped) {.used.} =
|
||||
# If the proc doesn't have implicit return then this will get called
|
||||
x
|
||||
procBody.add newCall(ident"nimAsyncDispatchSetResult", blockStmt)
|
||||
# Check whether there is an implicit return
|
||||
when typeof(`blockStmt`) is void:
|
||||
`blockStmt`
|
||||
else:
|
||||
`resultIdent` = `blockStmt`
|
||||
procBody.add(createFutureVarCompletions(futureVarIdents, nil))
|
||||
procBody.insert(0): quote do:
|
||||
{.push warning[resultshadowed]: off.}
|
||||
|
||||
13
tests/async/t21893.nim
Normal file
13
tests/async/t21893.nim
Normal file
@@ -0,0 +1,13 @@
|
||||
discard """
|
||||
output: "@[97]\ntrue"
|
||||
"""
|
||||
|
||||
import asyncdispatch
|
||||
|
||||
proc test(): Future[bool] {.async.} =
|
||||
const S4 = @[byte('a')]
|
||||
echo S4
|
||||
return true
|
||||
|
||||
echo waitFor test()
|
||||
|
||||
Reference in New Issue
Block a user