diff options
-rw-r--r-- | lib/system.nim | 2 | ||||
-rw-r--r-- | tests/concepts/t3330.nim | 4 | ||||
-rw-r--r-- | tests/destructor/trecursive.nim | 26 |
3 files changed, 29 insertions, 3 deletions
diff --git a/lib/system.nim b/lib/system.nim index 6a22fe19b..da44baa10 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1193,7 +1193,7 @@ when notJSnotNims and hasAlloc and not defined(nimSeqsV2): proc addChar(s: NimString, c: char): NimString {.compilerproc, benign.} when defined(nimscript) or not defined(nimSeqsV2): - proc add*[T](x: var seq[T], y: T) {.magic: "AppendSeqElem", noSideEffect.} + proc add*[T](x: var seq[T], y: sink T) {.magic: "AppendSeqElem", noSideEffect.} ## Generic proc for adding a data item `y` to a container `x`. ## ## For containers that have an order, `add` means *append*. New generic diff --git a/tests/concepts/t3330.nim b/tests/concepts/t3330.nim index 9de71f3ac..6faa79c9d 100644 --- a/tests/concepts/t3330.nim +++ b/tests/concepts/t3330.nim @@ -28,11 +28,11 @@ proc add(x: var string; y: string) first type mismatch at position: 1 required type for x: var string but expression 'k' is of type: Alias -proc add[T](x: var seq[T]; y: T) +proc add[T](x: var seq[T]; y: openArray[T]) first type mismatch at position: 1 required type for x: var seq[T] but expression 'k' is of type: Alias -proc add[T](x: var seq[T]; y: openArray[T]) +proc add[T](x: var seq[T]; y: sink T) first type mismatch at position: 1 required type for x: var seq[T] but expression 'k' is of type: Alias diff --git a/tests/destructor/trecursive.nim b/tests/destructor/trecursive.nim index 55e67f52a..17a40e5a9 100644 --- a/tests/destructor/trecursive.nim +++ b/tests/destructor/trecursive.nim @@ -32,3 +32,29 @@ proc test1() = echo "test1 OK" test1() + +#------------------------------------------------------------------------------ +# issue #14217 + +type + MyObject = object + p: ptr int + +proc `=destroy`(x: var MyObject) = + if x.p != nil: + deallocShared(x.p) + +proc `=`(x: var MyObject, y: MyObject) {.error.} + +proc newMyObject(i: int): MyObject = + result.p = create(int) + result.p[] = i + +proc test: seq[MyObject] = + for i in 0..3: + let x = newMyObject(i) + result.add x + +var x = test() +for i in 0..3: + doAssert(x[i].p[] == i) |