Import Upstream version 20180207
[hcoop/debian/mlton.git] / regression / finalize.sml
1 structure F = MLton.Finalizable
2
3 val n = 4
4 val fs = Array.tabulate (n, fn i =>
5 let
6 val f = F.new i
7 val _ =
8 F.addFinalizer
9 (f, fn i =>
10 print (concat [Int.toString i, " gone.\n"]))
11 in
12 f
13 end)
14 fun sub i = F.withValue (Array.sub (fs, i), fn i => i)
15 val f = F.new 13
16 fun clear i = Array.update (fs, i, f)
17 val _ = clear 3
18 val _ = clear 2
19 val _ = MLton.GC.collect ()
20 fun pi x = print (concat [Int.toString x, "\n"])
21 val _ = pi (sub 0 + sub 1)
22 val _ = clear 1
23 val _ = MLton.GC.collect ()
24 val _ = pi (sub 0)
25 val _ = clear 0
26 val _ = MLton.GC.collect ()