src/Pure/PIDE/execution.ML
changeset 56305 06dcec23fb8d
parent 56304 40274e4f5ebf
child 56333 38f1422ef473
equal deleted inserted replaced
56304:40274e4f5ebf 56305:06dcec23fb8d
    15   val peek: Document_ID.exec -> Future.group list
    15   val peek: Document_ID.exec -> Future.group list
    16   val cancel: Document_ID.exec -> unit
    16   val cancel: Document_ID.exec -> unit
    17   val terminate: Document_ID.exec -> unit
    17   val terminate: Document_ID.exec -> unit
    18   type params = {name: string, pos: Position.T, pri: int}
    18   type params = {name: string, pos: Position.T, pri: int}
    19   val fork: params -> (unit -> 'a) -> 'a future
    19   val fork: params -> (unit -> 'a) -> 'a future
    20   val print: params -> (serial -> unit) -> unit
    20   val print: params -> (unit -> unit) -> unit
    21   val fork_prints: Document_ID.exec -> unit
    21   val fork_prints: Document_ID.exec -> unit
    22   val purge: Document_ID.exec list -> unit
    22   val purge: Document_ID.exec list -> unit
    23   val reset: unit -> Future.group list
    23   val reset: unit -> Future.group list
    24   val shutdown: unit -> unit
    24   val shutdown: unit -> unit
    25 end;
    25 end;
   133     in future end)) ();
   133     in future end)) ();
   134 
   134 
   135 
   135 
   136 (* print *)
   136 (* print *)
   137 
   137 
   138 fun print ({name, pos, pri}: params) pr =
   138 fun print ({name, pos, pri}: params) e =
   139   change_state (apsnd (fn execs =>
   139   change_state (apsnd (fn execs =>
   140     let
   140     let
   141       val exec_id = the_default 0 (Position.parse_id pos);
   141       val exec_id = the_default 0 (Position.parse_id pos);
   142       val i = serial ();
   142       val print = {name = name, pri = pri, body = e};
   143       val print = {name = name, pri = pri, body = fn () => pr i};
       
   144     in
   143     in
   145       (case Inttab.lookup execs exec_id of
   144       (case Inttab.lookup execs exec_id of
   146         SOME (groups, prints) => Inttab.update (exec_id, (groups, print :: prints)) execs
   145         SOME (groups, prints) => Inttab.update (exec_id, (groups, print :: prints)) execs
   147       | NONE => raise Fail (unregistered exec_id))
   146       | NONE => raise Fail (unregistered exec_id))
   148     end));
   147     end));