88// option. This file may not be copied, modified, or distributed
99// except according to those terms.
1010
11- use rustc:: dep_graph:: DepGraph ;
1211use rustc:: hir;
1312use rustc:: hir:: { map as hir_map, FreevarMap , TraitMap } ;
1413use rustc:: hir:: def:: DefMap ;
@@ -27,7 +26,7 @@ use rustc::util::nodemap::NodeSet;
2726use rustc_back:: sha2:: { Sha256 , Digest } ;
2827use rustc_borrowck as borrowck;
2928use rustc_incremental;
30- use rustc_resolve as resolve ;
29+ use rustc_resolve:: { MakeGlobMap , Resolver } ;
3130use rustc_metadata:: macro_import;
3231use rustc_metadata:: creader:: read_local_crates;
3332use rustc_metadata:: cstore:: CStore ;
@@ -291,7 +290,7 @@ pub struct CompileController<'a> {
291290 pub after_analysis : PhaseController < ' a > ,
292291 pub after_llvm : PhaseController < ' a > ,
293292
294- pub make_glob_map : resolve :: MakeGlobMap ,
293+ pub make_glob_map : MakeGlobMap ,
295294}
296295
297296impl < ' a > CompileController < ' a > {
@@ -303,7 +302,7 @@ impl<'a> CompileController<'a> {
303302 after_hir_lowering : PhaseController :: basic ( ) ,
304303 after_analysis : PhaseController :: basic ( ) ,
305304 after_llvm : PhaseController :: basic ( ) ,
306- make_glob_map : resolve :: MakeGlobMap :: No ,
305+ make_glob_map : MakeGlobMap :: No ,
307306 }
308307 }
309308}
@@ -562,7 +561,7 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
562561 mut krate : ast:: Crate ,
563562 crate_name : & ' a str ,
564563 addl_plugins : Option < Vec < String > > ,
565- make_glob_map : resolve :: MakeGlobMap )
564+ make_glob_map : MakeGlobMap )
566565 -> Result < ExpansionResult < ' a > , usize > {
567566 let time_passes = sess. time_passes ( ) ;
568567
@@ -728,7 +727,7 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
728727 krate = assign_node_ids ( sess, krate) ;
729728
730729 // Collect defintions for def ids.
731- let mut defs =
730+ let defs =
732731 time ( sess. time_passes ( ) , "collecting defs" , || hir_map:: collect_definitions ( & krate) ) ;
733732
734733 time ( sess. time_passes ( ) ,
@@ -743,8 +742,17 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
743742 "AST validation" ,
744743 || ast_validation:: check_crate ( sess, & krate) ) ;
745744
746- let ( analysis, resolutions, hir_forest) =
747- lower_and_resolve ( sess, crate_name, & mut defs, & krate, & sess. dep_graph , make_glob_map) ;
745+ let resolver_arenas = Resolver :: arenas ( ) ;
746+ let mut resolver = Resolver :: new ( sess, defs, make_glob_map, & resolver_arenas) ;
747+
748+ time ( sess. time_passes ( ) , "name resolution" , || {
749+ resolver. resolve_crate ( & krate) ;
750+ } ) ;
751+
752+ // Lower ast -> hir.
753+ let hir_forest = time ( sess. time_passes ( ) , "lowering ast -> hir" , || {
754+ hir_map:: Forest :: new ( lower_crate ( sess, & krate, & mut resolver) , & sess. dep_graph )
755+ } ) ;
748756
749757 // Discard MTWT tables that aren't required past lowering to HIR.
750758 if !keep_mtwt_tables ( sess) {
@@ -753,9 +761,20 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
753761
754762 Ok ( ExpansionResult {
755763 expanded_crate : krate,
756- defs : defs,
757- analysis : analysis,
758- resolutions : resolutions,
764+ defs : resolver. definitions ,
765+ analysis : ty:: CrateAnalysis {
766+ export_map : resolver. export_map ,
767+ access_levels : AccessLevels :: default ( ) ,
768+ reachable : NodeSet ( ) ,
769+ name : crate_name,
770+ glob_map : if resolver. make_glob_map { Some ( resolver. glob_map ) } else { None } ,
771+ } ,
772+ resolutions : Resolutions {
773+ def_map : resolver. def_map ,
774+ freevars : resolver. freevars ,
775+ trait_map : resolver. trait_map ,
776+ maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
777+ } ,
759778 hir_forest : hir_forest
760779 } )
761780}
@@ -807,38 +826,6 @@ pub fn assign_node_ids(sess: &Session, krate: ast::Crate) -> ast::Crate {
807826 krate
808827}
809828
810- pub fn lower_and_resolve < ' a > ( sess : & Session ,
811- id : & ' a str ,
812- defs : & mut hir_map:: Definitions ,
813- krate : & ast:: Crate ,
814- dep_graph : & DepGraph ,
815- make_glob_map : resolve:: MakeGlobMap )
816- -> ( ty:: CrateAnalysis < ' a > , Resolutions , hir_map:: Forest ) {
817- resolve:: with_resolver ( sess, defs, make_glob_map, |mut resolver| {
818- time ( sess. time_passes ( ) , "name resolution" , || {
819- resolve:: resolve_crate ( & mut resolver, krate) ;
820- } ) ;
821-
822- // Lower ast -> hir.
823- let hir_forest = time ( sess. time_passes ( ) , "lowering ast -> hir" , || {
824- hir_map:: Forest :: new ( lower_crate ( sess, krate, & mut resolver) , dep_graph)
825- } ) ;
826-
827- ( ty:: CrateAnalysis {
828- export_map : resolver. export_map ,
829- access_levels : AccessLevels :: default ( ) ,
830- reachable : NodeSet ( ) ,
831- name : & id,
832- glob_map : if resolver. make_glob_map { Some ( resolver. glob_map ) } else { None } ,
833- } , Resolutions {
834- def_map : resolver. def_map ,
835- freevars : resolver. freevars ,
836- trait_map : resolver. trait_map ,
837- maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
838- } , hir_forest)
839- } )
840- }
841-
842829/// Run the resolution, typechecking, region checking and other
843830/// miscellaneous analysis passes on the crate. Return various
844831/// structures carrying the results of the analysis.
0 commit comments