src/Tools/Code/code_namespace.ML
changeset 47576 b32aae03e3d6
parent 44338 700008399ee5
child 51930 52fd62618631
equal deleted inserted replaced
47575:b90cd7016d4f 47576:b32aae03e3d6
    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