File: finalize.sml

package info (click to toggle)
mlton 20130715-3
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 60,900 kB
  • ctags: 69,386
  • sloc: xml: 34,418; ansic: 17,399; lisp: 2,879; makefile: 1,605; sh: 1,254; pascal: 256; python: 143; 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 ()