From 29cd083e127f29c8af9b95ed9d22ce9e6cd39a33 Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Mon, 2 Nov 2020 17:27:48 +0800 Subject: [PATCH] fixes #15717 (cherry picked from commit 558115fa2906abeda11e6fd128ac139e9aac1838) --- compiler/vmgen.nim | 2 ++ tests/vm/tnewseqofcap.nim | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/vm/tnewseqofcap.nim diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 2969aed51c..aa8cd43477 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -683,6 +683,8 @@ proc genNewSeq(c: PCtx; n: PNode) = proc genNewSeqOfCap(c: PCtx; n: PNode; dest: var TDest) = let t = n.typ + if dest < 0: + dest = c.getTemp(n.typ) let tmp = c.getTemp(n[1].typ) c.gABx(n, opcLdNull, dest, c.genType(t)) c.gABx(n, opcLdImmInt, tmp, 0) diff --git a/tests/vm/tnewseqofcap.nim b/tests/vm/tnewseqofcap.nim new file mode 100644 index 0000000000..c61c3c485f --- /dev/null +++ b/tests/vm/tnewseqofcap.nim @@ -0,0 +1,19 @@ +discard """ + output: '''@["aaa", "bbb", "ccc"]''' +""" + + +const + foo = @["aaa", "bbb", "ccc"] + +proc myTuple: tuple[n: int, bar: seq[string]] = + result.n = 42 + result.bar = newSeqOfCap[string](foo.len) + for f in foo: + result.bar.add(f) + +# It works if you change the below `const` to `let` +const + (n, bar) = myTuple() + +echo bar \ No newline at end of file