208 (fn () => |
208 (fn () => |
209 Toplevel.setmp_thread_position tr |
209 Toplevel.setmp_thread_position tr |
210 (fn () => Toplevel.print_state false st) ())) |
210 (fn () => Toplevel.print_state false st) ())) |
211 else (); |
211 else (); |
212 |
212 |
|
213 fun run int tr st = |
|
214 (case Toplevel.transition int tr st of |
|
215 SOME (st', NONE) => ([], SOME st') |
|
216 | SOME (_, SOME exn_info) => |
|
217 (case ML_Compiler.exn_messages (Runtime.EXCURSION_FAIL exn_info) of |
|
218 [] => Exn.interrupt () |
|
219 | errs => (errs, NONE)) |
|
220 | NONE => ([ML_Compiler.exn_message Runtime.TERMINATE], NONE)); |
|
221 |
213 in |
222 in |
214 |
223 |
215 fun run_command thy_name tr st = |
224 fun run_command thy_name tr st = |
216 (case |
225 (case |
217 (case Toplevel.init_of tr of |
226 (case Toplevel.init_of tr of |
218 SOME name => Exn.capture (fn () => Thy_Header.consistent_name thy_name name) () |
227 SOME name => Exn.capture (fn () => Thy_Header.consistent_name thy_name name) () |
219 | NONE => Exn.Result ()) of |
228 | NONE => Exn.Result ()) of |
220 Exn.Result () => |
229 Exn.Result () => |
221 let |
230 let |
222 val int = is_some (Toplevel.init_of tr); |
231 val int = is_some (Toplevel.init_of tr); |
223 val (errs, result) = |
232 val (errs, result) = run int tr st; |
224 (case Toplevel.transition int tr st of |
|
225 SOME (st', NONE) => ([], SOME st') |
|
226 | SOME (_, SOME exn_info) => |
|
227 (case ML_Compiler.exn_messages (Runtime.EXCURSION_FAIL exn_info) of |
|
228 [] => Exn.interrupt () |
|
229 | errs => (errs, NONE)) |
|
230 | NONE => ([ML_Compiler.exn_message Runtime.TERMINATE], NONE)); |
|
231 val _ = List.app (Toplevel.error_msg tr) errs; |
233 val _ = List.app (Toplevel.error_msg tr) errs; |
232 val _ = |
234 val _ = |
233 (case result of |
235 (case result of |
234 NONE => Toplevel.status tr Markup.failed |
236 NONE => Toplevel.status tr Markup.failed |
235 | SOME st' => |
237 | SOME st' => |