src/Pure/Isar/runtime.ML
changeset 50911 ee7fe4230642
parent 50505 33c92722cc3d
child 50914 fe4714886d92
equal deleted inserted replaced
50910:54f06ba192ef 50911:ee7fe4230642
    45 fun if_context NONE _ _ = []
    45 fun if_context NONE _ _ = []
    46   | if_context (SOME ctxt) f xs = map (f ctxt) xs;
    46   | if_context (SOME ctxt) f xs = map (f ctxt) xs;
    47 
    47 
    48 fun exn_messages exn_position e =
    48 fun exn_messages exn_position e =
    49   let
    49   let
       
    50     fun identify exn =
       
    51       let val exn' = Par_Exn.identify [] exn
       
    52       in (Par_Exn.the_serial exn', exn') end;
       
    53 
       
    54     fun flatten _ (CONTEXT (ctxt, exn)) = flatten (SOME ctxt) exn
       
    55       | flatten context (Exn.EXCEPTIONS exns) = maps (flatten context) exns
       
    56       | flatten context exn =
       
    57           (case Par_Exn.dest exn of
       
    58             SOME exns => maps (flatten context) exns
       
    59           | NONE => [(context, identify exn)]);
       
    60 
    50     fun raised exn name msgs =
    61     fun raised exn name msgs =
    51       let val pos = Position.here (exn_position exn) in
    62       let val pos = Position.here (exn_position exn) in
    52         (case msgs of
    63         (case msgs of
    53           [] => "exception " ^ name ^ " raised" ^ pos
    64           [] => "exception " ^ name ^ " raised" ^ pos
    54         | [msg] => "exception " ^ name ^ " raised" ^ pos ^ ": " ^ msg
    65         | [msg] => "exception " ^ name ^ " raised" ^ pos ^ ": " ^ msg
    55         | _ => cat_lines (("exception " ^ name ^ " raised" ^ pos ^ ":") :: msgs))
    66         | _ => cat_lines (("exception " ^ name ^ " raised" ^ pos ^ ":") :: msgs))
    56       end;
    67       end;
    57 
       
    58     fun flatten _ (CONTEXT (ctxt, exn)) = flatten (SOME ctxt) exn
       
    59       | flatten context (Exn.EXCEPTIONS exns) = maps (flatten context) exns
       
    60       | flatten context exn =
       
    61           (case Par_Exn.dest exn of
       
    62             SOME exns => maps (flatten context) exns
       
    63           | NONE => [(context, Par_Exn.serial exn)]);
       
    64 
    68 
    65     fun exn_msgs (context, (i, exn)) =
    69     fun exn_msgs (context, (i, exn)) =
    66       (case exn of
    70       (case exn of
    67         EXCURSION_FAIL (exn, loc) =>
    71         EXCURSION_FAIL (exn, loc) =>
    68           map (apsnd (fn msg => msg ^ Markup.markup Markup.no_report ("\n" ^ loc)))
    72           map (apsnd (fn msg => msg ^ Markup.markup Markup.no_report ("\n" ^ loc)))