Skip to content

Commit f92ca61

Browse files
committed
Replace layout_of_ty with layout_of_ty_ns
1 parent 00856fc commit f92ca61

File tree

12 files changed

+75
-73
lines changed

12 files changed

+75
-73
lines changed

src/tools/rust-analyzer/crates/hir-ty/src/consteval.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,14 @@ use triomphe::Arc;
1515

1616
use crate::{
1717
Const, ConstData, ConstScalar, ConstValue, GenericArg, Interner, MemoryMap, Substitution,
18-
TraitEnvironment, Ty, TyBuilder, db::HirDatabase, display::DisplayTarget, generics::Generics,
19-
infer::InferenceContext, lower::ParamLoweringMode, to_placeholder_idx,
18+
TraitEnvironment, Ty, TyBuilder,
19+
db::HirDatabase,
20+
display::DisplayTarget,
21+
generics::Generics,
22+
infer::InferenceContext,
23+
lower::ParamLoweringMode,
24+
next_solver::{DbInterner, mapping::ChalkToNextSolver},
25+
to_placeholder_idx,
2026
};
2127

2228
use super::mir::{MirEvalError, MirLowerError, interpret_mir, lower_to_mir, pad16};
@@ -157,7 +163,8 @@ pub fn intern_const_ref(
157163
ty: Ty,
158164
krate: Crate,
159165
) -> Const {
160-
let layout = || db.layout_of_ty(ty.clone(), TraitEnvironment::empty(krate));
166+
let interner = DbInterner::new_with(db, Some(krate), None);
167+
let layout = || db.layout_of_ty(ty.to_nextsolver(interner), TraitEnvironment::empty(krate));
161168
let bytes = match value {
162169
LiteralConstRef::Int(i) => {
163170
// FIXME: We should handle failure of layout better.

src/tools/rust-analyzer/crates/hir-ty/src/consteval_nextsolver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub fn intern_const_ref<'a>(
9292
krate: Crate,
9393
) -> Const<'a> {
9494
let interner = DbInterner::new_with(db, Some(krate), None);
95-
let layout = db.layout_of_ty_ns(ty, TraitEnvironment::empty(krate));
95+
let layout = db.layout_of_ty(ty, TraitEnvironment::empty(krate));
9696
let kind = match value {
9797
LiteralConstRef::Int(i) => {
9898
// FIXME: We should handle failure of layout better.

src/tools/rust-analyzer/crates/hir-ty/src/db.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
103103

104104
#[salsa::invoke(crate::layout::layout_of_ty_query)]
105105
#[salsa::cycle(cycle_result = crate::layout::layout_of_ty_cycle_result)]
106-
fn layout_of_ty(&self, ty: Ty, env: Arc<TraitEnvironment>) -> Result<Arc<Layout>, LayoutError>;
106+
fn layout_of_ty<'db>(
107+
&'db self,
108+
ty: crate::next_solver::Ty<'db>,
109+
env: Arc<TraitEnvironment>,
110+
) -> Result<Arc<Layout>, LayoutError>;
107111

108112
#[salsa::invoke(crate::layout::target_data_layout_query)]
109113
fn target_data_layout(&self, krate: Crate) -> Result<Arc<TargetDataLayout>, Arc<str>>;
@@ -300,14 +304,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
300304

301305
// next trait solver
302306

303-
#[salsa::invoke(crate::layout::layout_of_ty_ns_query)]
304-
#[salsa::cycle(cycle_result = crate::layout::layout_of_ty_ns_cycle_result)]
305-
fn layout_of_ty_ns<'db>(
306-
&'db self,
307-
ty: crate::next_solver::Ty<'db>,
308-
env: Arc<TraitEnvironment>,
309-
) -> Result<Arc<Layout>, LayoutError>;
310-
311307
#[salsa::invoke(crate::lower_nextsolver::ty_query)]
312308
#[salsa::transparent]
313309
fn ty_ns<'db>(

src/tools/rust-analyzer/crates/hir-ty/src/display.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ fn render_const_scalar_inner(
840840
TyKind::Slice(ty) => {
841841
let addr = usize::from_le_bytes(b[0..b.len() / 2].try_into().unwrap());
842842
let count = usize::from_le_bytes(b[b.len() / 2..].try_into().unwrap());
843-
let Ok(layout) = f.db.layout_of_ty_ns(ty, trait_env) else {
843+
let Ok(layout) = f.db.layout_of_ty(ty, trait_env) else {
844844
return f.write_str("<layout-error>");
845845
};
846846
let size_one = layout.size.bytes_usize();
@@ -874,7 +874,7 @@ fn render_const_scalar_inner(
874874
let Ok(t) = memory_map.vtable_ty(ty_id) else {
875875
return f.write_str("<ty-missing-in-vtable-map>");
876876
};
877-
let Ok(layout) = f.db.layout_of_ty_ns(t, trait_env) else {
877+
let Ok(layout) = f.db.layout_of_ty(t, trait_env) else {
878878
return f.write_str("<layout-error>");
879879
};
880880
let size = layout.size.bytes_usize();
@@ -905,7 +905,7 @@ fn render_const_scalar_inner(
905905
return f.write_str("<layout-error>");
906906
}
907907
});
908-
let Ok(layout) = f.db.layout_of_ty_ns(t, trait_env) else {
908+
let Ok(layout) = f.db.layout_of_ty(t, trait_env) else {
909909
return f.write_str("<layout-error>");
910910
};
911911
let size = layout.size.bytes_usize();
@@ -917,7 +917,7 @@ fn render_const_scalar_inner(
917917
}
918918
},
919919
TyKind::Tuple(tys) => {
920-
let Ok(layout) = f.db.layout_of_ty_ns(ty, trait_env.clone()) else {
920+
let Ok(layout) = f.db.layout_of_ty(ty, trait_env.clone()) else {
921921
return f.write_str("<layout-error>");
922922
};
923923
f.write_str("(")?;
@@ -929,7 +929,7 @@ fn render_const_scalar_inner(
929929
f.write_str(", ")?;
930930
}
931931
let offset = layout.fields.offset(id).bytes_usize();
932-
let Ok(layout) = f.db.layout_of_ty_ns(ty, trait_env.clone()) else {
932+
let Ok(layout) = f.db.layout_of_ty(ty, trait_env.clone()) else {
933933
f.write_str("<layout-error>")?;
934934
continue;
935935
};
@@ -1006,7 +1006,7 @@ fn render_const_scalar_inner(
10061006
let Some(len) = consteval_nextsolver::try_const_usize(f.db, len) else {
10071007
return f.write_str("<unknown-array-len>");
10081008
};
1009-
let Ok(layout) = f.db.layout_of_ty_ns(ty, trait_env) else {
1009+
let Ok(layout) = f.db.layout_of_ty(ty, trait_env) else {
10101010
return f.write_str("<layout-error>");
10111011
};
10121012
let size_one = layout.size.bytes_usize();
@@ -1061,7 +1061,8 @@ fn render_variant_after_name(
10611061
let ty = field_types[id]
10621062
.clone()
10631063
.substitute(Interner, &convert_args_for_result(interner, args.as_slice()));
1064-
let Ok(layout) = f.db.layout_of_ty(ty.clone(), trait_env.clone()) else {
1064+
let Ok(layout) = f.db.layout_of_ty(ty.to_nextsolver(interner), trait_env.clone())
1065+
else {
10651066
return f.write_str("<layout-error>");
10661067
};
10671068
let size = layout.size.bytes_usize();

src/tools/rust-analyzer/crates/hir-ty/src/layout.rs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -151,23 +151,13 @@ fn layout_of_simd_ty<'db>(
151151
};
152152

153153
let e_len = try_const_usize(db, e_len).ok_or(LayoutError::HasErrorConst)? as u64;
154-
let e_ly = db.layout_of_ty_ns(e_ty, env)?;
154+
let e_ly = db.layout_of_ty(e_ty, env)?;
155155

156156
let cx = LayoutCx::new(dl);
157157
Ok(Arc::new(cx.calc.simd_type(e_ly, e_len, repr_packed)?))
158158
}
159159

160-
pub fn layout_of_ty_query(
161-
db: &dyn HirDatabase,
162-
ty: crate::Ty,
163-
trait_env: Arc<TraitEnvironment>,
164-
) -> Result<Arc<Layout>, LayoutError> {
165-
let krate = trait_env.krate;
166-
let interner = DbInterner::new_with(db, Some(krate), trait_env.block);
167-
db.layout_of_ty_ns(ty.to_nextsolver(interner), trait_env)
168-
}
169-
170-
pub fn layout_of_ty_ns_query<'db>(
160+
pub fn layout_of_ty_query<'db>(
171161
db: &'db dyn HirDatabase,
172162
ty: Ty<'db>,
173163
trait_env: Arc<TraitEnvironment>,
@@ -262,19 +252,19 @@ pub fn layout_of_ty_ns_query<'db>(
262252

263253
let fields = tys
264254
.iter()
265-
.map(|k| db.layout_of_ty_ns(k, trait_env.clone()))
255+
.map(|k| db.layout_of_ty(k, trait_env.clone()))
266256
.collect::<Result<Vec<_>, _>>()?;
267257
let fields = fields.iter().map(|it| &**it).collect::<Vec<_>>();
268258
let fields = fields.iter().collect::<IndexVec<_, _>>();
269259
cx.calc.univariant(&fields, &ReprOptions::default(), kind)?
270260
}
271261
TyKind::Array(element, count) => {
272262
let count = try_const_usize(db, count).ok_or(LayoutError::HasErrorConst)? as u64;
273-
let element = db.layout_of_ty_ns(element, trait_env)?;
263+
let element = db.layout_of_ty(element, trait_env)?;
274264
cx.calc.array_like::<_, _, ()>(&element, Some(count))?
275265
}
276266
TyKind::Slice(element) => {
277-
let element = db.layout_of_ty_ns(element, trait_env)?;
267+
let element = db.layout_of_ty(element, trait_env)?;
278268
cx.calc.array_like::<_, _, ()>(&element, None)?
279269
}
280270
TyKind::Str => {
@@ -346,7 +336,7 @@ pub fn layout_of_ty_ns_query<'db>(
346336
let ty =
347337
convert_binder_to_early_binder(interner, it.ty.to_nextsolver(interner))
348338
.instantiate(interner, args);
349-
db.layout_of_ty_ns(ty, trait_env.clone())
339+
db.layout_of_ty(ty, trait_env.clone())
350340
})
351341
.collect::<Result<Vec<_>, _>>()?;
352342
let fields = fields.iter().map(|it| &**it).collect::<Vec<_>>();
@@ -376,15 +366,7 @@ pub fn layout_of_ty_ns_query<'db>(
376366
Ok(Arc::new(result))
377367
}
378368

379-
pub(crate) fn layout_of_ty_cycle_result(
380-
_: &dyn HirDatabase,
381-
_: crate::Ty,
382-
_: Arc<TraitEnvironment>,
383-
) -> Result<Arc<Layout>, LayoutError> {
384-
Err(LayoutError::RecursiveTypeWithoutIndirection)
385-
}
386-
387-
pub(crate) fn layout_of_ty_ns_cycle_result<'db>(
369+
pub(crate) fn layout_of_ty_cycle_result<'db>(
388370
_: &dyn HirDatabase,
389371
_: Ty<'db>,
390372
_: Arc<TraitEnvironment>,

src/tools/rust-analyzer/crates/hir-ty/src/layout/adt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub fn layout_of_adt_query<'db>(
3434
let handle_variant = |def: VariantId, var: &VariantFields| {
3535
var.fields()
3636
.iter()
37-
.map(|(fd, _)| db.layout_of_ty_ns(field_ty(db, def, fd, &args), trait_env.clone()))
37+
.map(|(fd, _)| db.layout_of_ty(field_ty(db, def, fd, &args), trait_env.clone()))
3838
.collect::<Result<Vec<_>, _>>()
3939
};
4040
let (variants, repr, is_special_no_niche) = match def {

src/tools/rust-analyzer/crates/hir-ty/src/layout/tests.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use crate::{
1111
Interner, Substitution,
1212
db::HirDatabase,
1313
layout::{Layout, LayoutError},
14+
next_solver::{DbInterner, mapping::ChalkToNextSolver},
1415
setup_tracing,
1516
test_db::TestDB,
1617
};
@@ -85,13 +86,16 @@ fn eval_goal(
8586
db.ty(ty_id.into()).substitute(Interner, &Substitution::empty(Interner))
8687
}
8788
};
88-
db.layout_of_ty(
89-
goal_ty,
90-
db.trait_environment(match adt_or_type_alias_id {
91-
Either::Left(adt) => hir_def::GenericDefId::AdtId(adt),
92-
Either::Right(ty) => hir_def::GenericDefId::TypeAliasId(ty),
93-
}),
94-
)
89+
salsa::attach(&db, || {
90+
let interner = DbInterner::new_with(&db, None, None);
91+
db.layout_of_ty(
92+
goal_ty.to_nextsolver(interner),
93+
db.trait_environment(match adt_or_type_alias_id {
94+
Either::Left(adt) => hir_def::GenericDefId::AdtId(adt),
95+
Either::Right(ty) => hir_def::GenericDefId::TypeAliasId(ty),
96+
}),
97+
)
98+
})
9599
}
96100

97101
/// A version of `eval_goal` for types that can not be expressed in ADTs, like closures and `impl Trait`
@@ -128,7 +132,10 @@ fn eval_expr(
128132
.0;
129133
let infer = db.infer(function_id.into());
130134
let goal_ty = infer.type_of_binding[b].clone();
131-
db.layout_of_ty(goal_ty, db.trait_environment(function_id.into()))
135+
salsa::attach(&db, || {
136+
let interner = DbInterner::new_with(&db, None, None);
137+
db.layout_of_ty(goal_ty.to_nextsolver(interner), db.trait_environment(function_id.into()))
138+
})
132139
}
133140

134141
#[track_caller]

src/tools/rust-analyzer/crates/hir-ty/src/mir/eval.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ impl<'db> Evaluator<'db> {
854854
let interner = DbInterner::new_with(self.db, None, None);
855855
let r = self
856856
.db
857-
.layout_of_ty_ns(ty, self.trait_env.clone())
857+
.layout_of_ty(ty, self.trait_env.clone())
858858
.map_err(|e| MirEvalError::LayoutError(e, convert_ty_for_result(interner, ty)))?;
859859
self.layout_cache.borrow_mut().insert(ty, r.clone());
860860
Ok(r)

src/tools/rust-analyzer/crates/hir-ty/src/mir/lower.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ use crate::{
4343
Terminator, TerminatorKind, TupleFieldId, Ty, UnOp, VariantId, intern_const_scalar,
4444
return_slot,
4545
},
46+
next_solver::{DbInterner, mapping::ChalkToNextSolver},
4647
static_lifetime,
4748
traits::FnTrait,
4849
utils::ClosureSubst,
@@ -1411,8 +1412,12 @@ impl<'ctx> MirLowerCtx<'ctx> {
14111412
}
14121413

14131414
fn lower_literal_to_operand(&mut self, ty: Ty, l: &Literal) -> Result<Operand> {
1414-
let size =
1415-
|| self.db.layout_of_ty(ty.clone(), self.env.clone()).map(|it| it.size.bytes_usize());
1415+
let interner = DbInterner::new_with(self.db, None, None);
1416+
let size = || {
1417+
self.db
1418+
.layout_of_ty(ty.to_nextsolver(interner), self.env.clone())
1419+
.map(|it| it.size.bytes_usize())
1420+
};
14161421
const USIZE_SIZE: usize = size_of::<usize>();
14171422
let bytes: Box<[_]> = match l {
14181423
hir_def::hir::Literal::String(b) => {

src/tools/rust-analyzer/crates/hir/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,8 +1389,9 @@ impl Field {
13891389
}
13901390

13911391
pub fn layout(&self, db: &dyn HirDatabase) -> Result<Layout, LayoutError> {
1392+
let interner = DbInterner::new_with(db, None, None);
13921393
db.layout_of_ty(
1393-
self.ty(db).ty,
1394+
self.ty(db).ty.to_nextsolver(interner),
13941395
db.trait_environment(match hir_def::VariantId::from(self.parent) {
13951396
hir_def::VariantId::EnumVariantId(id) => {
13961397
GenericDefId::AdtId(id.lookup(db).parent.into())
@@ -5906,7 +5907,8 @@ impl<'db> Type<'db> {
59065907
}
59075908

59085909
pub fn layout(&self, db: &'db dyn HirDatabase) -> Result<Layout, LayoutError> {
5909-
db.layout_of_ty(self.ty.clone(), self.env.clone())
5910+
let interner = DbInterner::new_with(db, None, None);
5911+
db.layout_of_ty(self.ty.to_nextsolver(interner), self.env.clone())
59105912
.map(|layout| Layout(layout, db.target_data_layout(self.env.krate).unwrap()))
59115913
}
59125914

0 commit comments

Comments
 (0)