Backport from sid to buster
[hcoop/debian/mlton.git] / regression / world6.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 _ =
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