diff options
| author | bors <bors@rust-lang.org> | 2015-08-07 01:12:15 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-08-07 01:12:15 +0000 |
| commit | 1181679c8f84f8ca1c70b60d63ee88336ac363dd (patch) | |
| tree | 4c6bafd6ff8376eefb74719a604502700102ea68 | |
| parent | 68f79288bf1ac2b014277750cbf59416c91f7d04 (diff) | |
| parent | fd142bb741848236d4ab3a7655e58014d29889da (diff) | |
| download | rust-1181679c8f84f8ca1c70b60d63ee88336ac363dd.tar.gz rust-1181679c8f84f8ca1c70b60d63ee88336ac363dd.zip | |
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
| -rw-r--r-- | src/librustc/metadata/creader.rs | 13 | ||||
| -rw-r--r-- | src/librustc/metadata/csearch.rs | 11 | ||||
| -rw-r--r-- | src/librustc/metadata/cstore.rs | 1 |
3 files changed, 15 insertions, 10 deletions
diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs index f4561d68906..bbb2d4fade1 100644 --- a/src/librustc/metadata/creader.rs +++ b/src/librustc/metadata/creader.rs @@ -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, diff --git a/src/librustc/metadata/csearch.rs b/src/librustc/metadata/csearch.rs index 21d5dac7e5d..9c45ffe35a8 100644 --- a/src/librustc/metadata/csearch.rs +++ b/src/librustc/metadata/csearch.rs @@ -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) diff --git a/src/librustc/metadata/cstore.rs b/src/librustc/metadata/cstore.rs index 08c05b76862..19d494824cf 100644 --- a/src/librustc/metadata/cstore.rs +++ b/src/librustc/metadata/cstore.rs @@ -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)] |
