| author | wenzelm | 
| Thu, 14 Aug 2008 16:52:46 +0200 | |
| changeset 27865 | 27a8ad9612a3 | 
| parent 26474 | 94735cff132c | 
| child 28151 | 61f9c918b410 | 
| permissions | -rw-r--r-- | 
| 26215 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 1 | (* Title: Pure/ML-Systems/polyml_common.ML | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 2 | ID: $Id$ | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 3 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 4 | Compatibility file for Poly/ML -- common part for 4.x and 5.x. | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 5 | *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 6 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 7 | use "ML-Systems/exn.ML"; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 8 | if List.exists (fn s => s = "Universal") (PolyML.Compiler.structureNames ()) then () | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 9 | else use "ML-Systems/universal.ML"; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 10 | use "ML-Systems/multithreading.ML"; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 11 | use "ML-Systems/time_limit.ML"; | 
| 26220 | 12 | use "ML-Systems/system_shell.ML"; | 
| 13 | ||
| 26215 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 14 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 15 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 16 | (** ML system and platform related **) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 17 | |
| 26474 | 18 | val forget_structure = PolyML.Compiler.forgetStructure; | 
| 19 | ||
| 20 | ||
| 26215 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 21 | (* Compiler options *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 22 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 23 | val ml_system_fix_ints = false; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 24 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 25 | PolyML.Compiler.printInAlphabeticalOrder := false; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 26 | PolyML.Compiler.maxInlineSize := 80; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 27 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 28 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 29 | (* old Poly/ML emulation *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 30 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 31 | local | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 32 | val orig_exit = exit; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 33 | in | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 34 | open PolyML; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 35 | val exit = orig_exit; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 36 | fun quit () = exit 0; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 37 | end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 38 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 39 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 40 | (* restore old-style character / string functions *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 41 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 42 | val ord = SML90.ord; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 43 | val chr = SML90.chr; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 44 | val explode = SML90.explode; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 45 | val implode = SML90.implode; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 46 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 47 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 48 | (* compiler-independent timing functions *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 49 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 50 | fun start_timing () = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 51 | let val CPUtimer = Timer.startCPUTimer(); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 52 | val time = Timer.checkCPUTimer(CPUtimer) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 53 | in (CPUtimer,time) end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 54 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 55 | fun end_timing (CPUtimer, {sys,usr}) =
 | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 56 | let open Time (*...for Time.toString, Time.+ and Time.- *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 57 |       val {sys=sys2,usr=usr2} = Timer.checkCPUTimer(CPUtimer)
 | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 58 | in "User " ^ toString (usr2-usr) ^ | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 59 | " All "^ toString (sys2-sys + usr2-usr) ^ | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 60 | " secs" | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 61 | handle Time => "" | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 62 | end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 63 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 64 | fun check_timer timer = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 65 | let | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 66 |     val {sys, usr} = Timer.checkCPUTimer timer;
 | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 67 | val gc = Timer.checkGCTime timer; (* FIXME already included in usr? *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 68 | in (sys, usr, gc) end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 69 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 70 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 71 | (* prompts *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 72 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 73 | fun ml_prompts p1 p2 = (PolyML.Compiler.prompt1 := p1; PolyML.Compiler.prompt2 := p2); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 74 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 75 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 76 | (* toplevel pretty printing (see also Pure/pure_setup.ML) *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 77 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 78 | fun make_pp _ pprint (str, blk, brk, en) _ _ obj = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 79 | pprint obj (str, fn ind => blk (ind, false), fn wd => brk (wd, 0), | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 80 | fn () => brk (99999, 0), en); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 81 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 82 | (*print depth*) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 83 | local | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 84 | val depth = ref 10; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 85 | in | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 86 | fun get_print_depth () = ! depth; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 87 | fun print_depth n = (depth := n; PolyML.print_depth n); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 88 | end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 89 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 90 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 91 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 92 | (** interrupts **) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 93 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 94 | exception Interrupt = SML90.Interrupt; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 95 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 96 | local | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 97 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 98 | val sig_int = 2; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 99 | val default_handler = Signal.SIG_HANDLE (fn _ => Process.interruptConsoleProcesses ()); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 100 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 101 | val _ = Signal.signal (sig_int, default_handler); | 
| 26380 
5d368eb42c11
removed pointer_eq from polyml_common.ML (structure Address no longer available after 5.1);
 wenzelm parents: 
26220diff
changeset | 102 | val _ = PolyML.onEntry (fn () => (Signal.signal (sig_int, default_handler); ())); | 
| 26215 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 103 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 104 | fun change_signal new_handler f x = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 105 | let | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 106 | (*RACE wrt. other signals!*) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 107 | val old_handler = Signal.signal (sig_int, new_handler); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 108 | val result = Exn.capture (f old_handler) x; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 109 | val _ = Signal.signal (sig_int, old_handler); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 110 | in Exn.release result end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 111 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 112 | in | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 113 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 114 | fun interruptible f = change_signal default_handler (fn _ => f); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 115 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 116 | fun uninterruptible f = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 117 | change_signal Signal.SIG_IGN | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 118 | (fn old_handler => f (fn g => change_signal old_handler (fn _ => g))); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 119 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 120 | end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 121 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 122 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 123 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 124 | (** OS related **) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 125 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 126 | (* Posix patches *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 127 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 128 | (*This extension of the Poly/ML Signal structure is only necessary | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 129 | because in SML/NJ, types Posix.Signal.signal and Signals.signal differ.*) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 130 | structure IsaSignal = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 131 | struct | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 132 | open Signal | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 133 | val usr1 = Posix.Signal.usr1 | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 134 | val usr2 = Posix.Signal.usr2 | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 135 | val alrm = Posix.Signal.alrm | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 136 | val chld = Posix.Signal.chld | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 137 | val cont = Posix.Signal.cont | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 138 | val int = Posix.Signal.int | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 139 | val quit = Posix.Signal.quit | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 140 | end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 141 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 142 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 143 | (* current directory *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 144 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 145 | val cd = OS.FileSys.chDir; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 146 | val pwd = OS.FileSys.getDir; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 147 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 148 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 149 | (*Convert a process ID to a decimal string (chiefly for tracing)*) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 150 | fun string_of_pid pid = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 151 | Word.fmt StringCvt.DEC (Word.fromLargeWord (Posix.Process.pidToWord pid)); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 152 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 153 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 154 | (* getenv *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 155 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 156 | fun getenv var = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 157 | (case OS.Process.getEnv var of | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 158 | NONE => "" | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 159 | | SOME txt => txt); | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 160 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 161 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 162 | (* profile execution *) | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 163 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 164 | fun profile 0 f x = f x | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 165 | | profile n f x = | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 166 | let | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 167 | val _ = RunCall.run_call1 RuntimeCalls.POLY_SYS_profiler n; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 168 | val res = Exn.capture f x; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 169 | val _ = RunCall.run_call1 RuntimeCalls.POLY_SYS_profiler 0; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 170 | in Exn.release res end; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: diff
changeset | 171 |