equal
deleted
inserted
replaced
84 val empty_exec = Lazy.value Toplevel.toplevel; |
84 val empty_exec = Lazy.value Toplevel.toplevel; |
85 val empty_node = make_node (Exn.Exn (ERROR "Bad theory header"), Entries.empty, empty_exec); |
85 val empty_node = make_node (Exn.Exn (ERROR "Bad theory header"), Entries.empty, empty_exec); |
86 val clear_node = map_node (fn (header, _, _) => (header, Entries.empty, empty_exec)); |
86 val clear_node = map_node (fn (header, _, _) => (header, Entries.empty, empty_exec)); |
87 |
87 |
88 fun get_node nodes name = Graph.get_node nodes name handle Graph.UNDEF _ => empty_node; |
88 fun get_node nodes name = Graph.get_node nodes name handle Graph.UNDEF _ => empty_node; |
89 fun remove_node name nodes = Graph.del_node name nodes handle Graph.UNDEF _ => nodes; |
|
90 fun default_node name = Graph.default_node (name, empty_node); |
89 fun default_node name = Graph.default_node (name, empty_node); |
91 fun update_node name f = default_node name #> Graph.map_node name f; |
90 fun update_node name f = default_node name #> Graph.map_node name f; |
92 |
91 |
93 |
92 |
94 (* node edits and associated executions *) |
93 (* node edits and associated executions *) |
139 | Edits edits => |
138 | Edits edits => |
140 nodes |
139 nodes |
141 |> update_node name (edit_node edits) |
140 |> update_node name (edit_node edits) |
142 | Header header => |
141 | Header header => |
143 let |
142 let |
144 val node = get_node nodes name; |
|
145 val nodes1 = Graph.new_node (name, node) (remove_node name nodes); |
|
146 val parents = (case header of Exn.Res (_, parents, _) => parents | _ => []); |
143 val parents = (case header of Exn.Res (_, parents, _) => parents | _ => []); |
147 val nodes2 = fold default_node parents nodes1; |
144 val nodes1 = nodes |
|
145 |> default_node name |
|
146 |> fold default_node parents; |
|
147 val nodes2 = nodes1 |
|
148 |> fold (fn dep => Graph.del_edge (dep, name)) (Graph.imm_preds nodes1 name); |
148 val (header', nodes3) = |
149 val (header', nodes3) = |
149 (header, Graph.add_deps_acyclic (name, parents) nodes2) |
150 (header, Graph.add_deps_acyclic (name, parents) nodes2) |
150 handle Graph.CYCLES cs => (Exn.Exn (ERROR (cat_lines (map cycle_msg cs))), nodes2); |
151 handle Graph.CYCLES cs => (Exn.Exn (ERROR (cat_lines (map cycle_msg cs))), nodes2); |
151 in Graph.map_node name (set_header header') nodes3 end)); |
152 in Graph.map_node name (set_header header') nodes3 end)); |
152 |
153 |