summary refs log tree commit diff stats
path: root/lib/system.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-09-03 12:59:34 +0200
committerGitHub <noreply@github.com>2020-09-03 12:59:34 +0200
commit48f29972210612b41cb6d98122672b1713edc907 (patch)
treeb73ea138232865e85fbf8e372a21ddb145ef2e64 /lib/system.nim
parent3172ca54758e0a7e68d140a79ed98d0981b05e3f (diff)
downloadNim-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.nim38
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.}