Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver.rs')
-rw-r--r--crates/hir-ty/src/next_solver.rs30
1 files changed, 25 insertions, 5 deletions
diff --git a/crates/hir-ty/src/next_solver.rs b/crates/hir-ty/src/next_solver.rs
index 605e31404c..161a3142df 100644
--- a/crates/hir-ty/src/next_solver.rs
+++ b/crates/hir-ty/src/next_solver.rs
@@ -5,6 +5,7 @@
// incorrect lifetime here.
pub mod abi;
+mod allocation;
mod binder;
mod consts;
mod def_id;
@@ -29,6 +30,7 @@ pub mod util;
use std::{mem::ManuallyDrop, sync::OnceLock};
+pub use allocation::*;
pub use binder::*;
pub use consts::*;
pub use def_id::*;
@@ -89,6 +91,7 @@ pub struct DefaultTypes<'db> {
pub struct DefaultConsts<'db> {
pub error: Const<'db>,
+ pub u8_values: [Const<'db>; 256],
}
pub struct DefaultRegions<'db> {
@@ -101,7 +104,7 @@ pub struct DefaultEmpty<'db> {
pub tys: Tys<'db>,
pub generic_args: GenericArgs<'db>,
pub bound_var_kinds: BoundVarKinds<'db>,
- pub canonical_vars: CanonicalVars<'db>,
+ pub canonical_vars: CanonicalVarKinds<'db>,
pub variances: VariancesOf<'db>,
pub pat_list: PatList<'db>,
pub predefined_opaques: PredefinedOpaques<'db>,
@@ -109,6 +112,7 @@ pub struct DefaultEmpty<'db> {
pub bound_existential_predicates: BoundExistentialPredicates<'db>,
pub clauses: Clauses<'db>,
pub region_assumptions: RegionAssumptions<'db>,
+ pub consts: Consts<'db>,
}
pub struct DefaultAny<'db> {
@@ -167,7 +171,7 @@ pub fn default_types<'a, 'db>(db: &'db dyn HirDatabase) -> &'a DefaultAny<'db> {
ty.as_ref()
};
let create_canonical_vars = |slice| {
- let ty = CanonicalVars::new_from_slice(slice);
+ let ty = CanonicalVarKinds::new_from_slice(slice);
// We need to increase the refcount (forever), so that the types won't be freed.
let ty = ManuallyDrop::new(ty.store());
ty.as_ref()
@@ -220,15 +224,22 @@ pub fn default_types<'a, 'db>(db: &'db dyn HirDatabase) -> &'a DefaultAny<'db> {
let ty = ManuallyDrop::new(ty.store());
ty.as_ref()
};
+ let create_consts = |slice| {
+ let ty = Consts::new_from_slice(slice);
+ // We need to increase the refcount (forever), so that the types won't be freed.
+ let ty = ManuallyDrop::new(ty.store());
+ ty.as_ref()
+ };
let str = create_ty(TyKind::Str);
let statik = create_region(RegionKind::ReStatic);
let empty_tys = create_tys(&[]);
let unit = create_ty(TyKind::Tuple(empty_tys));
+ let u8 = create_ty(TyKind::Uint(rustc_ast_ir::UintTy::U8));
DefaultAny {
types: DefaultTypes {
usize: create_ty(TyKind::Uint(rustc_ast_ir::UintTy::Usize)),
- u8: create_ty(TyKind::Uint(rustc_ast_ir::UintTy::U8)),
+ u8,
u16: create_ty(TyKind::Uint(rustc_ast_ir::UintTy::U16)),
u32: create_ty(TyKind::Uint(rustc_ast_ir::UintTy::U32)),
u64: create_ty(TyKind::Uint(rustc_ast_ir::UintTy::U64)),
@@ -252,7 +263,15 @@ pub fn default_types<'a, 'db>(db: &'db dyn HirDatabase) -> &'a DefaultAny<'db> {
static_str_ref: create_ty(TyKind::Ref(statik, str, rustc_ast_ir::Mutability::Not)),
mut_unit_ptr: create_ty(TyKind::RawPtr(unit, rustc_ast_ir::Mutability::Mut)),
},
- consts: DefaultConsts { error: create_const(ConstKind::Error(ErrorGuaranteed)) },
+ consts: DefaultConsts {
+ error: create_const(ConstKind::Error(ErrorGuaranteed)),
+ u8_values: std::array::from_fn(|u8_value| {
+ create_const(ConstKind::Value(ValueConst {
+ ty: u8,
+ value: ValTree::new(ValTreeKind::Leaf(ScalarInt::from(u8_value as u8))),
+ }))
+ }),
+ },
regions: DefaultRegions {
error: create_region(RegionKind::ReError(ErrorGuaranteed)),
statik,
@@ -270,11 +289,12 @@ pub fn default_types<'a, 'db>(db: &'db dyn HirDatabase) -> &'a DefaultAny<'db> {
bound_existential_predicates: create_bound_existential_predicates(&[]),
clauses: create_clauses(&[]),
region_assumptions: create_region_assumptions(&[]),
+ consts: create_consts(&[]),
},
one_invariant: create_variances_of(&[rustc_type_ir::Variance::Invariant]),
one_covariant: create_variances_of(&[rustc_type_ir::Variance::Covariant]),
coroutine_captures_by_ref_bound_var_kinds: create_bound_var_kinds(&[
- BoundVarKind::Region(BoundRegionKind::ClosureEnv),
+ BoundVariableKind::Region(BoundRegionKind::ClosureEnv),
]),
}
})