diff options
author | Araq <rumpf_a@web.de> | 2014-09-26 09:36:09 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-09-26 09:36:09 +0200 |
commit | 1088814e56811f3bca77f191d8c492405712fcdb (patch) | |
tree | 7899b77663824fa613551840c84a1e7b5f06727a /tests/parallel | |
parent | dfd73902772a0236e09cae534ba98f1a58c194ad (diff) | |
download | Nim-1088814e56811f3bca77f191d8c492405712fcdb.tar.gz |
deepCopy is instantiated when its corresponding type is instantiated
Diffstat (limited to 'tests/parallel')
-rw-r--r-- | tests/parallel/tdeepcopy2.nim | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/parallel/tdeepcopy2.nim b/tests/parallel/tdeepcopy2.nim new file mode 100644 index 000000000..748ef4d9b --- /dev/null +++ b/tests/parallel/tdeepcopy2.nim @@ -0,0 +1,35 @@ +discard """ + output: '''called deepCopy for int +called deepCopy for int +done999 999 +""" + +import threadpool + + +type + Bar[T] = object + x: T + +proc deepCopy[T](b: ref Bar[T]): ref Bar[T] {.override.} = + 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() |