equal
deleted
inserted
replaced
76 Graph.default_node (module_name, (Graph.empty, [])) |
76 Graph.default_node (module_name, (Graph.empty, [])) |
77 #> (Graph.map_node module_name o apfst) (Graph.new_node (name, (base, stmt))) |
77 #> (Graph.map_node module_name o apfst) (Graph.new_node (name, (base, stmt))) |
78 end; |
78 end; |
79 fun add_dependency name name' = |
79 fun add_dependency name name' = |
80 let |
80 let |
81 val (module_name, base) = dest_name name; |
81 val (module_name, _) = dest_name name; |
82 val (module_name', base') = dest_name name'; |
82 val (module_name', _) = dest_name name'; |
83 in if module_name = module_name' |
83 in if module_name = module_name' |
84 then (Graph.map_node module_name o apfst) (Graph.add_edge (name, name')) |
84 then (Graph.map_node module_name o apfst) (Graph.add_edge (name, name')) |
85 else (Graph.map_node module_name o apsnd) (AList.map_default (op =) (module_name', []) (insert (op =) name')) |
85 else (Graph.map_node module_name o apsnd) (AList.map_default (op =) (module_name', []) (insert (op =) name')) |
86 end; |
86 end; |
87 val proto_program = Graph.empty |
87 val proto_program = Graph.empty |
175 in |
175 in |
176 (map_module name_fragments o apsnd) (Graph.new_node (name, (base, Stmt stmt))) |
176 (map_module name_fragments o apsnd) (Graph.new_node (name, (base, Stmt stmt))) |
177 end; |
177 end; |
178 fun add_dependency name name' = |
178 fun add_dependency name name' = |
179 let |
179 let |
180 val (name_fragments, base) = dest_name name; |
180 val (name_fragments, _) = dest_name name; |
181 val (name_fragments', base') = dest_name name'; |
181 val (name_fragments', _) = dest_name name'; |
182 val (name_fragments_common, (diff, diff')) = |
182 val (name_fragments_common, (diff, diff')) = |
183 chop_prefix (op =) (name_fragments, name_fragments'); |
183 chop_prefix (op =) (name_fragments, name_fragments'); |
184 val is_module = not (null diff andalso null diff'); |
184 val is_module = not (null diff andalso null diff'); |
185 val dep = pairself hd (diff @ [name], diff' @ [name']); |
185 val dep = pairself hd (diff @ [name], diff' @ [name']); |
186 val add_edge = if is_module andalso not cyclic_modules |
186 val add_edge = if is_module andalso not cyclic_modules |