Auto merge of #27574 - brson:cache-staged-api, r=huonw
This search happens a lot! Locally, compiling hyper sees the following improvements: before real 0m30.843s user 0m51.644s sys 0m2.128s real 0m30.164s user 0m53.320s sys 0m2.208s after real 0m28.438s user 0m51.076s sys 0m2.276s real 0m28.612s user 0m51.560s sys 0m2.192s
This commit is contained in:
commit
1181679c8f
3 changed files with 15 additions and 10 deletions
|
@ -261,6 +261,7 @@ impl<'a> CrateReader<'a> {
|
|||
let loader::Library { dylib, rlib, metadata } = lib;
|
||||
|
||||
let cnum_map = self.resolve_crate_deps(root, metadata.as_slice(), span);
|
||||
let staged_api = self.is_staged_api(metadata.as_slice());
|
||||
|
||||
let cmeta = Rc::new( cstore::crate_metadata {
|
||||
name: name.to_string(),
|
||||
|
@ -270,6 +271,7 @@ impl<'a> CrateReader<'a> {
|
|||
cnum: cnum,
|
||||
codemap_import_info: RefCell::new(vec![]),
|
||||
span: span,
|
||||
staged_api: staged_api
|
||||
});
|
||||
|
||||
let source = cstore::CrateSource {
|
||||
|
@ -283,6 +285,17 @@ impl<'a> CrateReader<'a> {
|
|||
(cnum, cmeta, source)
|
||||
}
|
||||
|
||||
fn is_staged_api(&self, data: &[u8]) -> bool {
|
||||
let attrs = decoder::get_crate_attributes(data);
|
||||
for attr in &attrs {
|
||||
if &attr.name()[..] == "staged_api" {
|
||||
match attr.node.value.node { ast::MetaWord(_) => return true, _ => (/*pass*/) }
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
fn resolve_crate(&mut self,
|
||||
root: &Option<CratePaths>,
|
||||
ident: &str,
|
||||
|
|
|
@ -22,7 +22,6 @@ use rbml::reader;
|
|||
use std::rc::Rc;
|
||||
use syntax::ast;
|
||||
use syntax::attr;
|
||||
use syntax::attr::AttrMetaMethods;
|
||||
use syntax::diagnostic::expect;
|
||||
|
||||
use std::collections::hash_map::HashMap;
|
||||
|
@ -386,15 +385,7 @@ pub fn get_stability(cstore: &cstore::CStore,
|
|||
}
|
||||
|
||||
pub fn is_staged_api(cstore: &cstore::CStore, krate: ast::CrateNum) -> bool {
|
||||
let cdata = cstore.get_crate_data(krate);
|
||||
let attrs = decoder::get_crate_attributes(cdata.data());
|
||||
for attr in &attrs {
|
||||
if &attr.name()[..] == "staged_api" {
|
||||
match attr.node.value.node { ast::MetaWord(_) => return true, _ => (/*pass*/) }
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
cstore.get_crate_data(krate).staged_api
|
||||
}
|
||||
|
||||
pub fn get_repr_attrs(cstore: &cstore::CStore, def: ast::DefId)
|
||||
|
|
|
@ -63,6 +63,7 @@ pub struct crate_metadata {
|
|||
pub cnum: ast::CrateNum,
|
||||
pub codemap_import_info: RefCell<Vec<ImportedFileMap>>,
|
||||
pub span: codemap::Span,
|
||||
pub staged_api: bool
|
||||
}
|
||||
|
||||
#[derive(Copy, Debug, PartialEq, Clone)]
|
||||
|
|
Loading…
Add table
Reference in a new issue