Skip to content

Commit c251353

Browse files
committed
Add 'db to TraitEnvironment
1 parent 7b9ad94 commit c251353

File tree

22 files changed

+122
-109
lines changed

22 files changed

+122
-109
lines changed

crates/hir-ty/src/autoderef.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ const AUTODEREF_RECURSION_LIMIT: usize = 20;
3232
/// - the yielded types don't contain inference variables (but may contain `TyKind::Error`).
3333
/// - a type won't be yielded more than once; in other words, the returned iterator will stop if it
3434
/// detects a cycle in the deref chain.
35-
pub fn autoderef(
36-
db: &dyn HirDatabase,
37-
env: Arc<TraitEnvironment>,
35+
pub fn autoderef<'db>(
36+
db: &'db dyn HirDatabase,
37+
env: Arc<TraitEnvironment<'db>>,
3838
ty: crate::Canonical<crate::Ty>,
39-
) -> impl Iterator<Item = crate::Ty> {
39+
) -> impl Iterator<Item = crate::Ty> + use<> {
4040
let mut table = InferenceTable::new(db, env);
4141
let interner = table.interner;
4242
let ty = table.instantiate_canonical(ty);

crates/hir-ty/src/consteval.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ pub(crate) fn const_eval_cycle_result(
229229
_: &dyn HirDatabase,
230230
_: GeneralConstId,
231231
_: Substitution,
232-
_: Option<Arc<TraitEnvironment>>,
232+
_: Option<Arc<TraitEnvironment<'_>>>,
233233
) -> Result<Const, ConstEvalError> {
234234
Err(ConstEvalError::MirLowerError(MirLowerError::Loop))
235235
}
@@ -252,7 +252,7 @@ pub(crate) fn const_eval_query(
252252
db: &dyn HirDatabase,
253253
def: GeneralConstId,
254254
subst: Substitution,
255-
trait_env: Option<Arc<TraitEnvironment>>,
255+
trait_env: Option<Arc<TraitEnvironment<'_>>>,
256256
) -> Result<Const, ConstEvalError> {
257257
let body = match def {
258258
GeneralConstId::ConstId(c) => {

crates/hir-ty/src/db.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
4949
&self,
5050
def: DefWithBodyId,
5151
subst: Substitution,
52-
env: Arc<TraitEnvironment>,
52+
env: Arc<TraitEnvironment<'_>>,
5353
) -> Result<Arc<MirBody>, MirLowerError>;
5454

5555
#[salsa::invoke(crate::mir::monomorphized_mir_body_for_closure_query)]
5656
fn monomorphized_mir_body_for_closure(
5757
&self,
5858
def: InternedClosureId,
5959
subst: Substitution,
60-
env: Arc<TraitEnvironment>,
60+
env: Arc<TraitEnvironment<'_>>,
6161
) -> Result<Arc<MirBody>, MirLowerError>;
6262

6363
#[salsa::invoke(crate::mir::borrowck_query)]
@@ -70,7 +70,7 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
7070
&self,
7171
def: GeneralConstId,
7272
subst: Substitution,
73-
trait_env: Option<Arc<TraitEnvironment>>,
73+
trait_env: Option<Arc<TraitEnvironment<'_>>>,
7474
) -> Result<Const, ConstEvalError>;
7575

7676
#[salsa::invoke(crate::consteval::const_eval_static_query)]
@@ -84,7 +84,7 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
8484
#[salsa::invoke(crate::method_resolution::lookup_impl_method_query)]
8585
fn lookup_impl_method(
8686
&self,
87-
env: Arc<TraitEnvironment>,
87+
env: Arc<TraitEnvironment<'_>>,
8888
func: FunctionId,
8989
fn_subst: Substitution,
9090
) -> (FunctionId, Substitution);
@@ -97,15 +97,15 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
9797
&'db self,
9898
def: AdtId,
9999
args: crate::next_solver::GenericArgs<'db>,
100-
trait_env: Arc<TraitEnvironment>,
100+
trait_env: Arc<TraitEnvironment<'db>>,
101101
) -> Result<Arc<Layout>, LayoutError>;
102102

103103
#[salsa::invoke(crate::layout::layout_of_ty_query)]
104104
#[salsa::cycle(cycle_result = crate::layout::layout_of_ty_cycle_result)]
105105
fn layout_of_ty<'db>(
106106
&'db self,
107107
ty: crate::next_solver::Ty<'db>,
108-
env: Arc<TraitEnvironment>,
108+
env: Arc<TraitEnvironment<'db>>,
109109
) -> Result<Arc<Layout>, LayoutError>;
110110

111111
#[salsa::invoke(crate::layout::target_data_layout_query)]
@@ -184,10 +184,11 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
184184

185185
#[salsa::invoke(crate::lower::trait_environment_for_body_query)]
186186
#[salsa::transparent]
187-
fn trait_environment_for_body(&self, def: DefWithBodyId) -> Arc<TraitEnvironment>;
187+
fn trait_environment_for_body<'db>(&'db self, def: DefWithBodyId)
188+
-> Arc<TraitEnvironment<'db>>;
188189

189190
#[salsa::invoke(crate::lower::trait_environment_query)]
190-
fn trait_environment(&self, def: GenericDefId) -> Arc<TraitEnvironment>;
191+
fn trait_environment<'db>(&'db self, def: GenericDefId) -> Arc<TraitEnvironment<'db>>;
191192

192193
#[salsa::invoke(crate::lower::generic_defaults_with_diagnostics_query)]
193194
#[salsa::cycle(cycle_result = crate::lower::generic_defaults_with_diagnostics_cycle_result)]
@@ -258,7 +259,7 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
258259
fn normalize_projection(
259260
&self,
260261
projection: crate::ProjectionTy,
261-
env: Arc<TraitEnvironment>,
262+
env: Arc<TraitEnvironment<'_>>,
262263
) -> Ty;
263264

264265
#[salsa::invoke(crate::traits::trait_solve_query)]
@@ -272,7 +273,7 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
272273

273274
#[salsa::invoke(crate::drop::has_drop_glue)]
274275
#[salsa::cycle(cycle_result = crate::drop::has_drop_glue_cycle_result)]
275-
fn has_drop_glue(&self, ty: Ty, env: Arc<TraitEnvironment>) -> DropGlue;
276+
fn has_drop_glue(&self, ty: Ty, env: Arc<TraitEnvironment<'_>>) -> DropGlue;
276277

277278
// next trait solver
278279

crates/hir-ty/src/diagnostics/expr.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,17 @@ impl BodyValidationDiagnostic {
8181
}
8282
}
8383

84-
struct ExprValidator {
84+
struct ExprValidator<'db> {
8585
owner: DefWithBodyId,
8686
body: Arc<Body>,
8787
infer: Arc<InferenceResult>,
88-
env: Arc<TraitEnvironment>,
88+
env: Arc<TraitEnvironment<'db>>,
8989
diagnostics: Vec<BodyValidationDiagnostic>,
9090
validate_lints: bool,
9191
}
9292

93-
impl ExprValidator {
94-
fn validate_body(&mut self, db: &dyn HirDatabase) {
93+
impl<'db> ExprValidator<'db> {
94+
fn validate_body(&mut self, db: &'db dyn HirDatabase) {
9595
let mut filter_map_next_checker = None;
9696
// we'll pass &mut self while iterating over body.exprs, so they need to be disjoint
9797
let body = Arc::clone(&self.body);

crates/hir-ty/src/diagnostics/match_check/pat_analysis.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,15 @@ pub(crate) struct MatchCheckCtx<'db> {
7070
body: DefWithBodyId,
7171
pub(crate) db: &'db dyn HirDatabase,
7272
exhaustive_patterns: bool,
73-
env: Arc<TraitEnvironment>,
73+
env: Arc<TraitEnvironment<'db>>,
7474
}
7575

7676
impl<'db> MatchCheckCtx<'db> {
7777
pub(crate) fn new(
7878
module: ModuleId,
7979
body: DefWithBodyId,
8080
db: &'db dyn HirDatabase,
81-
env: Arc<TraitEnvironment>,
81+
env: Arc<TraitEnvironment<'db>>,
8282
) -> Self {
8383
let def_map = module.crate_def_map(db);
8484
let exhaustive_patterns = def_map.is_unstable_feature_enabled(&sym::exhaustive_patterns);

crates/hir-ty/src/display.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -799,12 +799,12 @@ fn render_const_scalar_ns(
799799
render_const_scalar_inner(f, b, memory_map, ty, trait_env)
800800
}
801801

802-
fn render_const_scalar_inner(
802+
fn render_const_scalar_inner<'db>(
803803
f: &mut HirFormatter<'_>,
804804
b: &[u8],
805805
memory_map: &MemoryMap<'_>,
806-
ty: crate::next_solver::Ty<'_>,
807-
trait_env: Arc<TraitEnvironment>,
806+
ty: crate::next_solver::Ty<'db>,
807+
trait_env: Arc<TraitEnvironment<'db>>,
808808
) -> Result<(), HirDisplayError> {
809809
use rustc_type_ir::TyKind;
810810
match ty.kind() {
@@ -1068,11 +1068,11 @@ fn render_const_scalar_inner(
10681068
}
10691069
}
10701070

1071-
fn render_variant_after_name(
1071+
fn render_variant_after_name<'db>(
10721072
data: &VariantFields,
10731073
f: &mut HirFormatter<'_>,
10741074
field_types: &ArenaMap<LocalFieldId, Binders<Ty>>,
1075-
trait_env: Arc<TraitEnvironment>,
1075+
trait_env: Arc<TraitEnvironment<'db>>,
10761076
layout: &Layout,
10771077
args: GenericArgs<'_>,
10781078
b: &[u8],

crates/hir-ty/src/drop.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ pub enum DropGlue {
4343
HasDropGlue,
4444
}
4545

46-
pub(crate) fn has_drop_glue(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironment>) -> DropGlue {
46+
pub(crate) fn has_drop_glue(
47+
db: &dyn HirDatabase,
48+
ty: Ty,
49+
env: Arc<TraitEnvironment<'_>>,
50+
) -> DropGlue {
4751
match ty.kind(Interner) {
4852
TyKind::Adt(adt, subst) => {
4953
if has_destructor(db, adt.0) {
@@ -165,7 +169,7 @@ pub(crate) fn has_drop_glue(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironm
165169

166170
fn projection_has_drop_glue(
167171
db: &dyn HirDatabase,
168-
env: Arc<TraitEnvironment>,
172+
env: Arc<TraitEnvironment<'_>>,
169173
projection: ProjectionTy,
170174
ty: Ty,
171175
) -> DropGlue {
@@ -178,7 +182,7 @@ fn projection_has_drop_glue(
178182
}
179183
}
180184

181-
fn is_copy(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironment>) -> bool {
185+
fn is_copy(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironment<'_>>) -> bool {
182186
let Some(copy_trait) = LangItem::Copy.resolve_trait(db, env.krate) else {
183187
return false;
184188
};
@@ -193,7 +197,7 @@ fn is_copy(db: &dyn HirDatabase, ty: Ty, env: Arc<TraitEnvironment>) -> bool {
193197
pub(crate) fn has_drop_glue_cycle_result(
194198
_db: &dyn HirDatabase,
195199
_ty: Ty,
196-
_env: Arc<TraitEnvironment>,
200+
_env: Arc<TraitEnvironment<'_>>,
197201
) -> DropGlue {
198202
DropGlue::None
199203
}

crates/hir-ty/src/infer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ pub(crate) fn infer_cycle_result(_: &dyn HirDatabase, _: DefWithBodyId) -> Arc<I
152152
/// This is appropriate to use only after type-check: it assumes
153153
/// that normalization will succeed, for example.
154154
#[tracing::instrument(level = "debug", skip(db))]
155-
pub(crate) fn normalize(db: &dyn HirDatabase, trait_env: Arc<TraitEnvironment>, ty: Ty) -> Ty {
155+
pub(crate) fn normalize(db: &dyn HirDatabase, trait_env: Arc<TraitEnvironment<'_>>, ty: Ty) -> Ty {
156156
// FIXME: TypeFlags::HAS_CT_PROJECTION is not implemented in chalk, so TypeFlags::HAS_PROJECTION only
157157
// works for the type case, so we check array unconditionally. Remove the array part
158158
// when the bug in chalk becomes fixed.

crates/hir-ty/src/infer/coerce.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1564,17 +1564,17 @@ impl<'db, 'exprs> CoerceMany<'db, 'exprs> {
15641564
}
15651565
}
15661566

1567-
pub fn could_coerce(
1568-
db: &dyn HirDatabase,
1569-
env: Arc<TraitEnvironment>,
1567+
pub fn could_coerce<'db>(
1568+
db: &'db dyn HirDatabase,
1569+
env: Arc<TraitEnvironment<'db>>,
15701570
tys: &crate::Canonical<(crate::Ty, crate::Ty)>,
15711571
) -> bool {
15721572
coerce(db, env, tys).is_ok()
15731573
}
15741574

15751575
fn coerce<'db>(
15761576
db: &'db dyn HirDatabase,
1577-
env: Arc<TraitEnvironment>,
1577+
env: Arc<TraitEnvironment<'db>>,
15781578
tys: &crate::Canonical<(crate::Ty, crate::Ty)>,
15791579
) -> Result<(Vec<Adjustment>, crate::Ty), TypeError<DbInterner<'db>>> {
15801580
let mut table = InferenceTable::new(db, env);

crates/hir-ty/src/infer/unify.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl<'a, 'db> ProofTreeVisitor<'db> for NestedObligationsForSelfTy<'a, 'db> {
121121
/// unresolved goal `T = U`.
122122
pub fn could_unify(
123123
db: &dyn HirDatabase,
124-
env: Arc<TraitEnvironment>,
124+
env: Arc<TraitEnvironment<'_>>,
125125
tys: &Canonical<(Ty, Ty)>,
126126
) -> bool {
127127
unify(db, env, tys).is_some()
@@ -133,7 +133,7 @@ pub fn could_unify(
133133
/// them. For example `Option<T>` and `Option<U>` do not unify as we cannot show that `T = U`
134134
pub fn could_unify_deeply(
135135
db: &dyn HirDatabase,
136-
env: Arc<TraitEnvironment>,
136+
env: Arc<TraitEnvironment<'_>>,
137137
tys: &Canonical<(Ty, Ty)>,
138138
) -> bool {
139139
let mut table = InferenceTable::new(db, env);
@@ -151,7 +151,7 @@ pub fn could_unify_deeply(
151151

152152
pub(crate) fn unify(
153153
db: &dyn HirDatabase,
154-
env: Arc<TraitEnvironment>,
154+
env: Arc<TraitEnvironment<'_>>,
155155
tys: &Canonical<(Ty, Ty)>,
156156
) -> Option<Substitution> {
157157
let mut table = InferenceTable::new(db, env);
@@ -212,7 +212,7 @@ bitflags::bitflags! {
212212
pub(crate) struct InferenceTable<'db> {
213213
pub(crate) db: &'db dyn HirDatabase,
214214
pub(crate) interner: DbInterner<'db>,
215-
pub(crate) trait_env: Arc<TraitEnvironment>,
215+
pub(crate) trait_env: Arc<TraitEnvironment<'db>>,
216216
pub(crate) param_env: ParamEnv<'db>,
217217
pub(crate) tait_coercion_table: Option<FxHashMap<OpaqueTyId, Ty>>,
218218
pub(crate) infer_ctxt: InferCtxt<'db>,
@@ -227,7 +227,7 @@ pub(crate) struct InferenceTableSnapshot<'db> {
227227
}
228228

229229
impl<'db> InferenceTable<'db> {
230-
pub(crate) fn new(db: &'db dyn HirDatabase, trait_env: Arc<TraitEnvironment>) -> Self {
230+
pub(crate) fn new(db: &'db dyn HirDatabase, trait_env: Arc<TraitEnvironment<'db>>) -> Self {
231231
let interner = DbInterner::new_with(db, Some(trait_env.krate), trait_env.block);
232232
let infer_ctxt = interner.infer_ctxt().build(rustc_type_ir::TypingMode::Analysis {
233233
defining_opaque_types_and_generators: SolverDefIds::new_from_iter(interner, []),

0 commit comments

Comments
 (0)