Skip to content

Commit abec20b

Browse files
committed
Refactor out driver::lower_and_resolve
1 parent 6710eef commit abec20b

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

src/librustc_driver/driver.rs

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -157,30 +157,7 @@ pub fn compile_input(sess: &Session,
157157

158158
let (analysis, resolutions, mut hir_forest) = {
159159
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)
184161
};
185162

186163
// 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 {
796773
krate
797774
}
798775

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+
799809
/// Run the resolution, typechecking, region checking and other
800810
/// miscellaneous analysis passes on the crate. Return various
801811
/// structures carrying the results of the analysis.

0 commit comments

Comments
 (0)