fix #16967 [backport:1.2] (#16976)

* fix #16967 [backport:1.2]

* move test to tsugar
This commit is contained in:
hlaaftana
2021-02-09 15:04:36 +03:00
committed by GitHub
parent 41d32c3ea3
commit 49ee2f7f3b
2 changed files with 17 additions and 1 deletions

View File

@@ -242,7 +242,7 @@ macro capture*(locals: varargs[typed], body: untyped): untyped {.since: (1, 1).}
error("The variable name cannot be `result`!", arg)
params.add(newIdentDefs(ident(arg.strVal), freshIdentNodes getTypeInst arg))
result = newNimNode(nnkCall)
result.add(newProc(newEmptyNode(), params, body, nnkProcDef))
result.add(newProc(newEmptyNode(), params, body, nnkLambda))
for arg in locals: result.add(arg)
since (1, 1):

View File

@@ -79,6 +79,22 @@ template main() =
closure2 = () => (i, j)
doAssert closure2() == (5, 3)
block: # bug #16967
var s = newSeq[proc (): int](5)
{.push exportc.}
proc bar() =
for i in 0 ..< s.len:
let foo = i + 1
capture foo:
s[i] = proc(): int = foo
{.pop.}
bar()
for i, p in s.pairs:
let foo = i + 1
doAssert p() == foo
block: # dup
block dup_with_field:
type