src/Pure/PIDE/query_operation.ML
changeset 78716 97dfba4405e3
parent 76403 fb9c567a67cd
child 78757 a094bf81a496
equal deleted inserted replaced
78715:9506b852ebdf 78716:97dfba4405e3
    17 
    17 
    18 fun register {name, pri} f =
    18 fun register {name, pri} f =
    19   Command.print_function (name ^ "_query")
    19   Command.print_function (name ^ "_query")
    20     (fn {args = instance :: args, ...} =>
    20     (fn {args = instance :: args, ...} =>
    21       SOME {delay = NONE, pri = pri, persistent = false, strict = false,
    21       SOME {delay = NONE, pri = pri, persistent = false, strict = false,
    22         print_fn = fn _ => Thread_Attributes.uninterruptible (fn restore_attributes => fn state =>
    22         print_fn = fn _ => Thread_Attributes.uninterruptible (fn run => fn state =>
    23           let
    23           let
    24             fun output_result s = Output.result [(Markup.instanceN, instance)] [s];
    24             fun output_result s = Output.result [(Markup.instanceN, instance)] [s];
    25             fun status m = output_result (Markup.markup_only m);
    25             fun status m = output_result (Markup.markup_only m);
    26             fun writeln_result s = output_result (Markup.markup Markup.writeln s);
    26             fun writeln_result s = output_result (Markup.markup Markup.writeln s);
    27             fun toplevel_error exn =
    27             fun toplevel_error exn =
    28               output_result (Markup.markup Markup.error (Runtime.exn_message exn));
    28               output_result (Markup.markup Markup.error (Runtime.exn_message exn));
    29 
    29 
    30             val _ = status Markup.running;
    30             val _ = status Markup.running;
    31             fun run () =
    31             fun main () =
    32               f {state = state, args = args, output_result = output_result,
    32               f {state = state, args = args, output_result = output_result,
    33                   writeln_result = writeln_result};
    33                   writeln_result = writeln_result};
    34             val _ =
    34             val _ =
    35               (case Exn.capture (*sic!*) (restore_attributes run) () of
    35               (case Exn.capture (*sic!*) (run main) () of
    36                 Exn.Res () => ()
    36                 Exn.Res () => ()
    37               | Exn.Exn exn => toplevel_error exn);
    37               | Exn.Exn exn => toplevel_error exn);
    38             val _ = status Markup.finished;
    38             val _ = status Markup.finished;
    39           in () end)}
    39           in () end)}
    40     | _ => NONE);
    40     | _ => NONE);