File: finalize.sml

package info (click to toggle)
mlton 20100608-5
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 36,624 kB
  • sloc: ansic: 18,441; lisp: 2,879; makefile: 1,572; sh: 1,326; pascal: 256; asm: 97
file content (26 lines) | stat: -rw-r--r-- 796 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
structure F = MLton.Finalizable

val n = 4
val fs = Array.tabulate (n, fn i =>
                         let
                            val f = F.new i
                            val _ = 
                               F.addFinalizer
                               (f, fn i =>
                                print (concat [Int.toString i, " gone.\n"]))
                         in
                            f
                         end)
fun sub i = F.withValue (Array.sub (fs, i), fn i => i)
val f = F.new 13
fun clear i = Array.update (fs, i, f)
val _ = clear 3
val _ = clear 2
val _ = MLton.GC.collect ()
fun pi x = print (concat [Int.toString x, "\n"])
val _ = pi (sub 0 + sub 1)
val _ = clear 1
val _ = MLton.GC.collect ()
val _ = pi (sub 0)
val _ = clear 0
val _ = MLton.GC.collect ()