summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorEric N. Vander Weele <ericvw@gmail.com>2023-03-20 13:51:31 -0400
committerGitHub <noreply@github.com>2023-03-20 18:51:31 +0100
commitda7833c68bd8a3fea4b380e2a0e84753812450fe (patch)
tree653b80af266c62f0e57e4659b018c8772df66857 /lib/pure
parent285ea3c48e7b01fe6beecf794e9e8cc904c27889 (diff)
downloadNim-da7833c68bd8a3fea4b380e2a0e84753812450fe.tar.gz
fixes #21538; expand len template parameter once in newSeqWith (#21543)
`len` could contain side effects and may result in different values when
substituted twice in the template expansion. Instead, capture the result
of substituting `len` once.

closes: #21538
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/collections/sequtils.nim6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim
index 1773e827b..bcdd0879d 100644
--- a/lib/pure/collections/sequtils.nim
+++ b/lib/pure/collections/sequtils.nim
@@ -1077,9 +1077,9 @@ template newSeqWith*(len: int, init: untyped): untyped =
     import std/random
     var seqRand = newSeqWith(20, rand(1.0))
     assert seqRand[0] != seqRand[1]
-
-  var result = newSeq[typeof(init)](len)
-  for i in 0 ..< len:
+  let newLen = len
+  var result = newSeq[typeof(init)](newLen)
+  for i in 0 ..< newLen:
     result[i] = init
   move(result) # refs bug #7295