summaryrefslogtreecommitdiffstats
path: root/tests/012/fini.tl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/012/fini.tl')
-rw-r--r--tests/012/fini.tl22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/012/fini.tl b/tests/012/fini.tl
new file mode 100644
index 00000000..3aa581f9
--- /dev/null
+++ b/tests/012/fini.tl
@@ -0,0 +1,22 @@
+(load "../common")
+
+(defstruct base nil
+ others
+ id
+ (:static counter 0)
+ (:postinit (me) (set me.id (inc me.counter)))
+ (:fini (me)
+ (put-line `@(typeof me):@{me.id} finalized`)
+ [mapdo call-finalizers me.others]))
+
+(defstruct derived base
+ (:fini (me)
+ (put-line `@(typeof me):@{me.id} derived fini`)))
+
+(unwind-protect
+ (with-objects ((b (new base others (mapcar (ret (new derived)) (range 1 20)))))
+ (put-line "inside with-objects"))
+ (put-line "after with-objects"))
+
+(mapcar (ret (new derived)) (range 1 20))
+(sys:gc)