259 | exn_msg _ (ERROR msg) = msg |
259 | exn_msg _ (ERROR msg) = msg |
260 | exn_msg detailed (EXCEPTION (exn, msg)) = cat_lines [exn_msg detailed exn, msg] |
260 | exn_msg detailed (EXCEPTION (exn, msg)) = cat_lines [exn_msg detailed exn, msg] |
261 | exn_msg detailed (EXCURSION_FAIL (exn, msg)) = cat_lines [exn_msg detailed exn, msg] |
261 | exn_msg detailed (EXCURSION_FAIL (exn, msg)) = cat_lines [exn_msg detailed exn, msg] |
262 | exn_msg false (THEORY (msg, _)) = msg |
262 | exn_msg false (THEORY (msg, _)) = msg |
263 | exn_msg true (THEORY (msg, thys)) = raised "THEORY" (msg :: map Context.str_of_thy thys) |
263 | exn_msg true (THEORY (msg, thys)) = raised "THEORY" (msg :: map Context.str_of_thy thys) |
264 | exn_msg detailed (MetaSimplifier.SIMPROC_FAIL (name, exn)) = |
|
265 fail_msg detailed "simproc" ((name, Position.none), exn) |
|
266 | exn_msg detailed (Attrib.ATTRIB_FAIL info) = fail_msg detailed "attribute" info |
|
267 | exn_msg detailed (Method.METHOD_FAIL info) = fail_msg detailed "method" info |
|
268 | exn_msg detailed (Antiquote.ANTIQUOTE_FAIL info) = fail_msg detailed "antiquotation" info |
|
269 | exn_msg false (Syntax.AST (msg, _)) = raised "AST" [msg] |
264 | exn_msg false (Syntax.AST (msg, _)) = raised "AST" [msg] |
270 | exn_msg true (Syntax.AST (msg, asts)) = |
265 | exn_msg true (Syntax.AST (msg, asts)) = |
271 raised "AST" (msg :: map (Pretty.string_of o Syntax.pretty_ast) asts) |
266 raised "AST" (msg :: map (Pretty.string_of o Syntax.pretty_ast) asts) |
272 | exn_msg false (TYPE (msg, _, _)) = raised "TYPE" [msg] |
267 | exn_msg false (TYPE (msg, _, _)) = raised "TYPE" [msg] |
273 | exn_msg true (TYPE (msg, Ts, ts)) = raised "TYPE" (msg :: |
268 | exn_msg true (TYPE (msg, Ts, ts)) = raised "TYPE" (msg :: |
281 | exn_msg _ Option.Option = raised "Option" [] |
276 | exn_msg _ Option.Option = raised "Option" [] |
282 | exn_msg _ Library.UnequalLengths = raised "UnequalLengths" [] |
277 | exn_msg _ Library.UnequalLengths = raised "UnequalLengths" [] |
283 | exn_msg _ Empty = raised "Empty" [] |
278 | exn_msg _ Empty = raised "Empty" [] |
284 | exn_msg _ Subscript = raised "Subscript" [] |
279 | exn_msg _ Subscript = raised "Subscript" [] |
285 | exn_msg _ (Fail msg) = raised "Fail" [msg] |
280 | exn_msg _ (Fail msg) = raised "Fail" [msg] |
286 | exn_msg _ exn = General.exnMessage exn |
281 | exn_msg _ exn = General.exnMessage exn; |
287 and fail_msg detailed kind ((name, pos), exn) = |
|
288 "Error in " ^ kind ^ " " ^ quote name ^ Position.str_of pos ^ ":\n" ^ exn_msg detailed exn; |
|
289 |
282 |
290 in |
283 in |
291 |
284 |
292 fun exn_message exn = exn_msg (! debug) exn; |
285 fun exn_message exn = exn_msg (! debug) exn; |
293 |
286 |
719 |
710 |
720 (* apply transformers to global state *) |
711 (* apply transformers to global state *) |
721 |
712 |
722 nonfix >> >>>; |
713 nonfix >> >>>; |
723 |
714 |
724 fun >> tr = |
715 fun >> tr = CRITICAL (fn () => |
725 (case apply true tr (get_state ()) of |
716 (case apply true tr (get_state ()) of |
726 NONE => false |
717 NONE => false |
727 | SOME (state', exn_info) => |
718 | SOME (state', exn_info) => |
728 (global_state := (state', exn_info); |
719 (global_state := (state', exn_info); |
729 print_exn exn_info; |
720 print_exn exn_info; |
730 true)); |
721 true))); |
731 |
722 |
732 fun >>> [] = () |
723 fun >>> [] = () |
733 | >>> (tr :: trs) = if >> tr then >>> trs else (); |
724 | >>> (tr :: trs) = if >> tr then >>> trs else (); |
734 |
725 |
735 fun init_state () = (>> (init_empty (K ()) empty); ()); |
726 fun init_state () = (>> (init_empty (K ()) empty); ()); |