src/Pure/Concurrent/par_exn.ML
changeset 44296 0c4411e2fc90
parent 44271 89f40a5939b2
child 44334 605381e7c7c5
equal deleted inserted replaced
44295:e43f0ea90c9a 44296:0c4411e2fc90
    20 (* identification via serial numbers *)
    20 (* identification via serial numbers *)
    21 
    21 
    22 fun serial exn =
    22 fun serial exn =
    23   (case get_exn_serial exn of
    23   (case get_exn_serial exn of
    24     SOME i => (i, exn)
    24     SOME i => (i, exn)
    25   | NONE => let val i = Library.serial () in (i, set_exn_serial i exn) end);
    25   | NONE =>
       
    26       let
       
    27         val i = Library.serial ();
       
    28         val exn' = uninterruptible (fn _ => set_exn_serial i) exn;
       
    29       in (i, exn') end);
    26 
    30 
    27 val the_serial = the o get_exn_serial;
    31 val the_serial = the o get_exn_serial;
    28 
    32 
    29 val exn_ord = rev_order o int_ord o pairself the_serial;
    33 val exn_ord = rev_order o int_ord o pairself the_serial;
    30 
    34