fixes async regression

This commit is contained in:
Andreas Rumpf 2016-01-11 11:11:44 +01:00
commit 5be6c95d21
2 changed files with 22 additions and 2 deletions

View file

@ -408,7 +408,7 @@ proc detectCapturedVars(n: PNode; owner: PSym; c: var DetectionPass) =
addClosureParam(c, w) # , ow addClosureParam(c, w) # , ow
createUpField(c, w, up) createUpField(c, w, up)
w = up w = up
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit, nkClosure, of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit,
nkTemplateDef, nkTypeSection: nkTemplateDef, nkTypeSection:
discard discard
of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef: of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef:
@ -687,11 +687,14 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass;
result = accessViaEnvParam(n, owner) result = accessViaEnvParam(n, owner)
else: else:
result = accessViaEnvVar(n, owner, d, c) result = accessViaEnvVar(n, owner, d, c)
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit, nkClosure, of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit,
nkTemplateDef, nkTypeSection: nkTemplateDef, nkTypeSection:
discard discard
of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef: of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef:
discard discard
of nkClosure:
if n[1].kind == nkNilLit:
n.sons[0] = liftCapturedVars(n[0], owner, d, c)
of nkLambdaKinds, nkIteratorDef: of nkLambdaKinds, nkIteratorDef:
if n.typ != nil and n[namePos].kind == nkSym: if n.typ != nil and n[namePos].kind == nkSym:
let m = newSymNode(n[namePos].sym) let m = newSymNode(n[namePos].sym)

View file

@ -0,0 +1,17 @@
import asyncdispatch
proc defaultOnProgressChanged() = discard
proc ask(x: proc()) = x()
proc retrFile*(onProgressChanged: proc() {.nimcall.}): Future[void] =
var retFuture = newFuture[void]("retrFile")
iterator retrFileIter(): FutureBase {.closure.} =
ask(onProgressChanged)
complete(retFuture)
var nameIterVar = retrFileIter
return retFuture
discard retrFile(defaultOnProgressChanged)