diff options
Diffstat (limited to 'src/librustdoc/html/render.rs')
| -rw-r--r-- | src/librustdoc/html/render.rs | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index c5850089578..2d59747d00c 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -253,7 +253,7 @@ pub struct Cache { parent_is_trait_impl: bool, search_index: Vec<IndexItem>, stripped_mod: bool, - access_levels: AccessLevels<DefId>, + access_levels: Arc<AccessLevels<DefId>>, deref_trait_did: Option<DefId>, // In rare case where a structure is defined in one module but implemented @@ -264,6 +264,16 @@ pub struct Cache { orphan_methods: Vec<(DefId, clean::Item)>, } +/// Temporary storage for data obtained during `RustdocVisitor::clean()`. +/// Later on moved into `CACHE_KEY`. +#[derive(Default)] +pub struct RenderInfo { + pub inlined: HashSet<DefId>, + pub external_paths: ::core::ExternalPaths, + pub external_typarams: HashMap<DefId, String>, + pub deref_trait_did: Option<DefId>, +} + /// Helper struct to render all source code to HTML pages struct SourceCollector<'a> { scx: &'a mut SharedContext, @@ -415,7 +425,8 @@ pub fn run(mut krate: clean::Crate, external_html: &ExternalHtml, dst: PathBuf, passes: HashSet<String>, - css_file_extension: Option<PathBuf>) -> Result<(), Error> { + css_file_extension: Option<PathBuf>, + renderinfo: RenderInfo) -> Result<(), Error> { let src_root = match krate.src.parent() { Some(p) => p.to_path_buf(), None => PathBuf::new(), @@ -482,19 +493,20 @@ pub fn run(mut krate: clean::Crate, }; // Crawl the crate to build various caches used for the output - let analysis = ::ANALYSISKEY.with(|a| a.clone()); - let analysis = analysis.borrow(); - let access_levels = analysis.as_ref().map(|a| a.access_levels.clone()); - let access_levels = access_levels.unwrap_or(Default::default()); - let paths: HashMap<DefId, (Vec<String>, ItemType)> = - analysis.as_ref().map(|a| { - let paths = a.external_paths.borrow_mut().take().unwrap(); - paths.into_iter().map(|(k, (v, t))| (k, (v, ItemType::from_type_kind(t)))).collect() - }).unwrap_or(HashMap::new()); + let RenderInfo { + inlined, + external_paths, + external_typarams, + deref_trait_did, + } = renderinfo; + + let paths = external_paths.into_iter() + .map(|(k, (v, t))| (k, (v, ItemType::from_type_kind(t)))) + .collect::<HashMap<_, _>>(); + let mut cache = Cache { impls: HashMap::new(), - external_paths: paths.iter().map(|(&k, v)| (k, v.0.clone())) - .collect(), + external_paths: paths.iter().map(|(&k, v)| (k, v.0.clone())).collect(), paths: paths, implementors: HashMap::new(), stack: Vec::new(), @@ -504,16 +516,12 @@ pub fn run(mut krate: clean::Crate, extern_locations: HashMap::new(), primitive_locations: HashMap::new(), stripped_mod: false, - access_levels: access_levels, + access_levels: krate.access_levels.clone(), orphan_methods: Vec::new(), traits: mem::replace(&mut krate.external_traits, HashMap::new()), - deref_trait_did: analysis.as_ref().and_then(|a| a.deref_trait_did), - typarams: analysis.as_ref().map(|a| { - a.external_typarams.borrow_mut().take().unwrap() - }).unwrap_or(HashMap::new()), - inlined: analysis.as_ref().map(|a| { - a.inlined.borrow_mut().take().unwrap() - }).unwrap_or(HashSet::new()), + deref_trait_did: deref_trait_did, + typarams: external_typarams, + inlined: inlined, }; // Cache where all our extern crates are located |
