fix #13899 defer now works with async (#14723)

This commit is contained in:
Timothee Cour
2020-06-19 06:08:00 -07:00
committed by GitHub
parent 65c7884a3c
commit 2039e3e883
2 changed files with 21 additions and 7 deletions

View File

@@ -207,6 +207,9 @@ proc asyncSingleProc(prc: NimNode): NimNode {.compileTime.} =
futureVarIdents)
# don't do anything with forward bodies (empty)
if procBody.kind != nnkEmpty:
# fix #13899, defer should not escape its original scope
procBody = newStmtList(newTree(nnkBlockStmt, newEmptyNode(), procBody))
procBody.add(createFutureVarCompletions(futureVarIdents, nil))
if not subtypeIsVoid:

View File

@@ -1,8 +1,3 @@
discard """
exitcode: 0
output: "ok"
"""
import json, asyncdispatch
block: #6100
let done = newFuture[int]()
@@ -61,5 +56,21 @@ block: # 12743
waitFor prc()
echo "ok"
block: # issue #13899
proc someConnect() {.async.} =
await sleepAsync(1)
proc someClose() {.async.} =
await sleepAsync(2)
proc testFooFails(): Future[bool] {.async.} =
await someConnect()
defer:
await someClose()
result = true
proc testFooSucceed(): Future[bool] {.async.} =
try:
await someConnect()
finally:
await someClose()
result = true
doAssert waitFor testFooSucceed()
doAssert waitFor testFooFails()