lambdalifting: be consistent in its handling for 'func'
This commit is contained in:
parent
af815c3c18
commit
9eaf99f7e6
1 changed files with 7 additions and 9 deletions
|
|
@ -454,11 +454,10 @@ proc detectCapturedVars(n: PNode; owner: PSym; c: var DetectionPass) =
|
||||||
createUpField(c, w, up, n.info)
|
createUpField(c, w, up, n.info)
|
||||||
w = up
|
w = up
|
||||||
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit,
|
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit,
|
||||||
nkTemplateDef, nkTypeSection:
|
nkTemplateDef, nkTypeSection, nkProcDef, nkMethodDef,
|
||||||
|
nkConverterDef, nkMacroDef, nkFuncDef:
|
||||||
discard
|
discard
|
||||||
of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef:
|
of nkLambdaKinds, nkIteratorDef:
|
||||||
discard
|
|
||||||
of nkLambdaKinds, nkIteratorDef, nkFuncDef:
|
|
||||||
if n.typ != nil:
|
if n.typ != nil:
|
||||||
detectCapturedVars(n[namePos], owner, c)
|
detectCapturedVars(n[namePos], owner, c)
|
||||||
of nkReturnStmt:
|
of nkReturnStmt:
|
||||||
|
|
@ -672,9 +671,8 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass;
|
||||||
else:
|
else:
|
||||||
result = accessViaEnvVar(n, owner, d, c)
|
result = accessViaEnvVar(n, owner, d, c)
|
||||||
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit, nkComesFrom,
|
of nkEmpty..pred(nkSym), succ(nkSym)..nkNilLit, nkComesFrom,
|
||||||
nkTemplateDef, nkTypeSection:
|
nkTemplateDef, nkTypeSection, nkProcDef, nkMethodDef, nkConverterDef,
|
||||||
discard
|
nkMacroDef, nkFuncDef:
|
||||||
of nkProcDef, nkMethodDef, nkConverterDef, nkMacroDef:
|
|
||||||
discard
|
discard
|
||||||
of nkClosure:
|
of nkClosure:
|
||||||
if n[1].kind == nkNilLit:
|
if n[1].kind == nkNilLit:
|
||||||
|
|
@ -685,7 +683,7 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass;
|
||||||
# now we know better, so patch it:
|
# now we know better, so patch it:
|
||||||
n.sons[0] = x.sons[0]
|
n.sons[0] = x.sons[0]
|
||||||
n.sons[1] = x.sons[1]
|
n.sons[1] = x.sons[1]
|
||||||
of nkLambdaKinds, nkIteratorDef, nkFuncDef:
|
of nkLambdaKinds, nkIteratorDef:
|
||||||
if n.typ != nil and n[namePos].kind == nkSym:
|
if n.typ != nil and n[namePos].kind == nkSym:
|
||||||
let oldInContainer = c.inContainer
|
let oldInContainer = c.inContainer
|
||||||
c.inContainer = 0
|
c.inContainer = 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue