arc: =deepcopy fixes

This commit is contained in:
Araq 2020-09-20 09:01:42 +02:00 • committed by Andreas Rumpf
commit 33be7c6f5e
3 changed files with 81 additions and 6 deletions

67
tests/arc/tdeepcopy.nim Normal file
View 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()