diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-09-03 12:59:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-03 12:59:34 +0200 |
commit | 48f29972210612b41cb6d98122672b1713edc907 (patch) | |
tree | b73ea138232865e85fbf8e372a21ddb145ef2e64 /lib/system.nim | |
parent | 3172ca54758e0a7e68d140a79ed98d0981b05e3f (diff) | |
download | Nim-48f29972210612b41cb6d98122672b1713edc907.tar.gz |
fixes system.add for strict funcs (#15259)
* fixes system.add for strict funcs * fixes #15248
Diffstat (limited to 'lib/system.nim')
-rw-r--r-- | lib/system.nim | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/lib/system.nim b/lib/system.nim index 204a1194e..dc603b56d 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1227,9 +1227,10 @@ proc add*[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} = ## .. code-block:: Nim ## var s: seq[string] = @["test2","test2"] ## s.add("test") # s <- @[test2, test2, test] - let xl = x.len - setLen(x, xl + y.len) - for i in 0..high(y): x[xl+i] = y[i] + {.noSideEffect.}: + let xl = x.len + setLen(x, xl + y.len) + for i in 0..high(y): x[xl+i] = y[i] when defined(nimSeqsV2): template movingCopy(a, b) = @@ -1283,22 +1284,23 @@ proc insert*[T](x: var seq[T], item: sink T, i = 0.Natural) {.noSideEffect.} = ## .. code-block:: Nim ## var i = @[1, 3, 5] ## i.insert(99, 0) # i <- @[99, 1, 3, 5] - template defaultImpl = - let xl = x.len - setLen(x, xl+1) - var j = xl-1 - while j >= i: - movingCopy(x[j+1], x[j]) - dec(j) - when nimvm: - defaultImpl() - else: - when defined(js): - var it : T - {.emit: "`x` = `x` || []; `x`.splice(`i`, 0, `it`);".} - else: + {.noSideEffect.}: + template defaultImpl = + let xl = x.len + setLen(x, xl+1) + var j = xl-1 + while j >= i: + movingCopy(x[j+1], x[j]) + dec(j) + when nimvm: defaultImpl() - x[i] = item + else: + when defined(js): + var it : T + {.emit: "`x` = `x` || []; `x`.splice(`i`, 0, `it`);".} + else: + defaultImpl() + x[i] = item when not defined(nimV2): proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.} |