diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2018-11-26 23:28:02 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-11-27 00:36:29 +0100 |
commit | 413580bc0444fc9d8e01b6af01433f8c08d2d298 (patch) | |
tree | 1b1d5b7ce15100a612621a1cd8871257c4359784 /lib/core | |
parent | 93cf0ef52ef81af15009566f90e0d020903e8c2b (diff) | |
download | Nim-413580bc0444fc9d8e01b6af01433f8c08d2d298.tar.gz |
new minor language feature: .noSideEffect blocks like .gcsafe blocks
Diffstat (limited to 'lib/core')
-rw-r--r-- | lib/core/seqs.nim | 7 |
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: |