20 SOME {delay = NONE, pri = pri, persistent = false, strict = false, |
20 SOME {delay = NONE, pri = pri, persistent = false, strict = false, |
21 print_fn = fn _ => uninterruptible (fn restore_attributes => fn state => |
21 print_fn = fn _ => uninterruptible (fn restore_attributes => fn state => |
22 let |
22 let |
23 fun result s = Output.result [(Markup.instanceN, instance)] [s]; |
23 fun result s = Output.result [(Markup.instanceN, instance)] [s]; |
24 fun status m = result (Markup.markup_only m); |
24 fun status m = result (Markup.markup_only m); |
25 fun output_result s = result (Markup.markup (Markup.writelnN, []) s); |
25 fun output_result s = result (Markup.markup Markup.writeln s); |
26 fun toplevel_error exn = |
26 fun toplevel_error exn = result (Markup.markup Markup.error (Runtime.exn_message exn)); |
27 result (Markup.markup (Markup.errorN, []) (Runtime.exn_message exn)); |
|
28 |
27 |
29 val _ = status Markup.running; |
28 val _ = status Markup.running; |
30 fun run () = f {state = state, args = args, output_result = output_result}; |
29 fun run () = f {state = state, args = args, output_result = output_result}; |
31 val _ = |
30 val _ = |
32 (case Exn.capture (*sic!*) (restore_attributes run) () of |
31 (case Exn.capture (*sic!*) (restore_attributes run) () of |
41 |
40 |
42 val _ = |
41 val _ = |
43 register {name = "print_state", pri = Task_Queue.urgent_pri + 2} |
42 register {name = "print_state", pri = Task_Queue.urgent_pri + 2} |
44 (fn {state = st, output_result, ...} => |
43 (fn {state = st, output_result, ...} => |
45 if Toplevel.is_proof st |
44 if Toplevel.is_proof st |
46 then output_result (Markup.markup (Markup.stateN, []) (Toplevel.string_of_state st)) |
45 then output_result (Markup.markup Markup.state (Toplevel.string_of_state st)) |
47 else ()); |
46 else ()); |
48 |
47 |
49 end; |
48 end; |