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))) |