diff -r 79bd24497ffd -r 9bbf7fd96bcd src/Pure/PIDE/document.ML --- a/src/Pure/PIDE/document.ML Wed Apr 04 21:03:30 2012 +0200 +++ b/src/Pure/PIDE/document.ML Thu Apr 05 10:45:53 2012 +0200 @@ -62,14 +62,14 @@ type perspective = (command_id -> bool) * command_id option; (*visible commands, last*) structure Entries = Linear_Set(type key = command_id val ord = int_ord); -type exec = exec_id * (Toplevel.state * unit lazy) lazy; (*eval/print process*) +type exec = (Toplevel.state * unit lazy) lazy; (*eval/print process*) val no_exec = (no_id, Lazy.value (Toplevel.toplevel, Lazy.value ())); abstype node = Node of {touched: bool, header: node_header, perspective: perspective, - entries: exec option Entries.T, (*command entries with excecutions*) + entries: (exec_id * exec) option Entries.T, (*command entries with excecutions*) last_exec: command_id option, (*last command with exec state assignment*) result: Toplevel.state lazy} and version = Version of node Graph.T (*development graph wrt. static imports*) @@ -356,11 +356,16 @@ NONE => true | SOME id => not (Keyword.is_theory_begin (#1 (the_command state id)))); in (visible', initial') end; - fun get_common ((prev, id), exec) (found, (_, flags)) = + fun get_common ((prev, id), opt_exec) (found, (_, flags)) = if found then NONE else let val found' = - is_none exec orelse op <> (pairself (Option.map #1) (exec, lookup_entry node0 id)); + (case opt_exec of + NONE => true + | SOME (exec_id, exec) => + (case lookup_entry node0 id of + NONE => true + | SOME (exec_id0, _) => exec_id <> exec_id0)); in SOME (found', (prev, update_flags prev flags)) end; val (found, (common, flags)) = iterate_entries get_common node (false, (NONE, (true, true))); @@ -409,9 +414,7 @@ val updated = nodes |> Graph.schedule (fn deps => fn (name, node) => - if not (is_touched node orelse is_required name) - then Future.value (([], [], []), node) - else + if is_touched node orelse is_required name then let val node0 = node_of old_version name; fun init () = init_theory deps node; @@ -455,7 +458,8 @@ |> set_result result |> set_touched false; in ((no_execs, execs, [(name, node')]), node') end) - end) + end + else Future.value (([], [], []), node)) |> Future.joins |> map #1; val command_execs =