diff options
author | Zahary Karadjov <zahary@gmail.com> | 2014-02-15 19:05:58 +0200 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2014-02-15 19:05:58 +0200 |
commit | c1c6b6e50e3755f25f734c0e55b6b81f51a7852c (patch) | |
tree | 2c2face670d8f3bad66be768d7c4e84d45fdce0b /tests | |
parent | 492fa86638f20c3230d9086296b9d1c76ae66916 (diff) | |
download | Nim-c1c6b6e50e3755f25f734c0e55b6b81f51a7852c.tar.gz |
handle nested case objects in destructor generation
Diffstat (limited to 'tests')
-rw-r--r-- | tests/destructor/tdestructor.nim | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/destructor/tdestructor.nim b/tests/destructor/tdestructor.nim index bb1410d92..f10c0cc9c 100644 --- a/tests/destructor/tdestructor.nim +++ b/tests/destructor/tdestructor.nim @@ -12,6 +12,13 @@ myobj destroyed ---- mygeneric3 constructed mygeneric1 destroyed +---- +mygeneric1 destroyed +---- +myobj destroyed +---- +---- +myobj destroyed ''' """ @@ -31,6 +38,22 @@ type x: A y: B z: C + + TObjKind = enum A, B, C, D + + TCaseObj = object + case kind: TObjKind + of A: + x: TMyGeneric1[int] + of B, C: + y: TMyObj + else: + case innerKind: TObjKind + of A, B, C: + p: TMyGeneric3[int, float, string] + of D: + q: TMyGeneric3[TMyObj, int, int] + r: string proc destruct(o: var TMyObj) {.destructor.} = if o.p != nil: dealloc o.p @@ -82,3 +105,24 @@ mygeneric2[int](10) echo "----" mygeneric3() +proc caseobj = + block: + echo "----" + var o1 = TCaseObj(kind: A, x: TMyGeneric1[int](x: 10)) + + block: + echo "----" + var o2 = TCaseObj(kind: B, y: open()) + + block: + echo "----" + var o3 = TCaseObj(kind: D, innerKind: B, r: "test", + p: TMyGeneric3[int, float, string](x: 10, y: 1.0, z: "test")) + + block: + echo "----" + var o4 = TCaseObj(kind: D, innerKind: D, r: "test", + q: TMyGeneric3[TMyObj, int, int](x: open(), y: 1, z: 0)) + +caseobj() + |