Move TyCtxt::mk_x
to Ty::new_x
where applicable
This commit is contained in:
parent
5dac6b320b
commit
12138b8e5e
164 changed files with 1386 additions and 1185 deletions
|
@ -28,7 +28,7 @@ pub(in crate::solve) fn instantiate_constituent_tys_for_auto_trait<'tcx>(
|
|||
| ty::Char => Ok(vec![]),
|
||||
|
||||
// Treat `str` like it's defined as `struct str([u8]);`
|
||||
ty::Str => Ok(vec![tcx.mk_slice(tcx.types.u8)]),
|
||||
ty::Str => Ok(vec![Ty::new_slice(tcx, tcx.types.u8)]),
|
||||
|
||||
ty::Dynamic(..)
|
||||
| ty::Param(..)
|
||||
|
@ -233,7 +233,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_callable<'tcx>(
|
|||
{
|
||||
Ok(Some(
|
||||
sig.subst(tcx, substs)
|
||||
.map_bound(|sig| (tcx.mk_tup(sig.inputs()), sig.output())),
|
||||
.map_bound(|sig| (Ty::new_tup(tcx, sig.inputs()), sig.output())),
|
||||
))
|
||||
} else {
|
||||
Err(NoSolution)
|
||||
|
@ -242,7 +242,7 @@ pub(in crate::solve) fn extract_tupled_inputs_and_output_from_callable<'tcx>(
|
|||
// keep this in sync with assemble_fn_pointer_candidates until the old solver is removed.
|
||||
ty::FnPtr(sig) => {
|
||||
if sig.is_fn_trait_compatible() {
|
||||
Ok(Some(sig.map_bound(|sig| (tcx.mk_tup(sig.inputs()), sig.output()))))
|
||||
Ok(Some(sig.map_bound(|sig| (Ty::new_tup(tcx, sig.inputs()), sig.output()))))
|
||||
} else {
|
||||
Err(NoSolution)
|
||||
}
|
||||
|
|
|
@ -283,7 +283,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'_, 'tcx> {
|
|||
// any equated inference vars correctly!
|
||||
let root_vid = self.infcx.root_var(vid);
|
||||
if root_vid != vid {
|
||||
t = self.infcx.tcx.mk_ty_var(root_vid);
|
||||
t = Ty::new_var(self.infcx.tcx, root_vid);
|
||||
vid = root_vid;
|
||||
}
|
||||
|
||||
|
@ -366,7 +366,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for Canonicalizer<'_, 'tcx> {
|
|||
}),
|
||||
);
|
||||
let bt = ty::BoundTy { var, kind: BoundTyKind::Anon };
|
||||
self.interner().mk_bound(self.binder_index, bt)
|
||||
Ty::new_bound(self.infcx.tcx, self.binder_index, bt)
|
||||
}
|
||||
|
||||
fn fold_const(&mut self, mut c: ty::Const<'tcx>) -> ty::Const<'tcx> {
|
||||
|
|
|
@ -187,7 +187,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for ProjectionPredicate<'tcx> {
|
|||
.subst(tcx, goal.predicate.projection_ty.substs),
|
||||
)
|
||||
.into(),
|
||||
ty::AssocKind::Type => tcx.ty_error(guar).into(),
|
||||
ty::AssocKind::Type => Ty::new_error(tcx,guar).into(),
|
||||
ty::AssocKind::Fn => unreachable!(),
|
||||
};
|
||||
ecx.eq(goal.param_env, goal.predicate.term, error_term)
|
||||
|
@ -343,7 +343,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for ProjectionPredicate<'tcx> {
|
|||
| ty::Never
|
||||
| ty::Foreign(..) => tcx.types.unit,
|
||||
|
||||
ty::Error(e) => tcx.ty_error(*e),
|
||||
ty::Error(e) => Ty::new_error(tcx, *e),
|
||||
|
||||
ty::Str | ty::Slice(_) => tcx.types.usize,
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
tcx.mk_substs_from_iter(a_substs.iter().enumerate().map(|(i, a)| {
|
||||
if unsizing_params.contains(i as u32) { b_substs[i] } else { a }
|
||||
}));
|
||||
let unsized_a_ty = tcx.mk_adt(a_def, new_a_substs);
|
||||
let unsized_a_ty = Ty::new_adt(tcx, a_def, new_a_substs);
|
||||
|
||||
// Finally, we require that `TailA: Unsize<TailB>` for the tail field
|
||||
// types.
|
||||
|
@ -436,7 +436,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
|
||||
// Substitute just the tail field of B., and require that they're equal.
|
||||
let unsized_a_ty =
|
||||
tcx.mk_tup_from_iter(a_rest_tys.iter().chain([b_last_ty]).copied());
|
||||
Ty::new_tup_from_iter(tcx, a_rest_tys.iter().chain([b_last_ty]).copied());
|
||||
ecx.eq(goal.param_env, unsized_a_ty, b_ty)?;
|
||||
|
||||
// Similar to ADTs, require that the rest of the fields are equal.
|
||||
|
@ -495,7 +495,7 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
|
|||
.map(ty::Binder::dummy),
|
||||
);
|
||||
let new_a_data = tcx.mk_poly_existential_predicates_from_iter(new_a_data);
|
||||
let new_a_ty = tcx.mk_dynamic(new_a_data, b_region, ty::Dyn);
|
||||
let new_a_ty = Ty::new_dynamic(tcx, new_a_data, b_region, ty::Dyn);
|
||||
|
||||
// We also require that A's lifetime outlives B's lifetime.
|
||||
ecx.eq(goal.param_env, new_a_ty, b_ty)?;
|
||||
|
|
|
@ -974,7 +974,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
&& self.fallback_has_occurred
|
||||
{
|
||||
let predicate = trait_predicate.map_bound(|trait_pred| {
|
||||
trait_pred.with_self_ty(self.tcx, self.tcx.mk_unit())
|
||||
trait_pred.with_self_ty(self.tcx, Ty::new_unit(self.tcx))
|
||||
});
|
||||
let unit_obligation = obligation.with(tcx, predicate);
|
||||
if self.predicate_may_hold(&unit_obligation) {
|
||||
|
@ -1625,10 +1625,12 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
bound_predicate.rebind(data),
|
||||
);
|
||||
let unnormalized_term = match data.term.unpack() {
|
||||
ty::TermKind::Ty(_) => self
|
||||
.tcx
|
||||
.mk_projection(data.projection_ty.def_id, data.projection_ty.substs)
|
||||
.into(),
|
||||
ty::TermKind::Ty(_) => Ty::new_projection(
|
||||
self.tcx,
|
||||
data.projection_ty.def_id,
|
||||
data.projection_ty.substs,
|
||||
)
|
||||
.into(),
|
||||
ty::TermKind::Const(ct) => ty::Const::new_unevaluated(
|
||||
self.tcx,
|
||||
ty::UnevaluatedConst {
|
||||
|
|
|
@ -786,7 +786,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
if let Some(steps) =
|
||||
autoderef.into_iter().enumerate().find_map(|(steps, (ty, obligations))| {
|
||||
// Re-add the `&`
|
||||
let ty = self.tcx.mk_ref(region, TypeAndMut { ty, mutbl });
|
||||
let ty = Ty::new_ref(self.tcx, region, TypeAndMut { ty, mutbl });
|
||||
|
||||
// Remapping bound vars here
|
||||
let real_trait_pred_and_ty =
|
||||
|
@ -1298,13 +1298,13 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
let trait_pred_and_imm_ref = old_pred.map_bound(|trait_pred| {
|
||||
(
|
||||
trait_pred,
|
||||
self.tcx.mk_imm_ref(self.tcx.lifetimes.re_static, trait_pred.self_ty()),
|
||||
Ty::new_imm_ref(self.tcx, self.tcx.lifetimes.re_static, trait_pred.self_ty()),
|
||||
)
|
||||
});
|
||||
let trait_pred_and_mut_ref = old_pred.map_bound(|trait_pred| {
|
||||
(
|
||||
trait_pred,
|
||||
self.tcx.mk_mut_ref(self.tcx.lifetimes.re_static, trait_pred.self_ty()),
|
||||
Ty::new_mut_ref(self.tcx, self.tcx.lifetimes.re_static, trait_pred.self_ty()),
|
||||
)
|
||||
});
|
||||
|
||||
|
@ -1465,7 +1465,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
) {
|
||||
let ty::Ref(_, object_ty, hir::Mutability::Not) = target_ty.kind() else { return; };
|
||||
let ty::Dynamic(predicates, _, ty::Dyn) = object_ty.kind() else { return; };
|
||||
let self_ref_ty = self.tcx.mk_imm_ref(self.tcx.lifetimes.re_erased, self_ty);
|
||||
let self_ref_ty = Ty::new_imm_ref(self.tcx, self.tcx.lifetimes.re_erased, self_ty);
|
||||
|
||||
for predicate in predicates.iter() {
|
||||
if !self.predicate_must_hold_modulo_regions(
|
||||
|
@ -1706,8 +1706,8 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
if let ty::Ref(region, t_type, mutability) = *trait_pred.skip_binder().self_ty().kind()
|
||||
{
|
||||
let suggested_ty = match mutability {
|
||||
hir::Mutability::Mut => self.tcx.mk_imm_ref(region, t_type),
|
||||
hir::Mutability::Not => self.tcx.mk_mut_ref(region, t_type),
|
||||
hir::Mutability::Mut => Ty::new_imm_ref(self.tcx, region, t_type),
|
||||
hir::Mutability::Not => Ty::new_mut_ref(self.tcx, region, t_type),
|
||||
};
|
||||
|
||||
// Remapping bound vars here
|
||||
|
@ -1951,7 +1951,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
),
|
||||
};
|
||||
|
||||
infcx.tcx.mk_fn_ptr(trait_ref.rebind(sig))
|
||||
Ty::new_fn_ptr(infcx.tcx, trait_ref.rebind(sig))
|
||||
}
|
||||
|
||||
let argument_kind = match expected.skip_binder().self_ty().kind() {
|
||||
|
@ -3347,7 +3347,8 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
let item_def_id = self.tcx.associated_item_def_ids(future_trait)[0];
|
||||
// `<T as Future>::Output`
|
||||
let projection_ty = trait_pred.map_bound(|trait_pred| {
|
||||
self.tcx.mk_projection(
|
||||
Ty::new_projection(
|
||||
self.tcx,
|
||||
item_def_id,
|
||||
// Future::Output has no substs
|
||||
[trait_pred.self_ty()],
|
||||
|
@ -3501,7 +3502,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
{
|
||||
if let hir::Expr { kind: hir::ExprKind::Block(..), .. } = expr {
|
||||
let expr = expr.peel_blocks();
|
||||
let ty = typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(tcx.ty_error_misc());
|
||||
let ty = typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(Ty::new_misc_error(tcx,));
|
||||
let span = expr.span;
|
||||
if Some(span) != err.span.primary_span() {
|
||||
err.span_label(
|
||||
|
@ -3555,7 +3556,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
{
|
||||
type_diffs = vec![
|
||||
Sorts(ty::error::ExpectedFound {
|
||||
expected: self.tcx.mk_alias(ty::Projection, where_pred.skip_binder().projection_ty),
|
||||
expected: Ty::new_alias(self.tcx,ty::Projection, where_pred.skip_binder().projection_ty),
|
||||
found,
|
||||
}),
|
||||
];
|
||||
|
@ -3646,7 +3647,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
|
||||
// Extract `<U as Deref>::Target` assoc type and check that it is `T`
|
||||
&& let Some(deref_target_did) = tcx.lang_items().deref_target()
|
||||
&& let projection = tcx.mk_projection(deref_target_did, tcx.mk_substs(&[ty::GenericArg::from(found_ty)]))
|
||||
&& let projection = Ty::new_projection(tcx,deref_target_did, tcx.mk_substs(&[ty::GenericArg::from(found_ty)]))
|
||||
&& let InferOk { value: deref_target, obligations } = infcx.at(&ObligationCause::dummy(), param_env).normalize(projection)
|
||||
&& obligations.iter().all(|obligation| infcx.predicate_must_hold_modulo_regions(obligation))
|
||||
&& infcx.can_eq(param_env, deref_target, target_ty)
|
||||
|
@ -3693,7 +3694,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
let mut assocs = vec![];
|
||||
let mut expr = expr;
|
||||
let mut prev_ty = self.resolve_vars_if_possible(
|
||||
typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(tcx.ty_error_misc()),
|
||||
typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(Ty::new_misc_error(tcx)),
|
||||
);
|
||||
while let hir::ExprKind::MethodCall(_path_segment, rcvr_expr, _args, span) = expr.kind {
|
||||
// Point at every method call in the chain with the resulting type.
|
||||
|
@ -3704,7 +3705,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
self.probe_assoc_types_at_expr(&type_diffs, span, prev_ty, expr.hir_id, param_env);
|
||||
assocs.push(assocs_in_this_method);
|
||||
prev_ty = self.resolve_vars_if_possible(
|
||||
typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(tcx.ty_error_misc()),
|
||||
typeck_results.expr_ty_adjusted_opt(expr).unwrap_or(Ty::new_misc_error(tcx)),
|
||||
);
|
||||
|
||||
if let hir::ExprKind::Path(hir::QPath::Resolved(None, path)) = expr.kind
|
||||
|
@ -3722,7 +3723,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
if let hir::Node::Param(param) = parent {
|
||||
// ...and it is a an fn argument.
|
||||
let prev_ty = self.resolve_vars_if_possible(
|
||||
typeck_results.node_type_opt(param.hir_id).unwrap_or(tcx.ty_error_misc()),
|
||||
typeck_results.node_type_opt(param.hir_id).unwrap_or(Ty::new_misc_error(tcx,)),
|
||||
);
|
||||
let assocs_in_this_method = self.probe_assoc_types_at_expr(&type_diffs, param.ty_span, prev_ty, param.hir_id, param_env);
|
||||
if assocs_in_this_method.iter().any(|a| a.is_some()) {
|
||||
|
|
|
@ -509,7 +509,7 @@ fn virtual_call_violation_for_method<'tcx>(
|
|||
|
||||
// e.g., `Rc<()>`
|
||||
let unit_receiver_ty =
|
||||
receiver_for_self_ty(tcx, receiver_ty, tcx.mk_unit(), method.def_id);
|
||||
receiver_for_self_ty(tcx, receiver_ty, Ty::new_unit(tcx), method.def_id);
|
||||
|
||||
match abi_of_ty(unit_receiver_ty) {
|
||||
Some(Abi::Scalar(..)) => (),
|
||||
|
@ -664,7 +664,7 @@ fn object_ty_for_trait<'tcx>(
|
|||
);
|
||||
debug!(?existential_predicates);
|
||||
|
||||
tcx.mk_dynamic(existential_predicates, lifetime, ty::Dyn)
|
||||
Ty::new_dynamic(tcx, existential_predicates, lifetime, ty::Dyn)
|
||||
}
|
||||
|
||||
/// Checks the method's receiver (the `self` argument) can be dispatched on when `Self` is a
|
||||
|
@ -732,7 +732,7 @@ fn receiver_is_dispatchable<'tcx>(
|
|||
// FIXME(mikeyhew) this is a total hack. Once object_safe_for_dispatch is stabilized, we can
|
||||
// replace this with `dyn Trait`
|
||||
let unsized_self_ty: Ty<'tcx> =
|
||||
tcx.mk_ty_param(u32::MAX, Symbol::intern("RustaceansAreAwesome"));
|
||||
Ty::new_param(tcx, u32::MAX, Symbol::intern("RustaceansAreAwesome"));
|
||||
|
||||
// `Receiver[Self => U]`
|
||||
let unsized_receiver_ty =
|
||||
|
|
|
@ -906,7 +906,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for BoundVarReplacer<'_, 'tcx> {
|
|||
let universe = self.universe_for(debruijn);
|
||||
let p = ty::PlaceholderType { universe, bound: bound_ty };
|
||||
self.mapped_types.insert(p, bound_ty);
|
||||
self.infcx.tcx.mk_placeholder(p)
|
||||
Ty::new_placeholder(self.infcx.tcx, p)
|
||||
}
|
||||
_ if t.has_vars_bound_at_or_above(self.current_index) => t.super_fold_with(self),
|
||||
_ => t,
|
||||
|
@ -1036,7 +1036,7 @@ impl<'tcx> TypeFolder<TyCtxt<'tcx>> for PlaceholderReplacer<'_, 'tcx> {
|
|||
let db = ty::DebruijnIndex::from_usize(
|
||||
self.universe_indices.len() - index + self.current_index.as_usize() - 1,
|
||||
);
|
||||
self.interner().mk_bound(db, *replace_var)
|
||||
Ty::new_bound(self.infcx.tcx, db, *replace_var)
|
||||
}
|
||||
None => ty,
|
||||
}
|
||||
|
@ -1440,7 +1440,7 @@ struct Progress<'tcx> {
|
|||
|
||||
impl<'tcx> Progress<'tcx> {
|
||||
fn error(tcx: TyCtxt<'tcx>, guar: ErrorGuaranteed) -> Self {
|
||||
Progress { term: tcx.ty_error(guar).into(), obligations: vec![] }
|
||||
Progress { term: Ty::new_error(tcx, guar).into(), obligations: vec![] }
|
||||
}
|
||||
|
||||
fn with_addl_obligations(mut self, mut obligations: Vec<PredicateObligation<'tcx>>) -> Self {
|
||||
|
@ -1499,9 +1499,12 @@ fn project<'cx, 'tcx>(
|
|||
ProjectionCandidateSet::None => {
|
||||
let tcx = selcx.tcx();
|
||||
let term = match tcx.def_kind(obligation.predicate.def_id) {
|
||||
DefKind::AssocTy | DefKind::ImplTraitPlaceholder => tcx
|
||||
.mk_projection(obligation.predicate.def_id, obligation.predicate.substs)
|
||||
.into(),
|
||||
DefKind::AssocTy | DefKind::ImplTraitPlaceholder => Ty::new_projection(
|
||||
tcx,
|
||||
obligation.predicate.def_id,
|
||||
obligation.predicate.substs,
|
||||
)
|
||||
.into(),
|
||||
DefKind::AssocConst => ty::Const::new_unevaluated(
|
||||
tcx,
|
||||
ty::UnevaluatedConst::new(
|
||||
|
@ -2351,7 +2354,7 @@ fn confirm_param_env_candidate<'cx, 'tcx>(
|
|||
obligation, poly_cache_entry, e,
|
||||
);
|
||||
debug!("confirm_param_env_candidate: {}", msg);
|
||||
let err = infcx.tcx.ty_error_with_message(obligation.cause.span, msg);
|
||||
let err = Ty::new_error_with_message(infcx.tcx, obligation.cause.span, msg);
|
||||
Progress { term: err.into(), obligations: vec![] }
|
||||
}
|
||||
}
|
||||
|
@ -2383,7 +2386,7 @@ fn confirm_impl_candidate<'cx, 'tcx>(
|
|||
"confirm_impl_candidate: no associated type {:?} for {:?}",
|
||||
assoc_ty.item.name, obligation.predicate
|
||||
);
|
||||
return Progress { term: tcx.ty_error_misc().into(), obligations: nested };
|
||||
return Progress { term: Ty::new_misc_error(tcx).into(), obligations: nested };
|
||||
}
|
||||
// If we're trying to normalize `<Vec<u32> as X>::A<S>` using
|
||||
//`impl<T> X for Vec<T> { type A<Y> = Box<Y>; }`, then:
|
||||
|
@ -2405,7 +2408,8 @@ fn confirm_impl_candidate<'cx, 'tcx>(
|
|||
ty.map_bound(|ty| ty.into())
|
||||
};
|
||||
if !check_substs_compatible(tcx, assoc_ty.item, substs) {
|
||||
let err = tcx.ty_error_with_message(
|
||||
let err = Ty::new_error_with_message(
|
||||
tcx,
|
||||
obligation.cause.span,
|
||||
"impl item and trait item have different parameters",
|
||||
);
|
||||
|
@ -2432,13 +2436,14 @@ fn confirm_impl_trait_in_trait_candidate<'tcx>(
|
|||
// We don't support specialization for RPITITs anyways... yet.
|
||||
// Also don't try to project to an RPITIT that has no value
|
||||
if !leaf_def.is_final() || !leaf_def.item.defaultness(tcx).has_value() {
|
||||
return Progress { term: tcx.ty_error_misc().into(), obligations };
|
||||
return Progress { term: Ty::new_misc_error(tcx).into(), obligations };
|
||||
}
|
||||
|
||||
// Use the default `impl Trait` for the trait, e.g., for a default trait body
|
||||
if leaf_def.item.container == ty::AssocItemContainer::TraitContainer {
|
||||
return Progress {
|
||||
term: tcx.mk_opaque(obligation.predicate.def_id, obligation.predicate.substs).into(),
|
||||
term: Ty::new_opaque(tcx, obligation.predicate.def_id, obligation.predicate.substs)
|
||||
.into(),
|
||||
obligations,
|
||||
};
|
||||
}
|
||||
|
@ -2456,7 +2461,8 @@ fn confirm_impl_trait_in_trait_candidate<'tcx>(
|
|||
);
|
||||
|
||||
if !check_substs_compatible(tcx, leaf_def.item, impl_fn_substs) {
|
||||
let err = tcx.ty_error_with_message(
|
||||
let err = Ty::new_error_with_message(
|
||||
tcx,
|
||||
obligation.cause.span,
|
||||
"impl method and trait method have different parameters",
|
||||
);
|
||||
|
@ -2502,7 +2508,7 @@ fn confirm_impl_trait_in_trait_candidate<'tcx>(
|
|||
cause.clone(),
|
||||
obligation.recursion_depth + 1,
|
||||
tcx.collect_return_position_impl_trait_in_trait_tys(impl_fn_def_id).map_or_else(
|
||||
|guar| tcx.ty_error(guar),
|
||||
|guar| Ty::new_error(tcx, guar),
|
||||
|tys| tys[&obligation.predicate.def_id].subst(tcx, impl_fn_substs),
|
||||
),
|
||||
&mut obligations,
|
||||
|
|
|
@ -587,7 +587,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
let kind = ty::BoundTyKind::Param(param.def_id, param.name);
|
||||
let bound_var = ty::BoundVariableKind::Ty(kind);
|
||||
bound_vars.push(bound_var);
|
||||
tcx.mk_bound(
|
||||
Ty::new_bound(
|
||||
tcx,
|
||||
ty::INNERMOST,
|
||||
ty::BoundTy {
|
||||
var: ty::BoundVar::from_usize(bound_vars.len() - 1),
|
||||
|
@ -946,7 +947,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
.map(ty::Binder::dummy),
|
||||
);
|
||||
let existential_predicates = tcx.mk_poly_existential_predicates_from_iter(iter);
|
||||
let source_trait = tcx.mk_dynamic(existential_predicates, r_b, repr_a);
|
||||
let source_trait = Ty::new_dynamic(tcx, existential_predicates, r_b, repr_a);
|
||||
|
||||
// Require that the traits involved in this upcast are **equal**;
|
||||
// only the **lifetime bound** is changed.
|
||||
|
@ -1039,7 +1040,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
.map(ty::Binder::dummy),
|
||||
);
|
||||
let existential_predicates = tcx.mk_poly_existential_predicates_from_iter(iter);
|
||||
let source_trait = tcx.mk_dynamic(existential_predicates, r_b, dyn_a);
|
||||
let source_trait = Ty::new_dynamic(tcx, existential_predicates, r_b, dyn_a);
|
||||
|
||||
// Require that the traits involved in this upcast are **equal**;
|
||||
// only the **lifetime bound** is changed.
|
||||
|
@ -1157,7 +1158,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
let substs = tcx.mk_substs_from_iter(substs_a.iter().enumerate().map(|(i, k)| {
|
||||
if unsizing_params.contains(i as u32) { substs_b[i] } else { k }
|
||||
}));
|
||||
let new_struct = tcx.mk_adt(def, substs);
|
||||
let new_struct = Ty::new_adt(tcx, def, substs);
|
||||
let InferOk { obligations, .. } = self
|
||||
.infcx
|
||||
.at(&obligation.cause, obligation.param_env)
|
||||
|
@ -1188,7 +1189,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
// Check that the source tuple with the target's
|
||||
// last element is equal to the target.
|
||||
let new_tuple =
|
||||
tcx.mk_tup_from_iter(a_mid.iter().copied().chain(iter::once(b_last)));
|
||||
Ty::new_tup_from_iter(tcx, a_mid.iter().copied().chain(iter::once(b_last)));
|
||||
let InferOk { obligations, .. } = self
|
||||
.infcx
|
||||
.at(&obligation.cause, obligation.param_env)
|
||||
|
|
|
@ -2285,7 +2285,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
|
|||
| ty::Char => ty::Binder::dummy(Vec::new()),
|
||||
|
||||
// Treat this like `struct str([u8]);`
|
||||
ty::Str => ty::Binder::dummy(vec![self.tcx().mk_slice(self.tcx().types.u8)]),
|
||||
ty::Str => ty::Binder::dummy(vec![Ty::new_slice(self.tcx(), self.tcx().types.u8)]),
|
||||
|
||||
ty::Placeholder(..)
|
||||
| ty::Dynamic(..)
|
||||
|
@ -2435,7 +2435,7 @@ impl<'tcx> SelectionContext<'_, 'tcx> {
|
|||
),
|
||||
);
|
||||
let value = self.infcx.fresh_substs_for_item(obligation.cause.span, impl_def_id);
|
||||
let err = self.tcx().ty_error(guar);
|
||||
let err = Ty::new_error(self.tcx(), guar);
|
||||
let value = value.fold_with(&mut BottomUpFolder {
|
||||
tcx: self.tcx(),
|
||||
ty_op: |_| err,
|
||||
|
|
|
@ -265,7 +265,7 @@ pub fn closure_trait_ref_and_return_type<'tcx>(
|
|||
assert!(!self_ty.has_escaping_bound_vars());
|
||||
let arguments_tuple = match tuple_arguments {
|
||||
TupleArgumentsFlag::No => sig.skip_binder().inputs()[0],
|
||||
TupleArgumentsFlag::Yes => tcx.mk_tup(sig.skip_binder().inputs()),
|
||||
TupleArgumentsFlag::Yes => Ty::new_tup(tcx, sig.skip_binder().inputs()),
|
||||
};
|
||||
let trait_ref = ty::TraitRef::new(tcx, fn_trait_def_id, [self_ty, arguments_tuple]);
|
||||
sig.map_bound(|sig| (trait_ref, sig.output()))
|
||||
|
|
|
@ -952,7 +952,7 @@ pub fn object_region_bounds<'tcx>(
|
|||
// Since we don't actually *know* the self type for an object,
|
||||
// this "open(err)" serves as a kind of dummy standin -- basically
|
||||
// a placeholder type.
|
||||
let open_ty = tcx.mk_fresh_ty(0);
|
||||
let open_ty = Ty::new_fresh(tcx, 0);
|
||||
|
||||
let predicates = existential_predicates.iter().filter_map(|predicate| {
|
||||
if let ty::ExistentialPredicate::Projection(_) = predicate.skip_binder() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue