always traverse required nodes, e.g. relevant for inlined errors of imported theory header;
--- a/src/Pure/PIDE/document.ML Fri Apr 24 19:08:43 2015 +0200
+++ b/src/Pure/PIDE/document.ML Fri Apr 24 20:33:10 2015 +0200
@@ -434,6 +434,21 @@
(* document execution *)
+fun make_required nodes =
+ let
+ fun all_preds P =
+ String_Graph.fold (fn (a, (node, _)) => P node ? cons a) nodes []
+ |> String_Graph.all_preds nodes
+ |> Symtab.make_set;
+
+ val all_visible = all_preds visible_node;
+ val all_required = all_preds required_node;
+ in
+ Symtab.fold (fn (a, ()) =>
+ exists (Symtab.defined all_visible) (String_Graph.immediate_succs nodes a) ?
+ Symtab.update (a, ())) all_visible all_required
+ end;
+
fun start_execution state = state |> map_state (fn (versions, blobs, commands, execution) =>
timeit "Document.start_execution" (fn () =>
let
@@ -446,10 +461,13 @@
fun finished_import (name, (node, _)) =
finished_result node orelse is_some (loaded_theory name);
+
+ val nodes = nodes_of (the_version state version_id);
+ val required = make_required nodes;
val _ =
- nodes_of (the_version state version_id) |> String_Graph.schedule
+ nodes |> String_Graph.schedule
(fn deps => fn (name, node) =>
- if visible_node node orelse pending_result node then
+ if Symtab.defined required name orelse visible_node node orelse pending_result node then
let
fun body () =
(if forall finished_import deps then
@@ -498,21 +516,6 @@
local
-fun make_required nodes =
- let
- fun all_preds P =
- String_Graph.fold (fn (a, (node, _)) => P node ? cons a) nodes []
- |> String_Graph.all_preds nodes
- |> Symtab.make_set;
-
- val all_visible = all_preds visible_node;
- val all_required = all_preds required_node;
- in
- Symtab.fold (fn (a, ()) =>
- exists (Symtab.defined all_visible) (String_Graph.immediate_succs nodes a) ?
- Symtab.update (a, ())) all_visible all_required
- end;
-
fun init_theory deps node span =
let
val master_dir = master_directory node;