make sink operator optional (#13068)
* make sink operator optional * bug fix, add changelog entry * Trigger build * fix one regression * fix test * Trigger build * fix typos
This commit is contained in:
parent
7626907401
commit
f51613e262
6 changed files with 56 additions and 62 deletions
|
|
@ -20,12 +20,6 @@ proc `=`*[T](dest: var SharedPtr[T], src: SharedPtr[T]) {.inline.} =
|
|||
discard atomicInc(src.val[].atomicCounter)
|
||||
dest.val = src.val
|
||||
|
||||
proc `=sink`*[T](dest: var SharedPtr[T], src: SharedPtr[T]) {.inline.} =
|
||||
if dest.val != src.val:
|
||||
if dest.val != nil:
|
||||
`=destroy`(dest)
|
||||
dest.val = src.val
|
||||
|
||||
proc newSharedPtr*[T](val: sink T): SharedPtr[T] =
|
||||
result.val = cast[type(result.val)](allocShared0(sizeof(result.val[])))
|
||||
result.val.atomicCounter = 1
|
||||
|
|
|
|||
|
|
@ -20,14 +20,10 @@ mygeneric2 destroyed
|
|||
----
|
||||
----
|
||||
myobj destroyed
|
||||
myobj destroyed
|
||||
myobj destroyed
|
||||
myobj destroyed
|
||||
mygeneric1 destroyed
|
||||
---
|
||||
myobj destroyed
|
||||
myobj destroyed
|
||||
myobj destroyed
|
||||
'''
|
||||
"""
|
||||
|
||||
|
|
@ -37,8 +33,10 @@ type
|
|||
p: pointer
|
||||
|
||||
proc `=destroy`(o: var TMyObj) =
|
||||
if o.p != nil: dealloc o.p
|
||||
echo "myobj destroyed"
|
||||
if o.p != nil:
|
||||
dealloc o.p
|
||||
o.p = nil
|
||||
echo "myobj destroyed"
|
||||
|
||||
type
|
||||
TMyGeneric1[T] = object
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue