Use builin_index instead of hand-rolling it
This commit is contained in:
parent
d76fe15402
commit
550aed825b
6 changed files with 11 additions and 21 deletions
|
|
@ -1048,8 +1048,7 @@ fn check_param_wf(tcx: TyCtxt<'_>, param: &hir::GenericParam<'_>) -> Result<(),
|
|||
match ty.kind() {
|
||||
ty::Adt(adt_def, ..) => adt_def.did().is_local(),
|
||||
// Arrays and slices use the inner type's `ConstParamTy`.
|
||||
ty::Array(ty, ..) => ty_is_local(*ty),
|
||||
ty::Slice(ty) => ty_is_local(*ty),
|
||||
ty::Array(ty, ..) | ty::Slice(ty) => ty_is_local(*ty),
|
||||
// `&` references use the inner type's `ConstParamTy`.
|
||||
// `&mut` are not supported.
|
||||
ty::Ref(_, ty, ast::Mutability::Not) => ty_is_local(*ty),
|
||||
|
|
|
|||
|
|
@ -1793,10 +1793,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
let element_ty = if !args.is_empty() {
|
||||
let coerce_to = expected
|
||||
.to_option(self)
|
||||
.and_then(|uty| match *self.try_structurally_resolve_type(expr.span, uty).kind() {
|
||||
ty::Array(ty, _) | ty::Slice(ty) => Some(ty),
|
||||
_ => None,
|
||||
})
|
||||
.and_then(|uty| self.try_structurally_resolve_type(expr.span, uty).builtin_index())
|
||||
.unwrap_or_else(|| self.next_ty_var(expr.span));
|
||||
let mut coerce = CoerceMany::with_coercion_sites(coerce_to, args);
|
||||
assert_eq!(self.diverges.get(), Diverges::Maybe);
|
||||
|
|
@ -1874,10 +1871,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
}
|
||||
|
||||
let uty = match expected {
|
||||
ExpectHasType(uty) => match *uty.kind() {
|
||||
ty::Array(ty, _) | ty::Slice(ty) => Some(ty),
|
||||
_ => None,
|
||||
},
|
||||
ExpectHasType(uty) => uty.builtin_index(),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -249,12 +249,12 @@ impl<'p, 'tcx: 'p> RustcPatCtxt<'p, 'tcx> {
|
|||
ty::Ref(_, rty, _) => reveal_and_alloc(cx, once(*rty)),
|
||||
_ => bug!("Unexpected type for `Ref` constructor: {ty:?}"),
|
||||
},
|
||||
Slice(slice) => match *ty.kind() {
|
||||
ty::Slice(ty) | ty::Array(ty, _) => {
|
||||
Slice(slice) => match ty.builtin_index() {
|
||||
Some(ty) => {
|
||||
let arity = slice.arity();
|
||||
reveal_and_alloc(cx, (0..arity).map(|_| ty))
|
||||
}
|
||||
_ => bug!("bad slice pattern {:?} {:?}", ctor, ty),
|
||||
None => bug!("bad slice pattern {:?} {:?}", ctor, ty),
|
||||
},
|
||||
DerefPattern(pointee_ty) => reveal_and_alloc(cx, once(pointee_ty.inner())),
|
||||
Bool(..) | IntRange(..) | F16Range(..) | F32Range(..) | F64Range(..)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue