@@ -157,30 +157,7 @@ pub fn compile_input(sess: &Session,
157
157
158
158
let ( analysis, resolutions, mut hir_forest) = {
159
159
let defs = & mut * defs. borrow_mut ( ) ;
160
- resolve:: with_resolver ( sess, defs, control. make_glob_map , |mut resolver| {
161
- time ( sess. time_passes ( ) , "name resolution" , || {
162
- resolve:: resolve_crate ( & mut resolver, & expanded_crate) ;
163
- } ) ;
164
-
165
- // Lower ast -> hir.
166
- let hir_forest = time ( sess. time_passes ( ) , "lowering ast -> hir" , || {
167
- let lcx = LoweringContext :: new ( sess, Some ( & expanded_crate) , & mut resolver) ;
168
- hir_map:: Forest :: new ( lower_crate ( & lcx, & expanded_crate) , dep_graph)
169
- } ) ;
170
-
171
- ( ty:: CrateAnalysis {
172
- export_map : resolver. export_map ,
173
- access_levels : AccessLevels :: default ( ) ,
174
- reachable : NodeSet ( ) ,
175
- name : & id,
176
- glob_map : if resolver. make_glob_map { Some ( resolver. glob_map ) } else { None } ,
177
- } , Resolutions {
178
- def_map : RefCell :: new ( resolver. def_map ) ,
179
- freevars : resolver. freevars ,
180
- trait_map : resolver. trait_map ,
181
- maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
182
- } , hir_forest)
183
- } )
160
+ lower_and_resolve ( sess, & id, defs, & expanded_crate, dep_graph, control. make_glob_map )
184
161
} ;
185
162
186
163
// Discard MTWT tables that aren't required past lowering to HIR.
@@ -796,6 +773,39 @@ pub fn assign_node_ids(sess: &Session, krate: ast::Crate) -> ast::Crate {
796
773
krate
797
774
}
798
775
776
+ pub fn lower_and_resolve < ' a > ( sess : & Session ,
777
+ id : & ' a str ,
778
+ defs : & mut hir_map:: Definitions ,
779
+ krate : & ast:: Crate ,
780
+ dep_graph : DepGraph ,
781
+ make_glob_map : resolve:: MakeGlobMap )
782
+ -> ( ty:: CrateAnalysis < ' a > , Resolutions , hir_map:: Forest ) {
783
+ resolve:: with_resolver ( sess, defs, make_glob_map, |mut resolver| {
784
+ time ( sess. time_passes ( ) , "name resolution" , || {
785
+ resolve:: resolve_crate ( & mut resolver, krate) ;
786
+ } ) ;
787
+
788
+ // Lower ast -> hir.
789
+ let hir_forest = time ( sess. time_passes ( ) , "lowering ast -> hir" , || {
790
+ let lcx = LoweringContext :: new ( sess, Some ( krate) , & mut resolver) ;
791
+ hir_map:: Forest :: new ( lower_crate ( & lcx, krate) , dep_graph)
792
+ } ) ;
793
+
794
+ ( ty:: CrateAnalysis {
795
+ export_map : resolver. export_map ,
796
+ access_levels : AccessLevels :: default ( ) ,
797
+ reachable : NodeSet ( ) ,
798
+ name : & id,
799
+ glob_map : if resolver. make_glob_map { Some ( resolver. glob_map ) } else { None } ,
800
+ } , Resolutions {
801
+ def_map : RefCell :: new ( resolver. def_map ) ,
802
+ freevars : resolver. freevars ,
803
+ trait_map : resolver. trait_map ,
804
+ maybe_unused_trait_imports : resolver. maybe_unused_trait_imports ,
805
+ } , hir_forest)
806
+ } )
807
+ }
808
+
799
809
/// Run the resolution, typechecking, region checking and other
800
810
/// miscellaneous analysis passes on the crate. Return various
801
811
/// structures carrying the results of the analysis.
0 commit comments