1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- discard """
- matrix: "--mm:refc"
- output: '''
- 13 abc
- called deepCopy for int
- called deepCopy for int
- done999 999
- '''
- """
- import threadpool
- block one:
- type
- PBinaryTree = ref object
- le, ri: PBinaryTree
- value: int
- proc main =
- var x: PBinaryTree
- deepCopy(x, PBinaryTree(ri: PBinaryTree(le: PBinaryTree(value: 13))))
- var y: string
- deepCopy y, "abc"
- echo x.ri.le.value, " ", y
- main()
- block two:
- 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 foo(b: ref Bar[int]): int = 999
- # test that the disjoint checker deals with 'a = spawn f(); g = spawn f()':
- proc main =
- var dummy: ref Bar[int]
- new(dummy)
- dummy.x = 44
- #parallel:
- let f = spawn foo(dummy)
- let b = spawn foo(dummy)
- echo "done", ^f, " ", ^b
- main()
|