arc: =deepcopy fixes
This commit is contained in:
parent
ebb632ccba
commit
33be7c6f5e
3 changed files with 81 additions and 6 deletions
67
tests/arc/tdeepcopy.nim
Normal file
67
tests/arc/tdeepcopy.nim
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
discard """
|
||||
cmd: "nim c --gc:arc $file"
|
||||
output: '''13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
13 abc
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
called deepCopy for int
|
||||
0'''
|
||||
"""
|
||||
|
||||
type
|
||||
PBinaryTree = ref object of RootObj
|
||||
le, ri: PBinaryTree
|
||||
value: int
|
||||
|
||||
proc mainB =
|
||||
var x: PBinaryTree
|
||||
deepCopy(x, PBinaryTree(ri: PBinaryTree(le: PBinaryTree(value: 13))))
|
||||
|
||||
var y: string
|
||||
deepCopy y, "abc"
|
||||
echo x.ri.le.value, " ", y
|
||||
|
||||
for i in 0..10:
|
||||
mainB()
|
||||
|
||||
|
||||
type
|
||||
Bar[T] = object
|
||||
x: T
|
||||
|
||||
proc `=deepCopy`[T](b: ref Bar[T]): ref Bar[T] =
|
||||
result.new
|
||||
result.x = b.x
|
||||
when T is int:
|
||||
echo "called deepCopy for int"
|
||||
else:
|
||||
echo "called deepCopy for something else"
|
||||
|
||||
proc main =
|
||||
var dummy, c: ref Bar[int]
|
||||
new(dummy)
|
||||
dummy.x = 44
|
||||
|
||||
deepCopy c, dummy
|
||||
|
||||
for i in 0..10:
|
||||
main()
|
||||
|
||||
echo getOccupiedMem()
|
||||
Loading…
Add table
Add a link
Reference in a new issue