Commit | Line | Data |
---|---|---|
7f918cf1 CE |
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 _ = | |
26 | case save w of | |
27 | Clone => | |
28 | let | |
29 | fun p s = (print s; print "\n") | |
30 | in p (CommandLine.name ()) | |
31 | ; List.app p (CommandLine.arguments ()) | |
32 | ; succeed () | |
33 | end | |
34 | | Original => () | |
35 | ||
36 | val _ = OS.Process.system (concat[CommandLine.name (), | |
37 | " @MLton load-world ", w, " -- a b c"]) | |
38 | ||
39 | val _ = OS.FileSys.remove w |