| author | blanchet | 
| Tue, 01 Jul 2014 16:49:25 +0200 | |
| changeset 57470 | 9512b867259c | 
| parent 56619 | e9726f630a83 | 
| child 57832 | 5b48f2047c24 | 
| permissions | -rw-r--r-- | 
| 33538 
edf497b5b5d2
setup for official Poly/ML 5.3.0, which is now the default;
 wenzelm parents: 
32778diff
changeset | 1 | (* Title: Pure/ML-Systems/polyml.ML | 
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 2 | Author: Makarius | 
| 29714 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 3 | |
| 50910 | 4 | Compatibility wrapper for Poly/ML. | 
| 29714 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 5 | *) | 
| 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 6 | |
| 56275 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 7 | (* ML name space *) | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 8 | |
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 9 | structure ML_Name_Space = | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 10 | struct | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 11 | open PolyML.NameSpace; | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 12 | type T = PolyML.NameSpace.nameSpace; | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 13 | val global = PolyML.globalNameSpace; | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 14 | val initial_val = | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 15 | List.filter (fn (a, _) => a <> "use" andalso a <> "exit" andalso a <> "commit") | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 16 | (#allVal global ()); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 17 | val initial_type = #allType global (); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 18 | val initial_fixity = #allFix global (); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 19 | val initial_structure = #allStruct global (); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 20 | val initial_signature = #allSig global (); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 21 | val initial_functor = #allFunct global (); | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 22 | end; | 
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 23 | |
| 
600f432ab556
added command 'SML_file' for Standard ML without Isabelle/ML add-ons;
 wenzelm parents: 
54723diff
changeset | 24 | |
| 54717 | 25 | (* ML system operations *) | 
| 26 | ||
| 27 | use "ML-Systems/ml_system.ML"; | |
| 28 | ||
| 29 | if ML_System.name = "polyml-5.3.0" | |
| 30 | then use "ML-Systems/share_common_data_polyml-5.3.0.ML" | |
| 31 | else (); | |
| 32 | ||
| 33 | structure ML_System = | |
| 34 | struct | |
| 35 | ||
| 36 | open ML_System; | |
| 37 | ||
| 38 | fun share_common_data () = PolyML.shareCommonData PolyML.rootFunction; | |
| 39 | val save_state = PolyML.SaveState.saveState; | |
| 40 | ||
| 41 | end; | |
| 42 | ||
| 43 | ||
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 44 | (* exceptions *) | 
| 30673 | 45 | |
| 31427 
5a07cc86675d
reraise exceptions to preserve original position (ML system specific);
 wenzelm parents: 
31318diff
changeset | 46 | fun reraise exn = | 
| 
5a07cc86675d
reraise exceptions to preserve original position (ML system specific);
 wenzelm parents: 
31318diff
changeset | 47 | (case PolyML.exceptionLocation exn of | 
| 
5a07cc86675d
reraise exceptions to preserve original position (ML system specific);
 wenzelm parents: 
31318diff
changeset | 48 | NONE => raise exn | 
| 
5a07cc86675d
reraise exceptions to preserve original position (ML system specific);
 wenzelm parents: 
31318diff
changeset | 49 | | SOME location => PolyML.raiseWithLocation (exn, location)); | 
| 
5a07cc86675d
reraise exceptions to preserve original position (ML system specific);
 wenzelm parents: 
31318diff
changeset | 50 | |
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 51 | exception Interrupt = SML90.Interrupt; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 52 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 53 | use "General/exn.ML"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 54 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 55 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 56 | (* multithreading *) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 57 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 58 | val seconds = Time.fromReal; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 59 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 60 | if List.exists (fn s => s = "SingleAssignment") (PolyML.Compiler.structureNames ()) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 61 | then () | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 62 | else use "ML-Systems/single_assignment_polyml.ML"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 63 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 64 | open Thread; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 65 | use "ML-Systems/multithreading.ML"; | 
| 29714 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 66 | use "ML-Systems/multithreading_polyml.ML"; | 
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 67 | |
| 39616 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
38470diff
changeset | 68 | use "ML-Systems/unsynchronized.ML"; | 
| 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
38470diff
changeset | 69 | val _ = PolyML.Compiler.forgetValue "ref"; | 
| 
8052101883c3
renamed setmp_noncritical to Unsynchronized.setmp to emphasize its meaning;
 wenzelm parents: 
38470diff
changeset | 70 | val _ = PolyML.Compiler.forgetType "ref"; | 
| 29714 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 71 | |
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 72 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 73 | (* pervasive environment *) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 74 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 75 | val _ = PolyML.Compiler.forgetValue "isSome"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 76 | val _ = PolyML.Compiler.forgetValue "getOpt"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 77 | val _ = PolyML.Compiler.forgetValue "valOf"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 78 | val _ = PolyML.Compiler.forgetValue "foldl"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 79 | val _ = PolyML.Compiler.forgetValue "foldr"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 80 | val _ = PolyML.Compiler.forgetValue "print"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 81 | val _ = PolyML.Compiler.forgetValue "explode"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 82 | val _ = PolyML.Compiler.forgetValue "concat"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 83 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 84 | val ord = SML90.ord; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 85 | val chr = SML90.chr; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 86 | val raw_explode = SML90.explode; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 87 | val implode = SML90.implode; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 88 | |
| 54342 
fbcaa9f08879
avoid non-portable int constant -- make SML/NJ happy;
 wenzelm parents: 
53709diff
changeset | 89 | val io_buffer_size = 4096; | 
| 
fbcaa9f08879
avoid non-portable int constant -- make SML/NJ happy;
 wenzelm parents: 
53709diff
changeset | 90 | |
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 91 | fun quit () = exit 0; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 92 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 93 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 94 | (* ML runtime system *) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 95 | |
| 53709 
84522727f9d3
improved printing of exception trace in Poly/ML 5.5.1;
 wenzelm parents: 
52837diff
changeset | 96 | fun print_exception_trace (_: exn -> string) = PolyML.exception_trace; | 
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 97 | val timing = PolyML.timing; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 98 | val profiling = PolyML.profiling; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 99 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 100 | fun profile 0 f x = f x | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 101 | | profile n f x = | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 102 | let | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 103 | val _ = RunCall.run_call1 RuntimeCalls.POLY_SYS_profiler n; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 104 | val res = Exn.capture f x; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 105 | val _ = RunCall.run_call1 RuntimeCalls.POLY_SYS_profiler 0; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 106 | in Exn.release res end; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 107 | |
| 29714 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 108 | val pointer_eq = PolyML.pointerEq; | 
| 
6cef6700c841
Compatibility wrapper for experimental versions of Poly/ML after 5.2.1.
 wenzelm parents: diff
changeset | 109 | |
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 110 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 111 | (* ML compiler *) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 112 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 113 | use "ML-Systems/use_context.ML"; | 
| 56435 
28b34e8e4a80
approximate ML antiquotation @{here} for Isabelle/Pure bootstrap;
 wenzelm parents: 
56303diff
changeset | 114 | use "ML-Systems/ml_positions.ML"; | 
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 115 | use "ML-Systems/compiler_polyml.ML"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 116 | |
| 32778 | 117 | PolyML.Compiler.reportUnreferencedIds := true; | 
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 118 | PolyML.Compiler.printInAlphabeticalOrder := false; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 119 | PolyML.Compiler.maxInlineSize := 80; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 120 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 121 | fun ml_prompts p1 p2 = (PolyML.Compiler.prompt1 := p1; PolyML.Compiler.prompt2 := p2); | 
| 30626 | 122 | |
| 123 | ||
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 124 | (* ML toplevel pretty printing *) | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 125 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 126 | use "ML-Systems/ml_pretty.ML"; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 127 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 128 | local | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 129 | val depth = Unsynchronized.ref 10; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 130 | in | 
| 56281 | 131 | fun get_default_print_depth () = ! depth; | 
| 56285 | 132 | fun default_print_depth n = (depth := n; PolyML.print_depth n); | 
| 133 | val _ = default_print_depth 10; | |
| 47980 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 134 | end; | 
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 135 | |
| 
c81801f881b3
simplified Poly/ML setup -- 5.3.0 is now the common base-line;
 wenzelm parents: 
44249diff
changeset | 136 | val error_depth = PolyML.error_depth; | 
| 30626 | 137 | |
| 30676 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 138 | val pretty_ml = | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 139 | let | 
| 51638 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 140 | fun convert _ (PolyML.PrettyBreak (wd, _)) = ML_Pretty.Break (false, wd) | 
| 54718 | 141 | | convert _ (PolyML.PrettyBlock (_, _, | 
| 51638 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 142 |             [PolyML.ContextProperty ("fbrk", _)], [PolyML.PrettyString " "])) =
 | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 143 | ML_Pretty.Break (true, 1) | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 144 | | convert len (PolyML.PrettyBlock (ind, _, context, prts)) = | 
| 30676 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 145 | let | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 146 | fun property name default = | 
| 31318 | 147 | (case List.find (fn PolyML.ContextProperty (a, _) => name = a | _ => false) context of | 
| 148 | SOME (PolyML.ContextProperty (_, b)) => b | |
| 54718 | 149 | | _ => default); | 
| 30676 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 150 | val bg = property "begin" ""; | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 151 | val en = property "end" ""; | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 152 | val len' = property "length" len; | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 153 | in ML_Pretty.Block ((bg, en), map (convert len') prts, ind) end | 
| 31318 | 154 | | convert len (PolyML.PrettyString s) = | 
| 30676 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 155 | ML_Pretty.String (s, case Int.fromString len of SOME i => i | NONE => size s) | 
| 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 156 | in convert "" end; | 
| 30638 | 157 | |
| 51638 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 158 | fun ml_pretty (ML_Pretty.Break (false, wd)) = PolyML.PrettyBreak (wd, 0) | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 159 | | ml_pretty (ML_Pretty.Break (true, _)) = | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 160 |       PolyML.PrettyBlock (0, false, [PolyML.ContextProperty ("fbrk", "")],
 | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 161 | [PolyML.PrettyString " "]) | 
| 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 162 | | ml_pretty (ML_Pretty.Block ((bg, en), prts, ind)) = | 
| 30679 | 163 | let val context = | 
| 31318 | 164 |         (if bg = "" then [] else [PolyML.ContextProperty ("begin", bg)]) @
 | 
| 165 |         (if en = "" then [] else [PolyML.ContextProperty ("end", en)])
 | |
| 166 | in PolyML.PrettyBlock (ind, false, context, map ml_pretty prts) end | |
| 30676 
edca392a2abb
pretty_ml/ml_pretty: proper handling of markup and string length;
 wenzelm parents: 
30673diff
changeset | 167 | | ml_pretty (ML_Pretty.String (s, len)) = | 
| 31318 | 168 | if len = size s then PolyML.PrettyString s | 
| 169 | else PolyML.PrettyBlock | |
| 51638 
1275716f395b
more defensive representation of forced break within PolyML.PrettyBreak -- avoid accidental blowup if low-level operations are used, notably PolyML.makestring or its variant General.exnMessage;
 wenzelm parents: 
50911diff
changeset | 170 |         (0, false, [PolyML.ContextProperty ("length", Int.toString len)], [PolyML.PrettyString s]);
 | 
| 30626 | 171 | |
| 30673 | 172 | fun toplevel_pp context (_: string list) pp = | 
| 173 | use_text context (1, "pp") false | |
| 31318 | 174 |     ("PolyML.addPrettyPrinter (fn _ => fn _ => ml_pretty o Pretty.to_ML o (" ^ pp ^ "))");
 | 
| 30626 | 175 | |
| 36162 
0bd034a80a9a
added ML antiquotation @{make_string}, which produces proper pretty printed version in Poly/ML 5.3.0 or later;
 wenzelm parents: 
33543diff
changeset | 176 | val ml_make_string = | 
| 56303 
4cc3f4db3447
clarified Isabelle/ML bootstrap, such that Execution does not require ML_Compiler;
 wenzelm parents: 
56285diff
changeset | 177 | "(fn x => Pretty.string_of (Pretty.from_ML (pretty_ml (PolyML.prettyRepresentation (x, ML_Options.get_print_depth ())))))"; | 
| 36162 
0bd034a80a9a
added ML antiquotation @{make_string}, which produces proper pretty printed version in Poly/ML 5.3.0 or later;
 wenzelm parents: 
33543diff
changeset | 178 |