clarified modules;
authorwenzelm
Thu, 21 Sep 2023 18:14:28 +0200
changeset 78679 dc7455787a8e
parent 78678 5b2391321bab
child 78680 61a6b4b81d6e
clarified modules;
src/Pure/Concurrent/future.ML
src/Pure/Concurrent/par_exn.ML
src/Pure/Isar/runtime.ML
src/Pure/ML/exn_properties.ML
--- a/src/Pure/Concurrent/future.ML	Thu Sep 21 17:09:48 2023 +0200
+++ b/src/Pure/Concurrent/future.ML	Thu Sep 21 18:14:28 2023 +0200
@@ -419,7 +419,7 @@
       (case Position.id_of pos of
         NONE => []
       | SOME id => [(Markup.exec_idN, id)])
-    in Par_Exn.identify exec_id exn end);
+    in Exn_Properties.identify exec_id exn end);
 
 fun assign_result group result res =
   let
--- a/src/Pure/Concurrent/par_exn.ML	Thu Sep 21 17:09:48 2023 +0200
+++ b/src/Pure/Concurrent/par_exn.ML	Thu Sep 21 18:14:28 2023 +0200
@@ -7,8 +7,6 @@
 
 signature PAR_EXN =
 sig
-  val identify: Properties.T -> exn -> exn
-  val the_serial: exn -> int
   val make: exn list -> exn
   val dest: exn -> exn list option
   val is_interrupted: 'a Exn.result list -> bool
@@ -19,36 +17,19 @@
 structure Par_Exn: PAR_EXN =
 struct
 
-(* identification via serial numbers -- NOT portable! *)
-
-fun identify default_props exn =
-  let
-    val props = Exn_Properties.get exn;
-    val update_serial =
-      if Properties.defined props Markup.serialN then []
-      else [(Markup.serialN, serial_string ())];
-    val update_props = filter_out (Properties.defined props o #1) default_props;
-  in Exn_Properties.update (update_serial @ update_props) exn end;
-
-fun the_serial exn =
-  Value.parse_int (the (Properties.get (Exn_Properties.get exn) Markup.serialN));
-
-val exn_ord = rev_order o int_ord o apply2 the_serial;
-
-
 (* parallel exceptions *)
 
 exception Par_Exn of exn list;
-  (*non-empty list with unique identified elements sorted by exn_ord;
+  (*non-empty list with unique identified elements sorted by Exn_Properties.ord;
     no occurrences of Par_Exn or Exn.Interrupt*)
 
 fun par_exns (Par_Exn exns) = exns
-  | par_exns exn = if Exn.is_interrupt exn then [] else [identify [] exn];
+  | par_exns exn = if Exn.is_interrupt exn then [] else [Exn_Properties.identify [] exn];
 
 fun make exns =
   let
     val exnss = map par_exns exns;
-    val exns' = Ord_List.unions exn_ord exnss handle Option.Option => flat exnss;
+    val exns' = Ord_List.unions Exn_Properties.ord exnss handle Option.Option => flat exnss;
   in if null exns' then Exn.Interrupt else Par_Exn exns' end;
 
 fun dest (Par_Exn exns) = SOME exns
--- a/src/Pure/Isar/runtime.ML	Thu Sep 21 17:09:48 2023 +0200
+++ b/src/Pure/Isar/runtime.ML	Thu Sep 21 18:14:28 2023 +0200
@@ -75,9 +75,9 @@
 
 fun identify exn =
   let
-    val exn' = Par_Exn.identify [] exn;
+    val exn' = Exn_Properties.identify [] exn;
     val exec_id = Properties.get (Exn_Properties.get exn') Markup.exec_idN;
-    val i = Par_Exn.the_serial exn' handle Option.Option => serial ();
+    val i = Exn_Properties.the_serial exn' handle Option.Option => serial ();
   in ((i, exn'), exec_id) end;
 
 fun flatten _ (CONTEXT (ctxt, exn)) = flatten (SOME ctxt) exn
--- a/src/Pure/ML/exn_properties.ML	Thu Sep 21 17:09:48 2023 +0200
+++ b/src/Pure/ML/exn_properties.ML	Thu Sep 21 18:14:28 2023 +0200
@@ -9,7 +9,9 @@
   val position_of_polyml_location: ML_Compiler0.polyml_location -> Position.T
   val position: exn -> Position.T
   val get: exn -> Properties.T
-  val update: Properties.T -> exn -> exn
+  val identify: Properties.T -> exn -> exn
+  val the_serial: exn -> int
+  val ord: exn ord
 end;
 
 structure Exn_Properties: EXN_PROPERTIES =
@@ -68,4 +70,21 @@
         end
     end;
 
+
+(* identification via serial numbers *)
+
+fun identify default_props exn =
+  let
+    val props = get exn;
+    val update_serial =
+      if Properties.defined props Markup.serialN then []
+      else [(Markup.serialN, serial_string ())];
+    val update_props = filter_out (Properties.defined props o #1) default_props;
+  in update (update_serial @ update_props) exn end;
+
+fun the_serial exn =
+  Value.parse_int (the (Properties.get (get exn) Markup.serialN));
+
+val ord = rev_order o int_ord o apply2 the_serial;
+
 end;