Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/generic_arg.rs')
-rw-r--r--crates/hir-ty/src/next_solver/generic_arg.rs42
1 files changed, 35 insertions, 7 deletions
diff --git a/crates/hir-ty/src/next_solver/generic_arg.rs b/crates/hir-ty/src/next_solver/generic_arg.rs
index 85a79923a7..834f4e3765 100644
--- a/crates/hir-ty/src/next_solver/generic_arg.rs
+++ b/crates/hir-ty/src/next_solver/generic_arg.rs
@@ -35,6 +35,29 @@ impl<'db> std::fmt::Debug for GenericArg<'db> {
}
}
+impl<'db> GenericArg<'db> {
+ pub fn ty(self) -> Option<Ty<'db>> {
+ match self.kind() {
+ GenericArgKind::Type(ty) => Some(ty),
+ _ => None,
+ }
+ }
+
+ pub fn expect_ty(self) -> Ty<'db> {
+ match self.kind() {
+ GenericArgKind::Type(ty) => ty,
+ _ => panic!("Expected ty, got {:?}", self),
+ }
+ }
+
+ pub fn region(self) -> Option<Region<'db>> {
+ match self.kind() {
+ GenericArgKind::Lifetime(r) => Some(r),
+ _ => None,
+ }
+ }
+}
+
impl<'db> From<Term<'db>> for GenericArg<'db> {
fn from(value: Term<'db>) -> Self {
match value {
@@ -263,7 +286,9 @@ impl<'db> rustc_type_ir::inherent::GenericArgs<DbInterner<'db>> for GenericArgs<
interner: DbInterner<'db>,
def_id: <DbInterner<'db> as rustc_type_ir::Interner>::DefId,
) -> <DbInterner<'db> as rustc_type_ir::Interner>::GenericArgs {
- Self::for_item(interner, def_id, |name, index, kind, _| mk_param(index, name, kind))
+ Self::for_item(interner, def_id, |name, index, kind, _| {
+ mk_param(interner, index, name, kind)
+ })
}
fn extend_with_error(
@@ -383,16 +408,19 @@ impl<'db> rustc_type_ir::inherent::GenericArgs<DbInterner<'db>> for GenericArgs<
}
}
-pub fn mk_param<'db>(index: u32, name: &Symbol, kind: GenericParamDefKind) -> GenericArg<'db> {
+pub fn mk_param<'db>(
+ interner: DbInterner<'db>,
+ index: u32,
+ name: &Symbol,
+ kind: GenericParamDefKind,
+) -> GenericArg<'db> {
let name = name.clone();
match kind {
GenericParamDefKind::Lifetime => {
- Region::new_early_param(DbInterner::conjure(), EarlyParamRegion { index }).into()
- }
- GenericParamDefKind::Type => Ty::new_param(DbInterner::conjure(), index, name).into(),
- GenericParamDefKind::Const => {
- Const::new_param(DbInterner::conjure(), ParamConst { index }).into()
+ Region::new_early_param(interner, EarlyParamRegion { index }).into()
}
+ GenericParamDefKind::Type => Ty::new_param(interner, index, name).into(),
+ GenericParamDefKind::Const => Const::new_param(interner, ParamConst { index }).into(),
}
}