Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Copyright (C) 2003-2006 Henry Cejtin, Matthew Fluet, Suresh |
2 | * Jagannathan, and Stephen Weeks. | |
3 | * | |
4 | * MLton is released under a BSD-style license. | |
5 | * See the file MLton-LICENSE for details. | |
6 | *) | |
7 | ||
8 | structure MLtonWeak = | |
9 | struct | |
10 | structure Weak = Primitive.MLton.Weak | |
11 | ||
12 | type 'a t = 'a Weak.t | |
13 | ||
14 | val new = Weak.new | |
15 | ||
16 | fun get (w: 'a t): 'a option = | |
17 | let | |
18 | (* Need to do the canGet after the get. If you did the canGet first, | |
19 | * there could be a GC that invalidates the pointer between the | |
20 | * canGet and the get. | |
21 | *) | |
22 | val x = Weak.get w | |
23 | in | |
24 | if Weak.canGet w | |
25 | then SOME x | |
26 | else NONE | |
27 | end | |
28 | end |