src/Pure/PIDE/document.ML
changeset 52775 e0169f13bd37
parent 52774 627fb639a2d9
child 52776 fd81d51460b7
equal deleted inserted replaced
52774:627fb639a2d9 52775:e0169f13bd37
   301         nodes_of (the_version state version_id) |> String_Graph.schedule
   301         nodes_of (the_version state version_id) |> String_Graph.schedule
   302           (fn deps => fn (name, node) =>
   302           (fn deps => fn (name, node) =>
   303             if visible_node node orelse pending_result node then
   303             if visible_node node orelse pending_result node then
   304               let
   304               let
   305                 val former_task = Symtab.lookup frontier name;
   305                 val former_task = Symtab.lookup frontier name;
       
   306                 fun body () =
       
   307                   iterate_entries (fn (_, opt_exec) => fn () =>
       
   308                     (case opt_exec of
       
   309                       SOME exec =>
       
   310                         if Execution.is_running execution_id
       
   311                         then SOME (Command.exec execution_id exec)
       
   312                         else NONE
       
   313                     | NONE => NONE)) node ()
       
   314                   handle exn => if Exn.is_interrupt exn then () (*sic!*) else reraise exn;
   306                 val future =
   315                 val future =
   307                   (singleton o Future.forks)
   316                   (singleton o Future.forks)
   308                     {name = "theory:" ^ name, group = SOME (Future.new_group NONE),
   317                     {name = "theory:" ^ name, group = SOME (Future.new_group NONE),
   309                       deps = the_list former_task @ map #2 (maps #2 deps),
   318                       deps = the_list former_task @ map #2 (maps #2 deps),
   310                       pri = pri, interrupts = false}
   319                       pri = pri, interrupts = false} body;
   311                     (fn () =>
       
   312                       iterate_entries (fn (_, opt_exec) => fn () =>
       
   313                         (case opt_exec of
       
   314                           SOME exec =>
       
   315                             if Execution.is_running execution_id
       
   316                             then SOME (Command.exec execution_id exec)
       
   317                             else NONE
       
   318                         | NONE => NONE)) node ());
       
   319               in [(name, Future.task_of future)] end
   320               in [(name, Future.task_of future)] end
   320             else [])
   321             else [])
   321       else [];
   322       else [];
   322     val frontier' = (fold o fold) Symtab.update new_tasks frontier;
   323     val frontier' = (fold o fold) Symtab.update new_tasks frontier;
   323     val execution' = {version_id = version_id, execution_id = execution_id, frontier = frontier'};
   324     val execution' = {version_id = version_id, execution_id = execution_id, frontier = frontier'};