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 ;
@@ -49,13 +48,11 @@ use std::ffi::{OsString, OsStr};
4948use std:: fs;
5049use std:: io:: { self , Write } ;
5150use std:: path:: { Path , PathBuf } ;
52- use syntax:: ast :: { self , NodeIdAssigner } ;
51+ use syntax:: { ast , diagnostics , visit } ;
5352use syntax:: attr:: { self , AttrMetaMethods } ;
54- use syntax:: diagnostics;
5553use syntax:: fold:: Folder ;
5654use syntax:: parse:: { self , PResult , token} ;
5755use syntax:: util:: node_count:: NodeCounter ;
58- use syntax:: visit;
5956use syntax;
6057use syntax_ext;
6158
@@ -293,7 +290,7 @@ pub struct CompileController<'a> {
293290 pub after_analysis : PhaseController < ' a > ,
294291 pub after_llvm : PhaseController < ' a > ,
295292
296- pub make_glob_map : resolve :: MakeGlobMap ,
293+ pub make_glob_map : MakeGlobMap ,
297294}
298295
299296impl < ' a > CompileController < ' a > {
@@ -305,7 +302,7 @@ impl<'a> CompileController<'a> {
305302 after_hir_lowering : PhaseController :: basic ( ) ,
306303 after_analysis : PhaseController :: basic ( ) ,
307304 after_llvm : PhaseController :: basic ( ) ,
308- make_glob_map : resolve :: MakeGlobMap :: No ,
305+ make_glob_map : MakeGlobMap :: No ,
309306 }
310307 }
311308}
@@ -564,7 +561,7 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
564561 mut krate : ast:: Crate ,
565562 crate_name : & ' a str ,
566563 addl_plugins : Option < Vec < String > > ,
567- make_glob_map : resolve :: MakeGlobMap )
564+ make_glob_map : MakeGlobMap )
568565 -> Result < ExpansionResult < ' a > , usize > {
569566 let time_passes = sess. time_passes ( ) ;
570567
@@ -729,13 +726,16 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
729726
730727 krate = assign_node_ids ( sess, krate) ;
731728
729+ let resolver_arenas = Resolver :: arenas ( ) ;
730+ let mut resolver = Resolver :: new ( sess, make_glob_map, & resolver_arenas) ;
731+
732732 // Collect defintions for def ids.
733- let mut defs =
734- time ( sess. time_passes ( ) , "collecting defs" , || hir_map:: collect_definitions ( & krate) ) ;
733+ time ( sess. time_passes ( ) , "collecting defs" , || resolver. definitions . collect ( & krate) ) ;
735734
736- time ( sess. time_passes ( ) ,
737- "external crate/lib resolution" ,
738- || read_local_crates ( sess, & cstore, & defs, & krate, crate_name, & sess. dep_graph ) ) ;
735+ time ( sess. time_passes ( ) , "external crate/lib resolution" , || {
736+ let defs = & resolver. definitions ;
737+ read_local_crates ( sess, & cstore, defs, & krate, crate_name, & sess. dep_graph )
738+ } ) ;
739739
740740 time ( sess. time_passes ( ) ,
741741 "early lint checks" ,
@@ -745,8 +745,14 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
745745 "AST validation" ,
746746 || ast_validation:: check_crate ( sess, & krate) ) ;
747747
748- let ( analysis, resolutions, hir_forest) =
749- lower_and_resolve ( sess, crate_name, & mut defs, & krate, & sess. dep_graph , make_glob_map) ;
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+ } ) ;
750756
751757 // Discard MTWT tables that aren't required past lowering to HIR.
752758 if !keep_mtwt_tables ( sess) {
@@ -755,9 +761,20 @@ pub fn phase_2_configure_and_expand<'a>(sess: &Session,
755761
756762 Ok ( ExpansionResult {
757763 expanded_crate : krate,
758- defs : defs,
759- analysis : analysis,
760- 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+ } ,
761778 hir_forest : hir_forest
762779 } )
763780}
@@ -809,38 +826,6 @@ pub fn assign_node_ids(sess: &Session, krate: ast::Crate) -> ast::Crate {
809826 krate
810827}
811828
812- pub fn lower_and_resolve < ' a > ( sess : & Session ,
813- id : & ' a str ,
814- defs : & mut hir_map:: Definitions ,
815- krate : & ast:: Crate ,
816- dep_graph : & DepGraph ,
817- make_glob_map : resolve:: MakeGlobMap )
818- -> ( ty:: CrateAnalysis < ' a > , Resolutions , hir_map:: Forest ) {
819- resolve:: with_resolver ( sess, defs, make_glob_map, |mut resolver| {
820- time ( sess. time_passes ( ) , "name resolution" , || {
821- resolve:: resolve_crate ( & mut resolver, krate) ;
822- } ) ;
823-
824- // Lower ast -> hir.
825- let hir_forest = time ( sess. time_passes ( ) , "lowering ast -> hir" , || {
826- hir_map:: Forest :: new ( lower_crate ( sess, krate, sess, & mut resolver) , dep_graph)
827- } ) ;
828-
829- ( ty:: CrateAnalysis {
830- export_map : resolver. export_map ,
831- access_levels : AccessLevels :: default ( ) ,
832- reachable : NodeSet ( ) ,
833- name : & id,
834- glob_map : if resolver. make_glob_map { Some ( resolver. glob_map ) } else { None } ,
835- } , Resolutions {
836- def_map : resolver. def_map ,
837- freevars : resolver. freevars ,
838- trait_map : resolver. trait_map ,
839- maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
840- } , hir_forest)
841- } )
842- }
843-
844829/// Run the resolution, typechecking, region checking and other
845830/// miscellaneous analysis passes on the crate. Return various
846831/// structures carrying the results of the analysis.
0 commit comments