From 413580bc0444fc9d8e01b6af01433f8c08d2d298 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 26 Nov 2018 23:28:02 +0100 Subject: new minor language feature: .noSideEffect blocks like .gcsafe blocks --- lib/core/seqs.nim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lib/core') 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: -- cgit 1.4.1-2-gfad0