mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
* fix #15405 * fix tests * deepcopy for ARC has to be enabled via --deepcopy:on Co-authored-by: Araq <rumpf_a@web.de>
68 lines
1.0 KiB
Nim
68 lines
1.0 KiB
Nim
discard """
|
|
cmd: "nim c --gc:arc --deepcopy:on $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()
|