fixes #1970
This commit is contained in:
parent
d4573f1762
commit
67b024838c
2 changed files with 39 additions and 29 deletions
|
|
@ -1872,38 +1872,40 @@ proc asyncSingleProc(prc: NimNode): NimNode {.compileTime.} =
|
||||||
# -> complete(retFuture, result)
|
# -> complete(retFuture, result)
|
||||||
var iteratorNameSym = genSym(nskIterator, $prc[0].getName & "Iter")
|
var iteratorNameSym = genSym(nskIterator, $prc[0].getName & "Iter")
|
||||||
var procBody = prc[6].processBody(retFutureSym, subtypeIsVoid, nil)
|
var procBody = prc[6].processBody(retFutureSym, subtypeIsVoid, nil)
|
||||||
if not subtypeIsVoid:
|
# don't do anything with forward bodies (empty)
|
||||||
procBody.insert(0, newNimNode(nnkPragma).add(newIdentNode("push"),
|
if procBody.kind != nnkEmpty:
|
||||||
newNimNode(nnkExprColonExpr).add(newNimNode(nnkBracketExpr).add(
|
if not subtypeIsVoid:
|
||||||
newIdentNode("warning"), newIdentNode("resultshadowed")),
|
procBody.insert(0, newNimNode(nnkPragma).add(newIdentNode("push"),
|
||||||
newIdentNode("off")))) # -> {.push warning[resultshadowed]: off.}
|
newNimNode(nnkExprColonExpr).add(newNimNode(nnkBracketExpr).add(
|
||||||
|
newIdentNode("warning"), newIdentNode("resultshadowed")),
|
||||||
|
newIdentNode("off")))) # -> {.push warning[resultshadowed]: off.}
|
||||||
|
|
||||||
procBody.insert(1, newNimNode(nnkVarSection, prc[6]).add(
|
procBody.insert(1, newNimNode(nnkVarSection, prc[6]).add(
|
||||||
newIdentDefs(newIdentNode("result"), baseType))) # -> var result: T
|
newIdentDefs(newIdentNode("result"), baseType))) # -> var result: T
|
||||||
|
|
||||||
procBody.insert(2, newNimNode(nnkPragma).add(
|
procBody.insert(2, newNimNode(nnkPragma).add(
|
||||||
newIdentNode("pop"))) # -> {.pop.})
|
newIdentNode("pop"))) # -> {.pop.})
|
||||||
|
|
||||||
procBody.add(
|
procBody.add(
|
||||||
newCall(newIdentNode("complete"),
|
newCall(newIdentNode("complete"),
|
||||||
retFutureSym, newIdentNode("result"))) # -> complete(retFuture, result)
|
retFutureSym, newIdentNode("result"))) # -> complete(retFuture, result)
|
||||||
else:
|
else:
|
||||||
# -> complete(retFuture)
|
# -> complete(retFuture)
|
||||||
procBody.add(newCall(newIdentNode("complete"), retFutureSym))
|
procBody.add(newCall(newIdentNode("complete"), retFutureSym))
|
||||||
|
|
||||||
var closureIterator = newProc(iteratorNameSym, [newIdentNode("FutureBase")],
|
var closureIterator = newProc(iteratorNameSym, [newIdentNode("FutureBase")],
|
||||||
procBody, nnkIteratorDef)
|
procBody, nnkIteratorDef)
|
||||||
closureIterator[4] = newNimNode(nnkPragma, prc[6]).add(newIdentNode("closure"))
|
closureIterator[4] = newNimNode(nnkPragma, prc[6]).add(newIdentNode("closure"))
|
||||||
outerProcBody.add(closureIterator)
|
outerProcBody.add(closureIterator)
|
||||||
|
|
||||||
# -> createCb(retFuture)
|
# -> createCb(retFuture)
|
||||||
#var cbName = newIdentNode("cb")
|
#var cbName = newIdentNode("cb")
|
||||||
var procCb = getAst createCb(retFutureSym, iteratorNameSym,
|
var procCb = getAst createCb(retFutureSym, iteratorNameSym,
|
||||||
newStrLitNode(prc[0].getName))
|
newStrLitNode(prc[0].getName))
|
||||||
outerProcBody.add procCb
|
outerProcBody.add procCb
|
||||||
|
|
||||||
# -> return retFuture
|
# -> return retFuture
|
||||||
outerProcBody.add newNimNode(nnkReturnStmt, prc[6][prc[6].len-1]).add(retFutureSym)
|
outerProcBody.add newNimNode(nnkReturnStmt, prc[6][prc[6].len-1]).add(retFutureSym)
|
||||||
|
|
||||||
result = prc
|
result = prc
|
||||||
|
|
||||||
|
|
@ -1917,9 +1919,8 @@ proc asyncSingleProc(prc: NimNode): NimNode {.compileTime.} =
|
||||||
if returnType.kind == nnkEmpty:
|
if returnType.kind == nnkEmpty:
|
||||||
# Add Future[void]
|
# Add Future[void]
|
||||||
result[3][0] = parseExpr("Future[void]")
|
result[3][0] = parseExpr("Future[void]")
|
||||||
|
if procBody.kind != nnkEmpty:
|
||||||
result[6] = outerProcBody
|
result[6] = outerProcBody
|
||||||
|
|
||||||
#echo(treeRepr(result))
|
#echo(treeRepr(result))
|
||||||
#if prc[0].getName == "testInfix":
|
#if prc[0].getName == "testInfix":
|
||||||
# echo(toStrLit(result))
|
# echo(toStrLit(result))
|
||||||
|
|
|
||||||
9
tests/async/tasync_forward.nim
Normal file
9
tests/async/tasync_forward.nim
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
import asyncdispatch
|
||||||
|
|
||||||
|
# bug #1970
|
||||||
|
|
||||||
|
proc foo {.async.}
|
||||||
|
|
||||||
|
proc foo {.async.} =
|
||||||
|
discard
|
||||||
Loading…
Add table
Add a link
Reference in a new issue