rustc: explicitly pass the namespace to PrintCx::parameterized.
This commit is contained in:
parent
08d27441ec
commit
2386168139
@ -2,7 +2,7 @@
|
||||
//!
|
||||
//! [rustc guide]: https://rust-lang.github.io/rustc-guide/mir/index.html
|
||||
|
||||
use crate::hir::def::CtorKind;
|
||||
use crate::hir::def::{CtorKind, Namespace};
|
||||
use crate::hir::def_id::DefId;
|
||||
use crate::hir::{self, HirId, InlineAsm};
|
||||
use crate::mir::interpret::{ConstValue, EvalErrorKind, Scalar};
|
||||
@ -2405,7 +2405,7 @@ impl<'tcx> Debug for Rvalue<'tcx> {
|
||||
AggregateKind::Adt(adt_def, variant, substs, _user_ty, _) => {
|
||||
let variant_def = &adt_def.variants[variant];
|
||||
|
||||
ppaux::parameterized(fmt, variant_def.did, substs)?;
|
||||
ppaux::parameterized(fmt, variant_def.did, substs, Namespace::ValueNS)?;
|
||||
|
||||
match variant_def.ctor_kind {
|
||||
CtorKind::Const => Ok(()),
|
||||
|
@ -1,4 +1,5 @@
|
||||
use crate::hir::Unsafety;
|
||||
use crate::hir::def::Namespace;
|
||||
use crate::hir::def_id::DefId;
|
||||
use crate::ty::{self, Ty, PolyFnSig, TypeFoldable, SubstsRef, TyCtxt};
|
||||
use crate::traits;
|
||||
@ -175,7 +176,7 @@ impl<'tcx> InstanceDef<'tcx> {
|
||||
|
||||
impl<'tcx> fmt::Display for Instance<'tcx> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
ppaux::parameterized(f, self.def_id(), self.substs)?;
|
||||
ppaux::parameterized(f, self.def_id(), self.substs, Namespace::ValueNS)?;
|
||||
match self.def {
|
||||
InstanceDef::Item(_) => Ok(()),
|
||||
InstanceDef::VtableShim(_) => {
|
||||
|
@ -1,3 +1,4 @@
|
||||
use crate::hir::def::Namespace;
|
||||
use crate::hir::def_id::DefId;
|
||||
use crate::hir::map::definitions::DefPathData;
|
||||
use crate::middle::region;
|
||||
@ -285,26 +286,12 @@ impl<F: fmt::Write> PrintCx<'a, 'gcx, 'tcx, FmtPrinter<F>> {
|
||||
|
||||
fn parameterized(
|
||||
&mut self,
|
||||
mut def_id: DefId,
|
||||
def_id: DefId,
|
||||
substs: SubstsRef<'tcx>,
|
||||
ns: Namespace,
|
||||
projections: impl Iterator<Item = ty::ExistentialProjection<'tcx>>,
|
||||
) -> fmt::Result {
|
||||
let mut key = self.tcx.def_key(def_id);
|
||||
let is_value_ns = match key.disambiguated_data.data {
|
||||
DefPathData::ValueNs(_) |
|
||||
DefPathData::EnumVariant(_) => true,
|
||||
|
||||
// Skip `StructCtor` so that `Struct::<T>` will be printed,
|
||||
// instead of the less pretty `Struct<T>::{{constructor}}`.
|
||||
DefPathData::StructCtor => {
|
||||
def_id.index = key.parent.unwrap();
|
||||
key = self.tcx.def_key(def_id);
|
||||
true
|
||||
}
|
||||
|
||||
_ => false,
|
||||
};
|
||||
|
||||
let key = self.tcx.def_key(def_id);
|
||||
let generics = self.tcx.generics_of(def_id);
|
||||
|
||||
if let Some(parent_def_id) = generics.parent {
|
||||
@ -315,13 +302,20 @@ impl<F: fmt::Write> PrintCx<'a, 'gcx, 'tcx, FmtPrinter<F>> {
|
||||
parent_generics.has_self && parent_generics.parent_count == 0;
|
||||
if parent_has_own_self {
|
||||
print!(self, write("<"), print_display(substs.type_at(0)), write(" as "))?;
|
||||
}
|
||||
self.parameterized(parent_def_id, substs, iter::empty())?;
|
||||
if parent_has_own_self {
|
||||
self.parameterized(parent_def_id, substs, Namespace::TypeNS, iter::empty())?;
|
||||
print!(self, write(">"))?;
|
||||
} else {
|
||||
self.parameterized(parent_def_id, substs, ns, iter::empty())?;
|
||||
}
|
||||
|
||||
print!(self, write("::{}", key.disambiguated_data.data.as_interned_str()))?;
|
||||
// Skip `::{{constructor}}` on tuple/unit structs.
|
||||
match key.disambiguated_data.data {
|
||||
DefPathData::StructCtor => {}
|
||||
|
||||
_ => {
|
||||
print!(self, write("::{}", key.disambiguated_data.data.as_interned_str()))?;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Try to print `impl`s more like how you'd refer to their associated items.
|
||||
if let DefPathData::Impl = key.disambiguated_data.data {
|
||||
@ -352,7 +346,7 @@ impl<F: fmt::Write> PrintCx<'a, 'gcx, 'tcx, FmtPrinter<F>> {
|
||||
}
|
||||
};
|
||||
|
||||
let start = if is_value_ns { "::<" } else { "<" };
|
||||
let start = if ns == Namespace::ValueNS { "::<" } else { "<" };
|
||||
|
||||
let has_own_self = generics.has_self && generics.parent_count == 0;
|
||||
let params = &generics.params[has_own_self as usize..];
|
||||
@ -496,10 +490,15 @@ impl<F: fmt::Write> PrintCx<'a, 'gcx, 'tcx, FmtPrinter<F>> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parameterized<F: fmt::Write>(f: &mut F, did: DefId, substs: SubstsRef<'_>) -> fmt::Result {
|
||||
pub fn parameterized<F: fmt::Write>(
|
||||
f: &mut F,
|
||||
did: DefId,
|
||||
substs: SubstsRef<'_>,
|
||||
ns: Namespace,
|
||||
) -> fmt::Result {
|
||||
PrintCx::with(FmtPrinter { fmt: f }, |mut cx| {
|
||||
let substs = cx.tcx.lift(&substs).expect("could not lift for printing");
|
||||
cx.parameterized(did, substs, iter::empty())
|
||||
cx.parameterized(did, substs, ns, iter::empty())
|
||||
})
|
||||
}
|
||||
|
||||
@ -538,6 +537,7 @@ define_print! {
|
||||
cx.parameterized(
|
||||
principal.def_id,
|
||||
principal.substs,
|
||||
Namespace::TypeNS,
|
||||
self.projection_bounds(),
|
||||
)?;
|
||||
}
|
||||
@ -663,7 +663,7 @@ define_print! {
|
||||
let trait_ref = *ty::Binder::bind(*self)
|
||||
.with_self_ty(cx.tcx, dummy_self)
|
||||
.skip_binder();
|
||||
cx.parameterized(trait_ref.def_id, trait_ref.substs, iter::empty())
|
||||
cx.parameterized(trait_ref.def_id, trait_ref.substs, Namespace::TypeNS, iter::empty())
|
||||
}
|
||||
debug {
|
||||
self.print_display(cx)
|
||||
@ -1112,12 +1112,16 @@ define_print_multi! {
|
||||
define_print! {
|
||||
('tcx) ty::TraitRef<'tcx>, (self, cx) {
|
||||
display {
|
||||
cx.parameterized(self.def_id, self.substs, iter::empty())
|
||||
cx.parameterized(self.def_id, self.substs, Namespace::TypeNS, iter::empty())
|
||||
}
|
||||
debug {
|
||||
print!(cx, write("<"), print(self.self_ty()), write(" as "))?;
|
||||
cx.parameterized(self.def_id, self.substs, iter::empty())?;
|
||||
print!(cx, write(">"))
|
||||
print!(cx,
|
||||
write("<"),
|
||||
print(self.self_ty()),
|
||||
write(" as "),
|
||||
print_display(self),
|
||||
write(">")
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1163,7 +1167,7 @@ define_print! {
|
||||
FnDef(def_id, substs) => {
|
||||
let sig = cx.tcx.fn_sig(def_id).subst(cx.tcx, substs);
|
||||
print!(cx, print(sig), write(" {{"))?;
|
||||
cx.parameterized(def_id, substs, iter::empty())?;
|
||||
cx.parameterized(def_id, substs, Namespace::ValueNS, iter::empty())?;
|
||||
print!(cx, write("}}"))
|
||||
}
|
||||
FnPtr(ref bare_fn) => {
|
||||
@ -1185,7 +1189,9 @@ define_print! {
|
||||
ty::BoundTyKind::Param(p) => print!(cx, write("{}", p)),
|
||||
}
|
||||
}
|
||||
Adt(def, substs) => cx.parameterized(def.did, substs, iter::empty()),
|
||||
Adt(def, substs) => {
|
||||
cx.parameterized(def.did, substs, Namespace::TypeNS, iter::empty())
|
||||
}
|
||||
Dynamic(data, r) => {
|
||||
let print_r = r.display_outputs_anything(cx);
|
||||
if print_r {
|
||||
@ -1199,7 +1205,12 @@ define_print! {
|
||||
Ok(())
|
||||
}
|
||||
Foreign(def_id) => {
|
||||
cx.parameterized(def_id, subst::InternalSubsts::empty(), iter::empty())
|
||||
cx.parameterized(
|
||||
def_id,
|
||||
subst::InternalSubsts::empty(),
|
||||
Namespace::TypeNS,
|
||||
iter::empty(),
|
||||
)
|
||||
}
|
||||
Projection(ref data) => data.print(cx),
|
||||
UnnormalizedProjection(ref data) => {
|
||||
@ -1481,7 +1492,7 @@ define_print! {
|
||||
define_print! {
|
||||
('tcx) ty::ProjectionTy<'tcx>, (self, cx) {
|
||||
display {
|
||||
cx.parameterized(self.item_def_id, self.substs, iter::empty())
|
||||
cx.parameterized(self.item_def_id, self.substs, Namespace::TypeNS, iter::empty())
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1518,7 +1529,7 @@ define_print! {
|
||||
}
|
||||
ty::Predicate::ConstEvaluatable(def_id, substs) => {
|
||||
print!(cx, write("the constant `"))?;
|
||||
cx.parameterized(def_id, substs, iter::empty())?;
|
||||
cx.parameterized(def_id, substs, Namespace::ValueNS, iter::empty())?;
|
||||
print!(cx, write("` can be evaluated"))
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ fn main() {
|
||||
// _2 = move _3;
|
||||
// StorageDead(_3);
|
||||
// StorageLive(_4);
|
||||
// _4 = std::option::Option<std::boxed::Box<u32>>::None;
|
||||
// _4 = std::option::Option::<std::boxed::Box<u32>>::None;
|
||||
// FakeRead(ForLet, _4);
|
||||
// AscribeUserType(_4, o, UserTypeProjection { base: UserType(1), projs: [] });
|
||||
// StorageLive(_5);
|
||||
|
@ -42,7 +42,7 @@ fn main() {
|
||||
// START rustc.full_tested_match.QualifyAndPromoteConstants.after.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 42i32,);
|
||||
// _2 = std::option::Option::<i32>::Some(const 42i32,);
|
||||
// FakeRead(ForMatchedPlace, _2);
|
||||
// _3 = discriminant(_2);
|
||||
// switchInt(move _3) -> [0isize: bb4, 1isize: bb2, otherwise: bb7];
|
||||
@ -111,7 +111,7 @@ fn main() {
|
||||
// START rustc.full_tested_match2.QualifyAndPromoteConstants.before.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 42i32,);
|
||||
// _2 = std::option::Option::<i32>::Some(const 42i32,);
|
||||
// FakeRead(ForMatchedPlace, _2);
|
||||
// _3 = discriminant(_2);
|
||||
// switchInt(move _3) -> [0isize: bb3, 1isize: bb2, otherwise: bb7];
|
||||
@ -180,7 +180,7 @@ fn main() {
|
||||
// START rustc.main.QualifyAndPromoteConstants.before.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _2 = std::option::Option<i32>::Some(const 1i32,);
|
||||
// _2 = std::option::Option::<i32>::Some(const 1i32,);
|
||||
// FakeRead(ForMatchedPlace, _2);
|
||||
// _3 = discriminant(_2);
|
||||
// switchInt(move _3) -> [1isize: bb2, otherwise: bb3];
|
||||
|
@ -18,7 +18,7 @@ fn main() {
|
||||
// StorageLive(_4);
|
||||
// StorageLive(_5);
|
||||
// _5 = _1;
|
||||
// _4 = std::option::Option<i32>::Some(move _5,);
|
||||
// _4 = std::option::Option::<i32>::Some(move _5,);
|
||||
// StorageDead(_5);
|
||||
// _3 = &_4;
|
||||
// FakeRead(ForLet, _3);
|
||||
|
Loading…
Reference in New Issue
Block a user