rustc: Migrate CrateStore::item_body
to a query
This commit migrates the `item_body` method on `CrateStore` to a query instead to enable better tracking of dependencies and whatnot.
This commit is contained in:
parent
953490ddfa
commit
84ae4b75be
7 changed files with 14 additions and 30 deletions
|
@ -563,6 +563,7 @@ define_dep_nodes!( <'tcx>
|
|||
[] GetLangItems,
|
||||
[] DefinedLangItems(CrateNum),
|
||||
[] MissingLangItems(CrateNum),
|
||||
[] ItemBody(DefId),
|
||||
);
|
||||
|
||||
trait DepNodeParams<'a, 'gcx: 'tcx + 'a, 'tcx: 'a> : fmt::Debug {
|
||||
|
|
|
@ -42,7 +42,6 @@ use syntax::ext::base::SyntaxExtension;
|
|||
use syntax::symbol::Symbol;
|
||||
use syntax_pos::Span;
|
||||
use rustc_back::target::Target;
|
||||
use hir;
|
||||
|
||||
pub use self::NativeLibraryKind::*;
|
||||
|
||||
|
@ -258,10 +257,6 @@ pub trait CrateStore {
|
|||
fn load_macro_untracked(&self, did: DefId, sess: &Session) -> LoadedMacro;
|
||||
fn extern_mod_stmt_cnum_untracked(&self, emod_id: ast::NodeId) -> Option<CrateNum>;
|
||||
|
||||
// misc. metadata
|
||||
fn item_body<'a, 'tcx>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId)
|
||||
-> &'tcx hir::Body;
|
||||
|
||||
// This is basically a 1-based range of ints, which is a little
|
||||
// silly - I may fix that.
|
||||
fn crates(&self) -> Vec<CrateNum>;
|
||||
|
@ -350,12 +345,6 @@ impl CrateStore for DummyCrateStore {
|
|||
}
|
||||
fn load_macro_untracked(&self, did: DefId, sess: &Session) -> LoadedMacro { bug!("load_macro") }
|
||||
|
||||
// misc. metadata
|
||||
fn item_body<'a, 'tcx>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, def: DefId)
|
||||
-> &'tcx hir::Body {
|
||||
bug!("item_body")
|
||||
}
|
||||
|
||||
// This is basically a 1-based range of ints, which is a little
|
||||
// silly - I may fix that.
|
||||
fn crates(&self) -> Vec<CrateNum> { vec![] }
|
||||
|
|
|
@ -1315,6 +1315,7 @@ define_maps! { <'tcx>
|
|||
[] get_lang_items: get_lang_items_node(CrateNum) -> Rc<LanguageItems>,
|
||||
[] defined_lang_items: DefinedLangItems(CrateNum) -> Rc<Vec<(DefIndex, usize)>>,
|
||||
[] missing_lang_items: MissingLangItems(CrateNum) -> Rc<Vec<LangItem>>,
|
||||
[] item_body: ItemBody(DefId) -> &'tcx hir::Body,
|
||||
}
|
||||
|
||||
fn type_param_predicates<'tcx>((item_id, param_id): (DefId, DefId)) -> DepConstructor<'tcx> {
|
||||
|
|
|
@ -354,7 +354,7 @@ fn eval_const_expr_partial<'a, 'tcx>(cx: &ConstContext<'a, 'tcx>,
|
|||
}
|
||||
} else {
|
||||
if tcx.is_const_fn(def_id) {
|
||||
tcx.sess.cstore.item_body(tcx, def_id)
|
||||
tcx.item_body(def_id)
|
||||
} else {
|
||||
signal!(e, TypeckError)
|
||||
}
|
||||
|
@ -774,7 +774,7 @@ fn const_eval<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
|||
tcx.mir_const_qualif(def_id);
|
||||
tcx.hir.body(tcx.hir.body_owned_by(id))
|
||||
} else {
|
||||
tcx.sess.cstore.item_body(tcx, def_id)
|
||||
tcx.item_body(def_id)
|
||||
};
|
||||
ConstContext::new(tcx, key.param_env.and(substs), tables).eval(&body.value)
|
||||
}
|
||||
|
|
|
@ -609,7 +609,7 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
|
|||
let body = if let Some(id) = self.tcx.hir.as_local_node_id(def_id) {
|
||||
self.tcx.hir.body(self.tcx.hir.body_owned_by(id))
|
||||
} else {
|
||||
self.tcx.sess.cstore.item_body(self.tcx, def_id)
|
||||
self.tcx.item_body(def_id)
|
||||
};
|
||||
let pat = self.lower_const_expr(&body.value, pat_id, span);
|
||||
self.tables = old_tables;
|
||||
|
|
|
@ -214,6 +214,14 @@ provide! { <'tcx> tcx, def_id, other, cdata,
|
|||
}
|
||||
defined_lang_items => { Rc::new(cdata.get_lang_items(&tcx.dep_graph)) }
|
||||
missing_lang_items => { Rc::new(cdata.get_missing_lang_items(&tcx.dep_graph)) }
|
||||
|
||||
item_body => {
|
||||
if let Some(cached) = tcx.hir.get_inlined_body_untracked(def_id) {
|
||||
return cached;
|
||||
}
|
||||
debug!("item_body({:?}): inlining item", def_id);
|
||||
cdata.item_body(tcx, def_id.index)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn provide_local<'tcx>(providers: &mut Providers<'tcx>) {
|
||||
|
@ -397,21 +405,6 @@ impl CrateStore for cstore::CStore {
|
|||
})
|
||||
}
|
||||
|
||||
fn item_body<'a, 'tcx>(&self,
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId)
|
||||
-> &'tcx hir::Body {
|
||||
self.read_dep_node(def_id);
|
||||
|
||||
if let Some(cached) = tcx.hir.get_inlined_body_untracked(def_id) {
|
||||
return cached;
|
||||
}
|
||||
|
||||
debug!("item_body({:?}): inlining item", def_id);
|
||||
|
||||
self.get_crate_data(def_id.krate).item_body(tcx, def_id.index)
|
||||
}
|
||||
|
||||
fn crates(&self) -> Vec<CrateNum>
|
||||
{
|
||||
let mut result = vec![];
|
||||
|
|
|
@ -474,7 +474,7 @@ impl hir::print::PpAnn for InlinedConst {
|
|||
}
|
||||
|
||||
fn print_inlined_const(cx: &DocContext, did: DefId) -> String {
|
||||
let body = cx.tcx.sess.cstore.item_body(cx.tcx, did);
|
||||
let body = cx.tcx.item_body(did);
|
||||
let inlined = InlinedConst {
|
||||
nested_bodies: cx.tcx.item_body_nested_bodies(did)
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue