10
10
11
11
use rustc:: dep_graph:: DepGraph ;
12
12
use 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 ;
14
15
use rustc_mir as mir;
15
16
use rustc:: mir:: mir_map:: MirMap ;
16
17
use rustc:: session:: { Session , CompileResult , compile_result_from_err_count} ;
@@ -139,9 +140,32 @@ pub fn compile_input(sess: &Session,
139
140
140
141
time ( sess. time_passes ( ) ,
141
142
"external crate/lib resolution" ,
142
- || LocalCrateReader :: new ( sess, & cstore, & defs, & expanded_crate, & id)
143
+ || LocalCrateReader :: new ( sess, & cstore, defs, & expanded_crate, & id)
143
144
. read_crates ( & dep_graph) ) ;
144
145
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
+
145
169
// Lower ast -> hir.
146
170
let lcx = LoweringContext :: new ( sess, Some ( & expanded_crate) , defs) ;
147
171
let hir_forest = & mut time ( sess. time_passes ( ) ,
@@ -185,10 +209,6 @@ pub fn compile_input(sess: &Session,
185
209
hir:: check_attr:: check_crate ( sess, & expanded_crate) ;
186
210
} ) ;
187
211
188
- time ( sess. time_passes ( ) ,
189
- "early lint checks" ,
190
- || lint:: check_ast_crate ( sess, & expanded_crate) ) ;
191
-
192
212
let opt_crate = if keep_ast ( sess) {
193
213
Some ( & expanded_crate)
194
214
} else {
@@ -200,7 +220,11 @@ pub fn compile_input(sess: &Session,
200
220
hir_map,
201
221
& arenas,
202
222
& id,
203
- control. make_glob_map ,
223
+ analysis,
224
+ def_map,
225
+ freevars,
226
+ trait_map,
227
+ maybe_unused_trait_imports,
204
228
|tcx, mir_map, analysis, result| {
205
229
{
206
230
// Eventually, we will want to track plugins.
@@ -763,7 +787,11 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
763
787
hir_map : hir_map:: Map < ' tcx > ,
764
788
arenas : & ' tcx ty:: CtxtArenas < ' tcx > ,
765
789
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 ,
767
795
f : F )
768
796
-> Result < R , usize >
769
797
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,
788
816
} )
789
817
} ) ?;
790
818
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
-
810
819
let named_region_map = time ( time_passes,
811
820
"lifetime resolution" ,
812
821
|| middle:: resolve_lifetime:: krate ( sess,
0 commit comments