1010
1111use rustc:: dep_graph:: DepGraph ;
1212use rustc:: hir;
13- use rustc:: hir:: map as hir_map;
13+ use rustc:: hir:: { map as hir_map, FreevarMap , TraitMap } ;
14+ use rustc:: hir:: def:: DefMap ;
1415use rustc_mir as mir;
1516use rustc:: mir:: mir_map:: MirMap ;
1617use rustc:: session:: { Session , CompileResult , compile_result_from_err_count} ;
@@ -139,9 +140,32 @@ pub fn compile_input(sess: &Session,
139140
140141 time ( sess. time_passes ( ) ,
141142 "external crate/lib resolution" ,
142- || LocalCrateReader :: new ( sess, & cstore, & defs, & expanded_crate, & id)
143+ || LocalCrateReader :: new ( sess, & cstore, defs, & expanded_crate, & id)
143144 . read_crates ( & dep_graph) ) ;
144145
146+ time ( sess. time_passes ( ) ,
147+ "early lint checks" ,
148+ || lint:: check_ast_crate ( sess, & expanded_crate) ) ;
149+
150+ let resolve:: CrateMap {
151+ def_map,
152+ freevars,
153+ maybe_unused_trait_imports,
154+ export_map,
155+ trait_map,
156+ glob_map,
157+ } = time ( sess. time_passes ( ) , "name resolution" , || {
158+ resolve:: resolve_crate ( sess, & expanded_crate, & defs. borrow ( ) , control. make_glob_map )
159+ } ) ;
160+
161+ let analysis = ty:: CrateAnalysis {
162+ export_map : export_map,
163+ access_levels : AccessLevels :: default ( ) ,
164+ reachable : NodeSet ( ) ,
165+ name : & id,
166+ glob_map : glob_map,
167+ } ;
168+
145169 // Lower ast -> hir.
146170 let lcx = LoweringContext :: new ( sess, Some ( & expanded_crate) , defs) ;
147171 let hir_forest = & mut time ( sess. time_passes ( ) ,
@@ -185,10 +209,6 @@ pub fn compile_input(sess: &Session,
185209 hir:: check_attr:: check_crate ( sess, & expanded_crate) ;
186210 } ) ;
187211
188- time ( sess. time_passes ( ) ,
189- "early lint checks" ,
190- || lint:: check_ast_crate ( sess, & expanded_crate) ) ;
191-
192212 let opt_crate = if keep_ast ( sess) {
193213 Some ( & expanded_crate)
194214 } else {
@@ -200,7 +220,11 @@ pub fn compile_input(sess: &Session,
200220 hir_map,
201221 & arenas,
202222 & id,
203- control. make_glob_map ,
223+ analysis,
224+ def_map,
225+ freevars,
226+ trait_map,
227+ maybe_unused_trait_imports,
204228 |tcx, mir_map, analysis, result| {
205229 {
206230 // Eventually, we will want to track plugins.
@@ -763,7 +787,11 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
763787 hir_map : hir_map:: Map < ' tcx > ,
764788 arenas : & ' tcx ty:: CtxtArenas < ' tcx > ,
765789 name : & str ,
766- make_glob_map : resolve:: MakeGlobMap ,
790+ mut analysis : ty:: CrateAnalysis ,
791+ def_map : RefCell < DefMap > ,
792+ freevars : FreevarMap ,
793+ trait_map : TraitMap ,
794+ maybe_unused_trait_imports : NodeSet ,
767795 f : F )
768796 -> Result < R , usize >
769797 where F : FnOnce ( & TyCtxt < ' tcx > , Option < MirMap < ' tcx > > , ty:: CrateAnalysis , CompileResult ) -> R
@@ -788,25 +816,6 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
788816 } )
789817 } ) ?;
790818
791- let resolve:: CrateMap {
792- def_map,
793- freevars,
794- maybe_unused_trait_imports,
795- export_map,
796- trait_map,
797- glob_map,
798- } = time ( sess. time_passes ( ) ,
799- "name resolution" ,
800- || resolve:: resolve_crate ( sess, & hir_map, make_glob_map) ) ;
801-
802- let mut analysis = ty:: CrateAnalysis {
803- export_map : export_map,
804- access_levels : AccessLevels :: default ( ) ,
805- reachable : NodeSet ( ) ,
806- name : name,
807- glob_map : glob_map,
808- } ;
809-
810819 let named_region_map = time ( time_passes,
811820 "lifetime resolution" ,
812821 || middle:: resolve_lifetime:: krate ( sess,
0 commit comments