summary refs log tree commit diff stats
path: root/lib/core
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2018-11-26 23:28:02 +0100
committerAndreas Rumpf <rumpf_a@web.de>2018-11-27 00:36:29 +0100
commit413580bc0444fc9d8e01b6af01433f8c08d2d298 (patch)
tree1b1d5b7ce15100a612621a1cd8871257c4359784 /lib/core
parent93cf0ef52ef81af15009566f90e0d020903e8c2b (diff)
downloadNim-413580bc0444fc9d8e01b6af01433f8c08d2d298.tar.gz
new minor language feature: .noSideEffect blocks like .gcsafe blocks
Diffstat (limited to 'lib/core')
-rw-r--r--lib/core/seqs.nim7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/core/seqs.nim b/lib/core/seqs.nim
index fb81a30de..1981998df 100644
--- a/lib/core/seqs.nim
+++ b/lib/core/seqs.nim
@@ -82,7 +82,7 @@ type
     cap: int
     region: Allocator
 
-proc newSeqPayload(cap, elemSize: int): pointer {.compilerRtl.} =
+proc newSeqPayload(cap, elemSize: int): pointer {.compilerRtl, noSideEffect.} =
   # we have to use type erasure here as Nim does not support generic
   # compilerProcs. Oh well, this will all be inlined anyway.
   if cap <= 0:
@@ -94,7 +94,8 @@ proc newSeqPayload(cap, elemSize: int): pointer {.compilerRtl.} =
   else:
     result = nil
 
-proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize: int): pointer {.compilerRtl.} =
+proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize: int): pointer {.
+    compilerRtl, noSideEffect.} =
   if len+addlen <= len:
     result = p
   elif p == nil:
@@ -128,7 +129,7 @@ proc grow*[T](x: var seq[T]; newLen: Natural; value: T) =
   xu.p = cast[typeof(xu.p)](prepareSeqAdd(oldLen, xu.p, newLen - oldLen, sizeof(T)))
   xu.len = newLen
   for i in oldLen .. newLen-1:
-    x.data[i] = value
+    xu.p.data[i] = value
 
 proc setLen[T](s: var seq[T], newlen: Natural) =
   if newlen < s.len: