diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-11-14 23:19:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-14 23:19:18 +0100 |
commit | a14abc57088ec775284e1bab5815e0229ab582a3 (patch) | |
tree | 0454551a60cfb492ea9e417b44c585c85bf82ad5 /compiler/lambdalifting.nim | |
parent | f22d3c75aa68833ae1b01d747d0c71074ccef310 (diff) | |
download | Nim-a14abc57088ec775284e1bab5815e0229ab582a3.tar.gz |
ARC: solves phase ordering problems (#12654)
Diffstat (limited to 'compiler/lambdalifting.nim')
-rw-r--r-- | compiler/lambdalifting.nim | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index a3535010d..15ab7ec0a 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -296,7 +296,7 @@ type DetectionPass = object processed, capturedVars: IntSet ownerToType: Table[int, PType] - somethingToDo, noDestructors: bool + somethingToDo: bool graph: ModuleGraph proc initDetectionPass(g: ModuleGraph; fn: PSym): DetectionPass = @@ -423,8 +423,7 @@ proc detectCapturedVars(n: PNode; owner: PSym; c: var DetectionPass) = if innerProc: if s.isIterator: c.somethingToDo = true if not c.processed.containsOrIncl(s.id): - let body = transformBody(c.graph, s, cache = true, - noDestructors = c.noDestructors) + let body = transformBody(c.graph, s, cache = true) detectCapturedVars(body, s, c) let ow = s.skipGenericOwner if ow == owner: @@ -714,7 +713,7 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass; # echo renderTree(s.getBody, {renderIds}) let oldInContainer = c.inContainer c.inContainer = 0 - var body = transformBody(d.graph, s) + var body = transformBody(d.graph, s, cache = false) body = liftCapturedVars(body, s, d, c) if c.envVars.getOrDefault(s.id).isNil: s.transformedBody = body @@ -833,8 +832,7 @@ proc liftIterToProc*(g: ModuleGraph; fn: PSym; body: PNode; ptrType: PType): PNo fn.kind = oldKind fn.typ.callConv = oldCC -proc liftLambdas*(g: ModuleGraph; fn: PSym, body: PNode; tooEarly: var bool; - noDestructors: bool): PNode = +proc liftLambdas*(g: ModuleGraph; fn: PSym, body: PNode; tooEarly: var bool): PNode = # XXX gCmd == cmdCompileToJS does not suffice! The compiletime stuff needs # the transformation even when compiling to JS ... @@ -850,7 +848,6 @@ proc liftLambdas*(g: ModuleGraph; fn: PSym, body: PNode; tooEarly: var bool; tooEarly = true else: var d = initDetectionPass(g, fn) - d.noDestructors = noDestructors detectCapturedVars(body, fn, d) if not d.somethingToDo and fn.isIterator: addClosureParam(d, fn, body.info) |