331 let |
331 let |
332 val is_init = Toplevel.is_init tr; |
332 val is_init = Toplevel.is_init tr; |
333 val is_proof = Keyword.is_proof (Toplevel.name_of tr); |
333 val is_proof = Keyword.is_proof (Toplevel.name_of tr); |
334 |
334 |
335 val _ = Multithreading.interrupted (); |
335 val _ = Multithreading.interrupted (); |
336 val _ = Toplevel.status tr Markup.forked; |
336 val _ = Toplevel.status tr Isabelle_Markup.forked; |
337 val start = Timing.start (); |
337 val start = Timing.start (); |
338 val (errs, result) = run (is_init orelse is_proof) (Toplevel.set_print false tr) st; |
338 val (errs, result) = run (is_init orelse is_proof) (Toplevel.set_print false tr) st; |
339 val _ = timing tr (Timing.result start); |
339 val _ = timing tr (Timing.result start); |
340 val _ = Toplevel.status tr Markup.joined; |
340 val _ = Toplevel.status tr Isabelle_Markup.joined; |
341 val _ = List.app (Toplevel.error_msg tr) errs; |
341 val _ = List.app (Toplevel.error_msg tr) errs; |
342 in |
342 in |
343 (case result of |
343 (case result of |
344 NONE => |
344 NONE => |
345 let |
345 let |
346 val _ = if null errs then Exn.interrupt () else (); |
346 val _ = if null errs then Exn.interrupt () else (); |
347 val _ = Toplevel.status tr Markup.failed; |
347 val _ = Toplevel.status tr Isabelle_Markup.failed; |
348 in (st, no_print) end |
348 in (st, no_print) end |
349 | SOME st' => |
349 | SOME st' => |
350 let |
350 let |
351 val _ = Toplevel.status tr Markup.finished; |
351 val _ = Toplevel.status tr Isabelle_Markup.finished; |
352 val _ = proof_status tr st'; |
352 val _ = proof_status tr st'; |
353 val do_print = |
353 val do_print = |
354 not is_init andalso |
354 not is_init andalso |
355 (Toplevel.print_of tr orelse (is_proof andalso Toplevel.is_proof st')); |
355 (Toplevel.print_of tr orelse (is_proof andalso Toplevel.is_proof st')); |
356 in (st', if do_print then print_state tr st' else no_print) end) |
356 in (st', if do_print then print_state tr st' else no_print) end) |