moved metadata provider impls to decoder
This commit is contained in:
parent
03fe10d91d
commit
5b71d769ff
2 changed files with 23 additions and 18 deletions
|
|
@ -41,8 +41,6 @@ use rustc::hir::svh::Svh;
|
|||
use rustc_back::target::Target;
|
||||
use rustc::hir;
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
macro_rules! provide {
|
||||
(<$lt:tt> $tcx:ident, $def_id:ident, $cdata:ident $($name:ident => $compute:block)*) => {
|
||||
pub fn provide<$lt>(providers: &mut Providers<$lt>) {
|
||||
|
|
@ -121,21 +119,11 @@ provide! { <'tcx> tcx, def_id, cdata
|
|||
fn_arg_names => { cdata.get_fn_arg_names(def_id.index) }
|
||||
impl_parent => { cdata.get_parent_impl(def_id.index) }
|
||||
trait_of_item => { cdata.get_trait_of_item(def_id.index) }
|
||||
item_body_nested_bodies => {
|
||||
let map: BTreeMap<_, _> = cdata.entry(def_id.index).ast.into_iter().flat_map(|ast| {
|
||||
ast.decode(cdata).nested_bodies.decode(cdata).map(|body| (body.id(), body))
|
||||
}).collect();
|
||||
|
||||
Rc::new(map)
|
||||
}
|
||||
item_body_nested_bodies => { Rc::new(cdata.item_body_nested_bodies(def_id.index)) }
|
||||
const_is_rvalue_promotable_to_static => {
|
||||
cdata.entry(def_id.index).ast.expect("const item missing `ast`")
|
||||
.decode(cdata).rvalue_promotable_to_static
|
||||
}
|
||||
is_mir_available => {
|
||||
!cdata.is_proc_macro(def_id.index) &&
|
||||
cdata.maybe_entry(def_id.index).and_then(|item| item.decode(cdata).mir).is_some()
|
||||
cdata.const_is_rvalue_promotable_to_static(def_id.index)
|
||||
}
|
||||
is_mir_available => { cdata.is_item_mir_available(def_id.index) }
|
||||
}
|
||||
|
||||
impl CrateStore for cstore::CStore {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ use rustc::mir::Mir;
|
|||
|
||||
use std::borrow::Cow;
|
||||
use std::cell::Ref;
|
||||
use std::collections::BTreeMap;
|
||||
use std::io;
|
||||
use std::mem;
|
||||
use std::rc::Rc;
|
||||
|
|
@ -448,16 +449,16 @@ impl<'tcx> EntryKind<'tcx> {
|
|||
}
|
||||
|
||||
impl<'a, 'tcx> CrateMetadata {
|
||||
pub fn is_proc_macro(&self, id: DefIndex) -> bool {
|
||||
fn is_proc_macro(&self, id: DefIndex) -> bool {
|
||||
self.proc_macros.is_some() && id != CRATE_DEF_INDEX
|
||||
}
|
||||
|
||||
pub fn maybe_entry(&self, item_id: DefIndex) -> Option<Lazy<Entry<'tcx>>> {
|
||||
fn maybe_entry(&self, item_id: DefIndex) -> Option<Lazy<Entry<'tcx>>> {
|
||||
assert!(!self.is_proc_macro(item_id));
|
||||
self.root.index.lookup(self.blob.raw_bytes(), item_id)
|
||||
}
|
||||
|
||||
pub fn entry(&self, item_id: DefIndex) -> Entry<'tcx> {
|
||||
fn entry(&self, item_id: DefIndex) -> Entry<'tcx> {
|
||||
match self.maybe_entry(item_id) {
|
||||
None => {
|
||||
bug!("entry: id not found: {:?} in crate {:?} with number {}",
|
||||
|
|
@ -779,6 +780,22 @@ impl<'a, 'tcx> CrateMetadata {
|
|||
tcx.alloc_tables(ast.tables.decode((self, tcx)))
|
||||
}
|
||||
|
||||
pub fn item_body_nested_bodies(&self, id: DefIndex) -> BTreeMap<hir::BodyId, hir::Body> {
|
||||
self.entry(id).ast.into_iter().flat_map(|ast| {
|
||||
ast.decode(self).nested_bodies.decode(self).map(|body| (body.id(), body))
|
||||
}).collect()
|
||||
}
|
||||
|
||||
pub fn const_is_rvalue_promotable_to_static(&self, id: DefIndex) -> bool {
|
||||
self.entry(id).ast.expect("const item missing `ast`")
|
||||
.decode(self).rvalue_promotable_to_static
|
||||
}
|
||||
|
||||
pub fn is_item_mir_available(&self, id: DefIndex) -> bool {
|
||||
!self.is_proc_macro(id) &&
|
||||
self.maybe_entry(id).and_then(|item| item.decode(self).mir).is_some()
|
||||
}
|
||||
|
||||
pub fn maybe_get_optimized_mir(&self,
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
id: DefIndex)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue