summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-07-11 11:53:43 +0200
committerGitHub <noreply@github.com>2016-07-11 11:53:43 +0200
commit9620e66533c81b8a3b06ecd262928ce98696b995 (patch)
tree88eb0ebb25265ac7a8cc5f12b15b3768451a24a6
parentd7e172a6bc351ed926f93b77a14fc5cddbce3293 (diff)
parent90a5edfa6dc6ac781ddacbba07c8e10bd9aee871 (diff)
downloadNim-9620e66533c81b8a3b06ecd262928ce98696b995.tar.gz
Merge pull request #4472 from mbaulch/fix4422
Fix #4422: Reset queue element on pop. Prevent NimVM confusion. Help GC.
-rw-r--r--lib/pure/collections/queues.nim2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/pure/collections/queues.nim b/lib/pure/collections/queues.nim
index 911816518..399e4d413 100644
--- a/lib/pure/collections/queues.nim
+++ b/lib/pure/collections/queues.nim
@@ -152,11 +152,13 @@ proc add*[T](q: var Queue[T], item: T) =
   q.data[q.wr] = item
   q.wr = (q.wr + 1) and q.mask
 
+proc default[T](t: typedesc[T]): T {.inline.} = discard
 proc pop*[T](q: var Queue[T]): T {.inline, discardable.} =
   ## Remove and returns the first (oldest) element of the queue `q`.
   emptyCheck(q)
   dec q.count
   result = q.data[q.rd]
+  q.data[q.rd] = default(type(result))
   q.rd = (q.rd + 1) and q.mask
 
 proc enqueue*[T](q: var Queue[T], item: T) =