fixes async regression
This commit is contained in:
parent
0844941b35
commit
5be6c95d21
2 changed files with 22 additions and 2 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
17
tests/async/tnimcall_to_closure.nim
Normal file
17
tests/async/tnimcall_to_closure.nim
Normal 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue