| author | wenzelm | 
| Tue, 14 Oct 2008 16:01:36 +0200 | |
| changeset 28592 | 824f8390aaa2 | 
| parent 28268 | ac8431ecd57e | 
| child 28676 | 78688a5fafc2 | 
| permissions | -rw-r--r-- | 
| 2341 | 1 | (* Title: Pure/ML-Systems/polyml.ML | 
| 2 | ID: $Id$ | |
| 3 | ||
| 28255 | 4 | Compatibility wrapper for Poly/ML 5.2 or later. | 
| 2341 | 5 | *) | 
| 6 | ||
| 28152 | 7 | open Thread; | 
| 26215 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: 
26084diff
changeset | 8 | use "ML-Systems/polyml_common.ML"; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: 
26084diff
changeset | 9 | use "ML-Systems/multithreading_polyml.ML"; | 
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: 
26084diff
changeset | 10 | |
| 
94d32a7cd0fb
rearrangements to make latest Poly/ML the default, not old 4.x;
 wenzelm parents: 
26084diff
changeset | 11 | val pointer_eq = PolyML.pointerEq; | 
| 23921 
947152add153
added compatibility file for ML systems without multithreading;
 wenzelm parents: 
23826diff
changeset | 12 | |
| 25023 | 13 | |
| 26390 
99d4cbb1f941
moved multithreaded "profile" to multithreading_polyml.ML;
 wenzelm parents: 
26385diff
changeset | 14 | (* runtime compilation *) | 
| 3588 | 15 | |
| 28268 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 16 | structure ML_NameSpace = | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 17 | struct | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 18 | open PolyML.NameSpace; | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 19 | val global = PolyML.globalNameSpace; | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 20 | end; | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 21 | |
| 26883 | 22 | local | 
| 23 | ||
| 24 | fun drop_newline s = | |
| 25 | if String.isSuffix "\n" s then String.substring (s, 0, size s - 1) | |
| 26 | else s; | |
| 27 | ||
| 28 | in | |
| 29 | ||
| 28268 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 30 | fun use_text (tune: string -> string) str_of_pos | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 31 | name_space (start_line, name) (print, err) verbose txt = | 
| 3588 | 32 | let | 
| 26883 | 33 | val current_line = ref start_line; | 
| 26379 | 34 | val in_buffer = ref (String.explode (tune txt)); | 
| 5090 | 35 | val out_buffer = ref ([]: string list); | 
| 26883 | 36 | fun output () = drop_newline (implode (rev (! out_buffer))); | 
| 5090 | 37 | |
| 5038 | 38 | fun get () = | 
| 5090 | 39 | (case ! in_buffer of | 
| 26379 | 40 | [] => NONE | 
| 26385 
ae7564661e76
ML runtime compilation: pass position, tuned signature;
 wenzelm parents: 
26379diff
changeset | 41 | | c :: cs => | 
| 
ae7564661e76
ML runtime compilation: pass position, tuned signature;
 wenzelm parents: 
26379diff
changeset | 42 | (in_buffer := cs; if c = #"\n" then current_line := ! current_line + 1 else (); SOME c)); | 
| 5090 | 43 | fun put s = out_buffer := s :: ! out_buffer; | 
| 26883 | 44 | fun message (msg, is_err, line) = | 
| 45 | (if is_err then "Error: " else "Warning: ") ^ drop_newline msg ^ str_of_pos line name ^ "\n"; | |
| 5090 | 46 | |
| 26879 
4fc89bfc4b0c
adapted PolyML.compiler to latest change of basis/FinalPolyML.sml (2008-04-21);
 wenzelm parents: 
26625diff
changeset | 47 | val parameters = | 
| 
4fc89bfc4b0c
adapted PolyML.compiler to latest change of basis/FinalPolyML.sml (2008-04-21);
 wenzelm parents: 
26625diff
changeset | 48 | [PolyML.Compiler.CPOutStream put, | 
| 
4fc89bfc4b0c
adapted PolyML.compiler to latest change of basis/FinalPolyML.sml (2008-04-21);
 wenzelm parents: 
26625diff
changeset | 49 | PolyML.Compiler.CPLineNo (fn () => ! current_line), | 
| 28268 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 50 | PolyML.Compiler.CPErrorMessageProc (put o message), | 
| 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 51 | PolyML.Compiler.CPNameSpace name_space]; | 
| 26379 | 52 | val _ = | 
| 53 | (while not (List.null (! in_buffer)) do | |
| 26879 
4fc89bfc4b0c
adapted PolyML.compiler to latest change of basis/FinalPolyML.sml (2008-04-21);
 wenzelm parents: 
26625diff
changeset | 54 | PolyML.compiler (get, parameters) ()) | 
| 26625 
e0cc4169626e
use_text: explicitly print exception, which is no longer done by the new PolyML.compiler setup;
 wenzelm parents: 
26504diff
changeset | 55 | handle exn => | 
| 
e0cc4169626e
use_text: explicitly print exception, which is no longer done by the new PolyML.compiler setup;
 wenzelm parents: 
26504diff
changeset | 56 |        (put ("Exception- " ^ General.exnMessage exn ^ " raised");
 | 
| 
e0cc4169626e
use_text: explicitly print exception, which is no longer done by the new PolyML.compiler setup;
 wenzelm parents: 
26504diff
changeset | 57 | err (output ()); raise exn); | 
| 26883 | 58 | in if verbose then print (output ()) else () end; | 
| 3588 | 59 | |
| 28268 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 60 | fun use_file tune str_of_pos name_space output verbose name = | 
| 24598 | 61 | let | 
| 62 | val instream = TextIO.openIn name; | |
| 26504 | 63 | val txt = Exn.release (Exn.capture TextIO.inputAll instream before TextIO.closeIn instream); | 
| 28268 
ac8431ecd57e
use_text/use_file now depend on explicit ML name space;
 wenzelm parents: 
28255diff
changeset | 64 | in use_text tune str_of_pos name_space (1, name) output verbose txt end; | 
| 26379 | 65 | |
| 26883 | 66 | end; |