fixes system.add for strict funcs (#15259)
* fixes system.add for strict funcs * fixes #15248
This commit is contained in:
parent
3172ca5475
commit
48f2997221
2 changed files with 21 additions and 19 deletions
|
|
@ -342,7 +342,7 @@ proc deps(c: var Partitions; dest, src: PNode) =
|
||||||
let destIsComplex = types.searchTypeFor(dest.typ, wrap)
|
let destIsComplex = types.searchTypeFor(dest.typ, wrap)
|
||||||
|
|
||||||
for t in targets:
|
for t in targets:
|
||||||
if dest.kind != nkSym:
|
if dest.kind != nkSym and c.inNoSideEffectSection == 0:
|
||||||
potentialMutation(c, t, dest.info)
|
potentialMutation(c, t, dest.info)
|
||||||
|
|
||||||
if destIsComplex:
|
if destIsComplex:
|
||||||
|
|
|
||||||
|
|
@ -1227,9 +1227,10 @@ proc add*[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} =
|
||||||
## .. code-block:: Nim
|
## .. code-block:: Nim
|
||||||
## var s: seq[string] = @["test2","test2"]
|
## var s: seq[string] = @["test2","test2"]
|
||||||
## s.add("test") # s <- @[test2, test2, test]
|
## s.add("test") # s <- @[test2, test2, test]
|
||||||
let xl = x.len
|
{.noSideEffect.}:
|
||||||
setLen(x, xl + y.len)
|
let xl = x.len
|
||||||
for i in 0..high(y): x[xl+i] = y[i]
|
setLen(x, xl + y.len)
|
||||||
|
for i in 0..high(y): x[xl+i] = y[i]
|
||||||
|
|
||||||
when defined(nimSeqsV2):
|
when defined(nimSeqsV2):
|
||||||
template movingCopy(a, b) =
|
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
|
## .. code-block:: Nim
|
||||||
## var i = @[1, 3, 5]
|
## var i = @[1, 3, 5]
|
||||||
## i.insert(99, 0) # i <- @[99, 1, 3, 5]
|
## i.insert(99, 0) # i <- @[99, 1, 3, 5]
|
||||||
template defaultImpl =
|
{.noSideEffect.}:
|
||||||
let xl = x.len
|
template defaultImpl =
|
||||||
setLen(x, xl+1)
|
let xl = x.len
|
||||||
var j = xl-1
|
setLen(x, xl+1)
|
||||||
while j >= i:
|
var j = xl-1
|
||||||
movingCopy(x[j+1], x[j])
|
while j >= i:
|
||||||
dec(j)
|
movingCopy(x[j+1], x[j])
|
||||||
when nimvm:
|
dec(j)
|
||||||
defaultImpl()
|
when nimvm:
|
||||||
else:
|
|
||||||
when defined(js):
|
|
||||||
var it : T
|
|
||||||
{.emit: "`x` = `x` || []; `x`.splice(`i`, 0, `it`);".}
|
|
||||||
else:
|
|
||||||
defaultImpl()
|
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):
|
when not defined(nimV2):
|
||||||
proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.}
|
proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue