src/Pure/PIDE/execution.ML
changeset 78757 a094bf81a496
parent 73101 3d5d949cd865
equal deleted inserted replaced
78756:96b3d13606b1 78757:a094bf81a496
   163           (fn () =>
   163           (fn () =>
   164             let
   164             let
   165               val task = the (Future.worker_task ());
   165               val task = the (Future.worker_task ());
   166               val _ = status task [Markup.running];
   166               val _ = status task [Markup.running];
   167               val result =
   167               val result =
   168                 Exn.capture (Future.interruptible_task e) ()
   168                 Exn.capture_body (Future.interruptible_task e)
   169                 |> Future.identify_result pos
   169                 |> Future.identify_result pos
   170                 |> Exn.map_exn Runtime.thread_context;
   170                 |> Exn.map_exn Runtime.thread_context;
   171               val errors =
   171               val errors =
   172                 Exn.capture (fn () =>
   172                 Exn.capture_body (fn () =>
   173                   (case result of
   173                   (case result of
   174                     Exn.Exn exn =>
   174                     Exn.Exn exn =>
   175                      (status task [Markup.failed];
   175                      (status task [Markup.failed];
   176                       status task [Markup.finished];
   176                       status task [Markup.finished];
   177                       Position.report pos (Markup.bad ());
   177                       Position.report pos (Markup.bad ());
   178                       if exec_id = 0 then ()
   178                       if exec_id = 0 then ()
   179                       else List.app (Future.error_message pos) (Runtime.exn_messages exn))
   179                       else List.app (Future.error_message pos) (Runtime.exn_messages exn))
   180                   | Exn.Res _ =>
   180                   | Exn.Res _ =>
   181                       status task [Markup.finished])) ();
   181                       status task [Markup.finished]));
   182               val _ = status task [Markup.joined];
   182               val _ = status task [Markup.joined];
   183             in Exn.release errors; Exn.release result end);
   183             in Exn.release errors; Exn.release result end);
   184 
   184 
   185       val _ = status (Future.task_of future) [Markup.forked];
   185       val _ = status (Future.task_of future) [Markup.forked];
   186     in future end)) ();
   186     in future end)) ();