src/Pure/Thy/thy_info.ML
changeset 78757 a094bf81a496
parent 78717 1eca7abaa015
equal deleted inserted replaced
78756:96b3d13606b1 78757:a094bf81a496
   223 fun present_theory (Exn.Exn exn) = [Exn.Exn exn]
   223 fun present_theory (Exn.Exn exn) = [Exn.Exn exn]
   224   | present_theory (Exn.Res (Result {theory, present, ...})) =
   224   | present_theory (Exn.Res (Result {theory, present, ...})) =
   225       (case present () of
   225       (case present () of
   226         NONE => []
   226         NONE => []
   227       | SOME (context as {segments, ...}) =>
   227       | SOME (context as {segments, ...}) =>
   228           [Exn.capture (fn () => (apply_presentation context theory; (theory, segments))) ()]);
   228           [Exn.capture_body (fn () => (apply_presentation context theory; (theory, segments)))]);
   229 
   229 
   230 in
   230 in
   231 
   231 
   232 val schedule_theories = Thread_Attributes.uninterruptible (fn _ => fn tasks =>
   232 val schedule_theories = Thread_Attributes.uninterruptible (fn _ => fn tasks =>
   233   let
   233   let
   245               (singleton o Future.forks)
   245               (singleton o Future.forks)
   246                 {name = "theory:" ^ name, group = NONE,
   246                 {name = "theory:" ^ name, group = NONE,
   247                   deps = map (Future.task_of o #2) deps, pri = 0, interrupts = true}
   247                   deps = map (Future.task_of o #2) deps, pri = 0, interrupts = true}
   248                 (fn () => body (join_parents deps name parents))
   248                 (fn () => body (join_parents deps name parents))
   249             else
   249             else
   250               Future.value_result (Exn.capture (fn () => body (join_parents deps name parents)) ())
   250               Future.value_result (Exn.capture_body (fn () => body (join_parents deps name parents)))
   251         | Finished theory => Future.value (theory_result theory)));
   251         | Finished theory => Future.value (theory_result theory)));
   252 
   252 
   253     val results1 = futures |> maps (consolidate_theory o Future.join_result);
   253     val results1 = futures |> maps (consolidate_theory o Future.join_result);
   254 
   254 
   255     val present_results = futures |> maps (present_theory o Future.join_result);
   255     val present_results = futures |> maps (present_theory o Future.join_result);
   256     val results2 = (map o Exn.map_res) (K ()) present_results;
   256     val results2 = (map o Exn.map_res) (K ()) present_results;
   257 
   257 
   258     val results3 = futures
   258     val results3 = futures
   259       |> map (fn future => Exn.capture (fn () => result_commit (Future.join future) ()) ());
   259       |> map (fn future => Exn.capture_body (fn () => result_commit (Future.join future) ()));
   260 
   260 
   261     val results4 = map Exn.Exn (maps Task_Queue.group_status (Execution.reset ()));
   261     val results4 = map Exn.Exn (maps Task_Queue.group_status (Execution.reset ()));
   262 
   262 
   263     val _ = Par_Exn.release_all (results1 @ results2 @ results3 @ results4);
   263     val _ = Par_Exn.release_all (results1 @ results2 @ results3 @ results4);
   264   in Par_Exn.release_all present_results end);
   264   in Par_Exn.release_all present_results end);