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.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/crates/hir-ty/src/next_solver/generic_arg.rs b/crates/hir-ty/src/next_solver/generic_arg.rs
index 79527dac2f..38293c4542 100644
--- a/crates/hir-ty/src/next_solver/generic_arg.rs
+++ b/crates/hir-ty/src/next_solver/generic_arg.rs
@@ -69,6 +69,14 @@ impl<'db> GenericArg<'db> {
_ => None,
}
}
+
+ pub fn error_from_id(interner: DbInterner<'db>, id: GenericParamId) -> GenericArg<'db> {
+ match id {
+ GenericParamId::TypeParamId(_) => Ty::new_error(interner, ErrorGuaranteed).into(),
+ GenericParamId::ConstParamId(_) => Const::error(interner).into(),
+ GenericParamId::LifetimeParamId(_) => Region::error(interner).into(),
+ }
+ }
}
impl<'db> From<Term<'db>> for GenericArg<'db> {
@@ -192,6 +200,13 @@ impl<'db> GenericArgs<'db> {
interner.mk_args(&args)
}
+ /// Creates an all-error `GenericArgs`.
+ pub fn error_for_item(interner: DbInterner<'db>, def_id: SolverDefId) -> GenericArgs<'db> {
+ GenericArgs::for_item(interner, def_id, |_, _, id, _| {
+ GenericArg::error_from_id(interner, id)
+ })
+ }
+
/// Like `for_item`, but prefers the default of a parameter if it has any.
pub fn for_item_with_defaults<F>(
interner: DbInterner<'db>,