anchor.diff:          in
           (* Mutate the graph to mark the node as visited *)
           deps_add_dep dep_graph filename (direct_deps, Black);
  +        if Options.debug_any()
  +        then BU.print1 "Adding %s" filename;
           (* Also build the topological sort (Tarjan's algorithm). *)
  -        List.filter (function FriendImplementation _ -> true | _ -> false) direct_deps
  +        List.collect
  +          (function | FriendImplementation m -> [m]
  +                    | d ->
  +                      if for_extraction &&
  +                         Options.cmi() &&
  +                         List.contains (module_name_of_dep d) interfaces_needing_inlining
  +                      then [module_name_of_dep d]
  +                      else [])
  +          direct_deps
           @all_friends,
           filename :: all_files
       and all_friend_deps dep_graph cycle all_friends filenames =
  
positive.code:     file_system_map:files_for_module_name;   //an abstraction of the file system
      cmd_line_files:list<file_name>;          //all command-line files
      all_files:list<file_name>;               //all files
      interfaces_with_inlining:list<file_name> //interfaces that use `inline_for_extraction` require inlining
  }
  let deps_try_find (Deps m) k = BU.smap_try_find m k
  let deps_add_dep (Deps m) k v = BU.smap_add m k v
  let deps_keys (Deps m) = BU.smap_keys m
  let deps_empty () = Deps (BU.smap_create 41)
  let mk_deps dg fs c a i = {
  
negative.code:         let (Deps dg') = deps_empty() in
          BU.smap_fold dg (fun filename (dependences, color) () ->
              BU.smap_add dg' filename (widen_deps friends dependences, color)) ();
          if Options.debug_any()
          then BU.print_string "==============Phase2==================";
          all_friend_deps (Deps dg') [] ([], []) root_files
      in
      if Options.debug_any()
      then BU.print1 "Phase2 complete: all_files = %s" (String.concat ", " all_files);
      all_files,
      !widened
  
  