diff options
author | Yuriy Glukhov <yglukhov@users.noreply.github.com> | 2022-12-05 22:49:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-05 22:49:31 +0100 |
commit | c47d5196be8485532fc585a5d0fb219247e17b60 (patch) | |
tree | 3c738aeae7efb321a4e400df6dd28c25c7f6a34a | |
parent | b83bd282dcd6ba8e26fc838ba968089f86b614b4 (diff) | |
download | Nim-c47d5196be8485532fc585a5d0fb219247e17b60.tar.gz |
Dont produce initing moves for sfNoInit variables in closure env (#21026)
-rw-r--r-- | compiler/injectdestructors.nim | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index c245d8d6b..20e790202 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -829,7 +829,10 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode; tmpFlags = {sfSing if ri.kind != nkEmpty: result.add moveOrCopy(v, ri, c, s, if v.kind == nkSym: {IsDecl} else: {}) elif ri.kind == nkEmpty and c.inLoop > 0: - result.add moveOrCopy(v, genDefaultCall(v.typ, c, v.info), c, s, if v.kind == nkSym: {IsDecl} else: {}) + let skipInit = v.kind == nkDotExpr and # Closure var + sfNoInit in v[1].sym.flags + if not skipInit: + result.add moveOrCopy(v, genDefaultCall(v.typ, c, v.info), c, s, if v.kind == nkSym: {IsDecl} else: {}) else: # keep the var but transform 'ri': var v = copyNode(n) var itCopy = copyNode(it) |