Eliminate duplicate codes of expected_found_bool

This commit is contained in:
lzh 2021-12-17 11:17:43 +08:00
parent 0b42deaccc
commit a995462f9a
3 changed files with 7 additions and 15 deletions

View file

@ -37,7 +37,7 @@ use crate::traits::{Obligation, PredicateObligations};
use rustc_data_structures::sso::SsoHashMap; use rustc_data_structures::sso::SsoHashMap;
use rustc_hir::def_id::DefId; use rustc_hir::def_id::DefId;
use rustc_middle::traits::ObligationCause; use rustc_middle::traits::ObligationCause;
use rustc_middle::ty::error::TypeError; use rustc_middle::ty::error::{ExpectedFound, TypeError};
use rustc_middle::ty::relate::{self, Relate, RelateResult, TypeRelation}; use rustc_middle::ty::relate::{self, Relate, RelateResult, TypeRelation};
use rustc_middle::ty::subst::SubstsRef; use rustc_middle::ty::subst::SubstsRef;
use rustc_middle::ty::{self, InferConst, ToPredicate, Ty, TyCtxt, TypeFoldable}; use rustc_middle::ty::{self, InferConst, ToPredicate, Ty, TyCtxt, TypeFoldable};
@ -790,7 +790,7 @@ pub fn const_unification_error<'tcx>(
a_is_expected: bool, a_is_expected: bool,
(a, b): (&'tcx ty::Const<'tcx>, &'tcx ty::Const<'tcx>), (a, b): (&'tcx ty::Const<'tcx>, &'tcx ty::Const<'tcx>),
) -> TypeError<'tcx> { ) -> TypeError<'tcx> {
TypeError::ConstMismatch(ty::relate::expected_found_bool(a_is_expected, a, b)) TypeError::ConstMismatch(ExpectedFound::new(a_is_expected, a, b))
} }
fn int_unification_error<'tcx>( fn int_unification_error<'tcx>(
@ -798,7 +798,7 @@ fn int_unification_error<'tcx>(
v: (ty::IntVarValue, ty::IntVarValue), v: (ty::IntVarValue, ty::IntVarValue),
) -> TypeError<'tcx> { ) -> TypeError<'tcx> {
let (a, b) = v; let (a, b) = v;
TypeError::IntMismatch(ty::relate::expected_found_bool(a_is_expected, a, b)) TypeError::IntMismatch(ExpectedFound::new(a_is_expected, a, b))
} }
fn float_unification_error<'tcx>( fn float_unification_error<'tcx>(
@ -806,7 +806,7 @@ fn float_unification_error<'tcx>(
v: (ty::FloatVarValue, ty::FloatVarValue), v: (ty::FloatVarValue, ty::FloatVarValue),
) -> TypeError<'tcx> { ) -> TypeError<'tcx> {
let (ty::FloatVarValue(a), ty::FloatVarValue(b)) = v; let (ty::FloatVarValue(a), ty::FloatVarValue(b)) = v;
TypeError::FloatMismatch(ty::relate::expected_found_bool(a_is_expected, a, b)) TypeError::FloatMismatch(ExpectedFound::new(a_is_expected, a, b))
} }
struct ConstInferUnifier<'cx, 'tcx> { struct ConstInferUnifier<'cx, 'tcx> {

View file

@ -849,13 +849,5 @@ pub fn expected_found<R, T>(relation: &mut R, a: T, b: T) -> ExpectedFound<T>
where where
R: TypeRelation<'tcx>, R: TypeRelation<'tcx>,
{ {
expected_found_bool(relation.a_is_expected(), a, b) ExpectedFound::new(relation.a_is_expected(), a, b)
}
pub fn expected_found_bool<T>(a_is_expected: bool, a: T, b: T) -> ExpectedFound<T> {
if a_is_expected {
ExpectedFound { expected: a, found: b }
} else {
ExpectedFound { expected: b, found: a }
}
} }

View file

@ -36,8 +36,8 @@ use rustc_infer::infer;
use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind}; use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
use rustc_infer::infer::InferOk; use rustc_infer::infer::InferOk;
use rustc_middle::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase}; use rustc_middle::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase};
use rustc_middle::ty::error::ExpectedFound;
use rustc_middle::ty::error::TypeError::{FieldMisMatch, Sorts}; use rustc_middle::ty::error::TypeError::{FieldMisMatch, Sorts};
use rustc_middle::ty::relate::expected_found_bool;
use rustc_middle::ty::subst::SubstsRef; use rustc_middle::ty::subst::SubstsRef;
use rustc_middle::ty::{self, AdtKind, Ty, TypeFoldable}; use rustc_middle::ty::{self, AdtKind, Ty, TypeFoldable};
use rustc_session::parse::feature_err; use rustc_session::parse::feature_err;
@ -1494,7 +1494,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
&self.misc(base_expr.span), &self.misc(base_expr.span),
adt_ty, adt_ty,
base_ty, base_ty,
Sorts(expected_found_bool(true, adt_ty, base_ty)), Sorts(ExpectedFound::new(true, adt_ty, base_ty)),
) )
.emit(); .emit();
} }