* fixes #14983 * allow bootstrapping with 0.20 * added a test case for the new system.add with a sink parameter * make npeg green again
This commit is contained in:
parent
68ec7a018b
commit
e9fa486493
2 changed files with 59 additions and 19 deletions
|
|
@ -1215,6 +1215,32 @@ when defined(nimscript) or not defined(nimSeqsV2):
|
||||||
## Generic code becomes much easier to write if the Nim naming scheme is
|
## Generic code becomes much easier to write if the Nim naming scheme is
|
||||||
## respected.
|
## respected.
|
||||||
|
|
||||||
|
when defined(gcDestructors):
|
||||||
|
proc add*[T](x: var seq[T], y: sink openArray[T]) {.noSideEffect.} =
|
||||||
|
## Generic proc for adding a container `y` to a container `x`.
|
||||||
|
##
|
||||||
|
## For containers that have an order, `add` means *append*. New generic
|
||||||
|
## containers should also call their adding proc `add` for consistency.
|
||||||
|
## Generic code becomes much easier to write if the Nim naming scheme is
|
||||||
|
## respected.
|
||||||
|
##
|
||||||
|
## See also:
|
||||||
|
## * `& proc <#&,seq[T][T],seq[T][T]>`_
|
||||||
|
##
|
||||||
|
## .. code-block:: Nim
|
||||||
|
## var s: seq[string] = @["test2","test2"]
|
||||||
|
## s.add("test") # s <- @[test2, test2, test]
|
||||||
|
{.noSideEffect.}:
|
||||||
|
let xl = x.len
|
||||||
|
setLen(x, xl + y.len)
|
||||||
|
for i in 0..high(y):
|
||||||
|
when nimvm:
|
||||||
|
# workaround the fact that the VM does not yet
|
||||||
|
# handle sink parameters properly:
|
||||||
|
x[xl+i] = y[i]
|
||||||
|
else:
|
||||||
|
x[xl+i] = move y[i]
|
||||||
|
else:
|
||||||
proc add*[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} =
|
proc add*[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} =
|
||||||
## Generic proc for adding a container `y` to a container `x`.
|
## Generic proc for adding a container `y` to a container `x`.
|
||||||
##
|
##
|
||||||
|
|
@ -1234,6 +1260,7 @@ proc add*[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} =
|
||||||
setLen(x, xl + y.len)
|
setLen(x, xl + y.len)
|
||||||
for i in 0..high(y): x[xl+i] = y[i]
|
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) =
|
||||||
a = move(b)
|
a = move(b)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ Hello
|
||||||
2
|
2
|
||||||
0
|
0
|
||||||
List
|
List
|
||||||
|
@["4", "5", "6", "", "", "a", ""]
|
||||||
|
@["", "", "a", ""]
|
||||||
'''
|
'''
|
||||||
cmd: '''nim c --gc:arc $file'''
|
cmd: '''nim c --gc:arc $file'''
|
||||||
"""
|
"""
|
||||||
|
|
@ -169,3 +171,14 @@ var a = Tag(kind: List)
|
||||||
var b = a
|
var b = a
|
||||||
echo a.kind
|
echo a.kind
|
||||||
var c = a
|
var c = a
|
||||||
|
|
||||||
|
proc testAdd(i: int; yyy: openArray[string]) =
|
||||||
|
var x: seq[string]
|
||||||
|
x.add [$i, $(i+1), $(i+2)]
|
||||||
|
x.add yyy
|
||||||
|
echo x
|
||||||
|
|
||||||
|
var y = newSeq[string](4)
|
||||||
|
y[2] = "a"
|
||||||
|
testAdd(4, y)
|
||||||
|
echo y
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue