Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/solver.rs')
-rw-r--r--crates/hir-ty/src/next_solver/solver.rs45
1 files changed, 16 insertions, 29 deletions
diff --git a/crates/hir-ty/src/next_solver/solver.rs b/crates/hir-ty/src/next_solver/solver.rs
index 7b96b4008f..b5ed770e16 100644
--- a/crates/hir-ty/src/next_solver/solver.rs
+++ b/crates/hir-ty/src/next_solver/solver.rs
@@ -11,13 +11,10 @@ use rustc_type_ir::{
};
use tracing::debug;
-use crate::{
- ImplTraitId,
- next_solver::{
- AliasTy, CanonicalVarKind, Clause, ClauseKind, CoercePredicate, GenericArgs, ImplIdWrapper,
- ParamEnv, Predicate, PredicateKind, SubtypePredicate, Ty, TyKind, fold::fold_tys,
- util::sizedness_fast_path,
- },
+use crate::next_solver::{
+ AliasTy, CanonicalVarKind, Clause, ClauseKind, CoercePredicate, GenericArgs, ImplIdWrapper,
+ ParamEnv, Predicate, PredicateKind, SubtypePredicate, Ty, TyKind, fold::fold_tys,
+ util::sizedness_fast_path,
};
use super::{
@@ -163,20 +160,7 @@ impl<'db> SolverDelegate for SolverContext<'db> {
})
};
- let db = interner.db;
- let (opaques_table, opaque_idx) = match opaque_id.loc(db) {
- ImplTraitId::ReturnTypeImplTrait(func, opaque_idx) => {
- (db.return_type_impl_traits(func), opaque_idx)
- }
- ImplTraitId::TypeAliasImplTrait(type_alias, opaque_idx) => {
- (db.type_alias_impl_traits(type_alias), opaque_idx)
- }
- };
- let item_bounds = opaques_table
- .as_deref()
- .unwrap()
- .as_ref()
- .map_bound(|table| &table.impl_traits[opaque_idx].predicates);
+ let item_bounds = opaque_id.predicates(interner.db);
for predicate in item_bounds.iter_instantiated_copied(interner, args.as_slice()) {
let predicate = replace_opaques_in(predicate);
@@ -249,14 +233,17 @@ impl<'db> SolverDelegate for SolverContext<'db> {
_param_env: ParamEnv<'db>,
uv: rustc_type_ir::UnevaluatedConst<Self::Interner>,
) -> Option<<Self::Interner as rustc_type_ir::Interner>::Const> {
- let c = match uv.def {
- SolverDefId::ConstId(c) => GeneralConstId::ConstId(c),
- SolverDefId::StaticId(c) => GeneralConstId::StaticId(c),
- _ => unreachable!(),
- };
- let subst = uv.args;
- let ec = self.cx().db.const_eval(c, subst, None).ok()?;
- Some(ec)
+ match uv.def.0 {
+ GeneralConstId::ConstId(c) => {
+ let subst = uv.args;
+ let ec = self.cx().db.const_eval(c, subst, None).ok()?;
+ Some(ec)
+ }
+ GeneralConstId::StaticId(c) => {
+ let ec = self.cx().db.const_eval_static(c).ok()?;
+ Some(ec)
+ }
+ }
}
fn compute_goal_fast_path(