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.rs | 15 |
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>, |