Apply nits
This commit is contained in:
parent
3bcdf3058e
commit
fa84018c2e
17 changed files with 73 additions and 137 deletions
|
@ -629,7 +629,6 @@ impl<'tcx> Term<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
/// This function returns the inner `AliasTy` for a `ty::Alias` or `ConstKind::Unevaluated`.
|
||||
pub fn to_alias_term(self) -> Option<AliasTerm<'tcx>> {
|
||||
match self.unpack() {
|
||||
TermKind::Ty(ty) => match *ty.kind() {
|
||||
|
|
|
@ -3216,7 +3216,8 @@ define_print_and_forward_display! {
|
|||
ty::AliasTermKind::ProjectionTy
|
||||
| ty::AliasTermKind::WeakTy
|
||||
| ty::AliasTermKind::OpaqueTy
|
||||
| ty::AliasTermKind::UnevaluatedConst => {
|
||||
| ty::AliasTermKind::UnevaluatedConst
|
||||
| ty::AliasTermKind::ProjectionConst => {
|
||||
// If we're printing verbosely, or don't want to invoke queries
|
||||
// (`is_impl_trait_in_trait`), then fall back to printing the def path.
|
||||
// This is likely what you want if you're debugging the compiler anyways.
|
||||
|
|
|
@ -10,7 +10,6 @@ use crate::ty::{
|
|||
GenericArgKind, GenericArgsRef, ImplSubject, Term, TermKind, Ty, TyCtxt, TypeFoldable,
|
||||
};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_macros::TypeVisitable;
|
||||
use rustc_target::spec::abi;
|
||||
|
@ -227,8 +226,8 @@ impl<'tcx> Relate<'tcx> for ty::AliasTy<'tcx> {
|
|||
if a.def_id != b.def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(a.def_id, b.def_id)))
|
||||
} else {
|
||||
let args = match relation.tcx().def_kind(a.def_id) {
|
||||
DefKind::OpaqueTy => relate_args_with_variances(
|
||||
let args = match a.kind(relation.tcx()) {
|
||||
ty::Opaque => relate_args_with_variances(
|
||||
relation,
|
||||
a.def_id,
|
||||
relation.tcx().variances_of(a.def_id),
|
||||
|
@ -236,10 +235,9 @@ impl<'tcx> Relate<'tcx> for ty::AliasTy<'tcx> {
|
|||
b.args,
|
||||
false, // do not fetch `type_of(a_def_id)`, as it will cause a cycle
|
||||
)?,
|
||||
DefKind::AssocTy | DefKind::AssocConst | DefKind::TyAlias => {
|
||||
ty::Projection | ty::Weak | ty::Inherent => {
|
||||
relate_args_invariantly(relation, a.args, b.args)?
|
||||
}
|
||||
def => bug!("unknown alias DefKind: {def:?}"),
|
||||
};
|
||||
Ok(ty::AliasTy::new(relation.tcx(), a.def_id, args))
|
||||
}
|
||||
|
@ -255,8 +253,8 @@ impl<'tcx> Relate<'tcx> for ty::AliasTerm<'tcx> {
|
|||
if a.def_id != b.def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(a.def_id, b.def_id)))
|
||||
} else {
|
||||
let args = match relation.tcx().def_kind(a.def_id) {
|
||||
DefKind::OpaqueTy => relate_args_with_variances(
|
||||
let args = match a.kind(relation.tcx()) {
|
||||
ty::AliasTermKind::OpaqueTy => relate_args_with_variances(
|
||||
relation,
|
||||
a.def_id,
|
||||
relation.tcx().variances_of(a.def_id),
|
||||
|
@ -264,10 +262,13 @@ impl<'tcx> Relate<'tcx> for ty::AliasTerm<'tcx> {
|
|||
b.args,
|
||||
false, // do not fetch `type_of(a_def_id)`, as it will cause a cycle
|
||||
)?,
|
||||
DefKind::AssocTy | DefKind::AssocConst | DefKind::TyAlias => {
|
||||
ty::AliasTermKind::ProjectionTy
|
||||
| ty::AliasTermKind::WeakTy
|
||||
| ty::AliasTermKind::InherentTy
|
||||
| ty::AliasTermKind::UnevaluatedConst
|
||||
| ty::AliasTermKind::ProjectionConst => {
|
||||
relate_args_invariantly(relation, a.args, b.args)?
|
||||
}
|
||||
def => bug!("unknown alias DefKind: {def:?}"),
|
||||
};
|
||||
Ok(ty::AliasTerm::new(relation.tcx(), a.def_id, args))
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ use rustc_span::symbol::{sym, Symbol};
|
|||
use rustc_span::{Span, DUMMY_SP};
|
||||
use rustc_target::abi::{FieldIdx, VariantIdx, FIRST_VARIANT};
|
||||
use rustc_target::spec::abi::{self, Abi};
|
||||
use std::assert_matches::{assert_matches, debug_assert_matches};
|
||||
use std::assert_matches::debug_assert_matches;
|
||||
use std::borrow::Cow;
|
||||
use std::iter;
|
||||
use std::ops::{ControlFlow, Deref, Range};
|
||||
|
@ -1137,8 +1137,8 @@ pub struct AliasTerm<'tcx> {
|
|||
/// aka. `tcx.parent(def_id)`.
|
||||
pub def_id: DefId,
|
||||
|
||||
/// This field exists to prevent the creation of `AliasTy` without using
|
||||
/// [AliasTy::new].
|
||||
/// This field exists to prevent the creation of `AliasTerm` without using
|
||||
/// [AliasTerm::new].
|
||||
_use_alias_term_new_instead: (),
|
||||
}
|
||||
|
||||
|
@ -1202,13 +1202,15 @@ impl<'tcx> AliasTerm<'tcx> {
|
|||
}
|
||||
|
||||
pub fn expect_ty(self, tcx: TyCtxt<'tcx>) -> AliasTy<'tcx> {
|
||||
assert_matches!(
|
||||
self.kind(tcx),
|
||||
match self.kind(tcx) {
|
||||
ty::AliasTermKind::ProjectionTy
|
||||
| ty::AliasTermKind::OpaqueTy
|
||||
| ty::AliasTermKind::WeakTy
|
||||
| ty::AliasTermKind::InherentTy
|
||||
);
|
||||
| ty::AliasTermKind::InherentTy
|
||||
| ty::AliasTermKind::OpaqueTy
|
||||
| ty::AliasTermKind::WeakTy => {}
|
||||
ty::AliasTermKind::UnevaluatedConst | ty::AliasTermKind::ProjectionConst => {
|
||||
bug!("Cannot turn `UnevaluatedConst` into `AliasTy`")
|
||||
}
|
||||
}
|
||||
ty::AliasTy { def_id: self.def_id, args: self.args, _use_alias_ty_new_instead: () }
|
||||
}
|
||||
|
||||
|
@ -1223,13 +1225,14 @@ impl<'tcx> AliasTerm<'tcx> {
|
|||
}
|
||||
DefKind::OpaqueTy => ty::AliasTermKind::OpaqueTy,
|
||||
DefKind::TyAlias => ty::AliasTermKind::WeakTy,
|
||||
DefKind::AssocConst | DefKind::AnonConst => ty::AliasTermKind::UnevaluatedConst,
|
||||
DefKind::AnonConst => ty::AliasTermKind::UnevaluatedConst,
|
||||
DefKind::AssocConst => ty::AliasTermKind::ProjectionConst,
|
||||
kind => bug!("unexpected DefKind in AliasTy: {kind:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The following methods work only with (trait) associated type projections.
|
||||
/// The following methods work only with (trait) associated item projections.
|
||||
impl<'tcx> AliasTerm<'tcx> {
|
||||
pub fn self_ty(self) -> Ty<'tcx> {
|
||||
self.args.type_at(0)
|
||||
|
@ -1269,7 +1272,6 @@ impl<'tcx> AliasTerm<'tcx> {
|
|||
self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> (ty::TraitRef<'tcx>, &'tcx [ty::GenericArg<'tcx>]) {
|
||||
debug_assert!(matches!(tcx.def_kind(self.def_id), DefKind::AssocTy | DefKind::AssocConst));
|
||||
let trait_def_id = self.trait_def_id(tcx);
|
||||
let trait_generics = tcx.generics_of(trait_def_id);
|
||||
(
|
||||
|
@ -1304,12 +1306,14 @@ impl<'tcx> AliasTerm<'tcx> {
|
|||
AliasTy { def_id: self.def_id, args: self.args, _use_alias_ty_new_instead: () },
|
||||
)
|
||||
.into(),
|
||||
ty::AliasTermKind::UnevaluatedConst => ty::Const::new_unevaluated(
|
||||
tcx,
|
||||
ty::UnevaluatedConst::new(self.def_id, self.args),
|
||||
tcx.type_of(self.def_id).instantiate(tcx, self.args),
|
||||
)
|
||||
.into(),
|
||||
ty::AliasTermKind::UnevaluatedConst | ty::AliasTermKind::ProjectionConst => {
|
||||
ty::Const::new_unevaluated(
|
||||
tcx,
|
||||
ty::UnevaluatedConst::new(self.def_id, self.args),
|
||||
tcx.type_of(self.def_id).instantiate(tcx, self.args),
|
||||
)
|
||||
.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1358,7 +1362,7 @@ pub struct AliasTy<'tcx> {
|
|||
/// aka. `tcx.parent(def_id)`.
|
||||
pub def_id: DefId,
|
||||
|
||||
/// This field exists to prevent the creation of `AliasTy` without using
|
||||
/// This field exists to prevent the creation of `AliasT` without using
|
||||
/// [AliasTy::new].
|
||||
_use_alias_ty_new_instead: (),
|
||||
}
|
||||
|
@ -1422,7 +1426,6 @@ impl<'tcx> AliasTy<'tcx> {
|
|||
self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> (ty::TraitRef<'tcx>, &'tcx [ty::GenericArg<'tcx>]) {
|
||||
debug_assert!(matches!(tcx.def_kind(self.def_id), DefKind::AssocTy | DefKind::AssocConst));
|
||||
let trait_def_id = self.trait_def_id(tcx);
|
||||
let trait_generics = tcx.generics_of(trait_def_id);
|
||||
(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue