rustc: Harmonize DefKind
and DefPathData
`DefPathData::(ClosureExpr,ImplTrait)` are renamed to match `DefKind::(Closure,OpaqueTy)`. `DefPathData::ImplTraitAssocTy` is replaced with `DefPathData::TypeNS(kw::Empty)` because both correspond to `DefKind::AssocTy`. It's possible that introducing `(DefKind,DefPathData)::AssocOpaqueTy` could be a better solution, but that would be a much more invasive change. Const generic parameters introduced for effects are moved from `DefPathData::TypeNS` to `DefPathData::ValueNS`, because constants are values. `DefPathData` is no longer passed to `create_def` functions to avoid redundancy.
This commit is contained in:
parent
7ceaf19868
commit
17e799c270
17 changed files with 133 additions and 132 deletions
|
@ -977,7 +977,7 @@ impl<'tcx> TyCtxtAt<'tcx> {
|
|||
pub fn create_def(
|
||||
self,
|
||||
parent: LocalDefId,
|
||||
data: hir::definitions::DefPathData,
|
||||
name: Symbol,
|
||||
def_kind: DefKind,
|
||||
) -> TyCtxtFeed<'tcx, LocalDefId> {
|
||||
// This function modifies `self.definitions` using a side-effect.
|
||||
|
@ -1000,6 +1000,7 @@ impl<'tcx> TyCtxtAt<'tcx> {
|
|||
// This is fine because:
|
||||
// - those queries are `eval_always` so we won't miss their result changing;
|
||||
// - this write will have happened before these queries are called.
|
||||
let data = def_kind.def_path_data(name);
|
||||
let key = self.untracked.definitions.write().create_def(parent, data);
|
||||
|
||||
let feed = TyCtxtFeed { tcx: self.tcx, key };
|
||||
|
|
|
@ -215,7 +215,7 @@ impl<'tcx> InstanceDef<'tcx> {
|
|||
};
|
||||
matches!(
|
||||
tcx.def_key(def_id).disambiguated_data.data,
|
||||
DefPathData::Ctor | DefPathData::ClosureExpr
|
||||
DefPathData::Ctor | DefPathData::Closure
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ pub trait Printer<'tcx>: Sized {
|
|||
|
||||
match key.disambiguated_data.data {
|
||||
// Closures' own generics are only captures, don't print them.
|
||||
DefPathData::ClosureExpr => {}
|
||||
DefPathData::Closure => {}
|
||||
// This covers both `DefKind::AnonConst` and `DefKind::InlineConst`.
|
||||
// Anon consts doesn't have their own generics, and inline consts' own
|
||||
// generics are their inferred types, so don't print them.
|
||||
|
|
|
@ -1804,13 +1804,13 @@ impl<'a, 'tcx> FmtPrinter<'a, 'tcx> {
|
|||
// (but also some things just print a `DefId` generally so maybe we need this?)
|
||||
fn guess_def_namespace(tcx: TyCtxt<'_>, def_id: DefId) -> Namespace {
|
||||
match tcx.def_key(def_id).disambiguated_data.data {
|
||||
DefPathData::TypeNs(..) | DefPathData::CrateRoot | DefPathData::ImplTrait => {
|
||||
DefPathData::TypeNs(..) | DefPathData::CrateRoot | DefPathData::OpaqueTy => {
|
||||
Namespace::TypeNS
|
||||
}
|
||||
|
||||
DefPathData::ValueNs(..)
|
||||
| DefPathData::AnonConst
|
||||
| DefPathData::ClosureExpr
|
||||
| DefPathData::Closure
|
||||
| DefPathData::Ctor => Namespace::ValueNS,
|
||||
|
||||
DefPathData::MacroNs(..) => Namespace::MacroNS,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue