Import Upstream version 20180207
[hcoop/debian/mlton.git] / regression / world2.sml
1 fun run (f: unit -> unit) =
2 case Posix.Process.fork () of
3 SOME pid =>
4 let
5 open Posix.Process
6 val (pid', status) = waitpid (W_CHILD pid, [])
7 in if pid = pid' andalso status = W_EXITED
8 then ()
9 else raise Fail "child failed"
10 end
11 | NONE => let open OS.Process
12 in exit ((f (); success) handle _ => failure)
13 end
14
15 fun succeed () =
16 let open OS.Process
17 in exit success
18 end
19
20 open MLton.World
21
22 val (w, out) = MLton.TextIO.mkstemp "/tmp/world"
23 val _ = TextIO.closeOut out
24
25 val a = Array.array (10000, 17)
26
27 val _ =
28 case save w of
29 Original => ()
30 | Clone => (Array.update (a, 0, 13)
31 ; print (concat [Int.toString (Array.sub (a, 0) + Array.sub (a, 1)),
32 "\n"])
33 ; succeed ())
34
35 val _ = run (fn () => load w)
36
37 val _ = OS.FileSys.remove w