Importing rustc-1.39.0
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index 87381f2..010e4cf 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -13,7 +13,6 @@
use rustc_driver::abort_on_err;
use rustc_resolve as resolve;
use rustc_metadata::cstore::CStore;
-use rustc_target::spec::TargetTriple;
use syntax::source_map;
use syntax::attr;
@@ -30,7 +29,7 @@
use crate::config::{Options as RustdocOptions, RenderOptions};
use crate::clean;
-use crate::clean::{Clean, MAX_DEF_ID, AttributesExt};
+use crate::clean::{MAX_DEF_ID, AttributesExt};
use crate::html::render::RenderInfo;
use crate::passes;
@@ -61,8 +60,8 @@
pub lt_substs: RefCell<FxHashMap<DefId, clean::Lifetime>>,
/// Table `DefId` of const parameter -> substituted const
pub ct_substs: RefCell<FxHashMap<DefId, clean::Constant>>,
- /// Table DefId of `impl Trait` in argument position -> bounds
- pub impl_trait_bounds: RefCell<FxHashMap<DefId, Vec<clean::GenericBound>>>,
+ /// Table synthetic type parameter for `impl Trait` in argument position -> bounds
+ pub impl_trait_bounds: RefCell<FxHashMap<ImplTraitParam, Vec<clean::GenericBound>>>,
pub fake_def_ids: RefCell<FxHashMap<CrateNum, DefId>>,
pub all_fake_def_ids: RefCell<FxHashSet<DefId>>,
/// Auto-trait or blanket impls processed so far, as `(self_ty, trait_def_id)`.
@@ -193,6 +192,8 @@
source_map.map(|cm| cm as _),
short,
sessopts.debugging_opts.teach,
+ sessopts.debugging_opts.terminal_width,
+ false,
).ui_testing(ui_testing)
)
},
@@ -205,6 +206,7 @@
source_map,
pretty,
json_rendered,
+ false,
).ui_testing(ui_testing)
)
},
@@ -228,6 +230,7 @@
let RustdocOptions {
input,
crate_name,
+ proc_macro_crate,
error_format,
libs,
externs,
@@ -292,12 +295,16 @@
}
}).collect();
- let host_triple = TargetTriple::from_triple(config::host_triple());
+ let crate_types = if proc_macro_crate {
+ vec![config::CrateType::ProcMacro]
+ } else {
+ vec![config::CrateType::Rlib]
+ };
// plays with error output here!
let sessopts = config::Options {
maybe_sysroot,
search_paths: libs,
- crate_types: vec![config::CrateType::Rlib],
+ crate_types,
lint_opts: if !display_warnings {
lint_opts
} else {
@@ -306,7 +313,7 @@
lint_cap: Some(lint_cap.unwrap_or_else(|| lint::Forbid)),
cg: codegen_options,
externs,
- target_triple: target.unwrap_or(host_triple),
+ target_triple: target,
// Ensure that rustdoc works even if rustc is feature-staged
unstable_features: UnstableFeatures::Allow,
actually_rustdoc: true,
@@ -363,7 +370,7 @@
let mut renderinfo = RenderInfo::default();
renderinfo.access_levels = access_levels;
- let ctxt = DocContext {
+ let mut ctxt = DocContext {
tcx,
resolver,
cstore: compiler.cstore().clone(),
@@ -383,7 +390,7 @@
};
debug!("crate: {:?}", tcx.hir().krate());
- let mut krate = tcx.hir().krate().clean(&ctxt);
+ let mut krate = clean::krate(&mut ctxt);
fn report_deprecated_attr(name: &str, diag: &errors::Handler) {
let mut msg = diag.struct_warn(&format!("the `#![doc({})]` attribute is \
@@ -459,3 +466,23 @@
})
})
}
+
+/// `DefId` or parameter index (`ty::ParamTy.index`) of a synthetic type parameter
+/// for `impl Trait` in argument position.
+#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
+pub enum ImplTraitParam {
+ DefId(DefId),
+ ParamIndex(u32),
+}
+
+impl From<DefId> for ImplTraitParam {
+ fn from(did: DefId) -> Self {
+ ImplTraitParam::DefId(did)
+ }
+}
+
+impl From<u32> for ImplTraitParam {
+ fn from(idx: u32) -> Self {
+ ImplTraitParam::ParamIndex(idx)
+ }
+}