@@ -18,13 +18,13 @@ use chalk_ir::{
1818 cast:: Cast , fold:: Shift , fold:: TypeFoldable , interner:: HasInterner , Mutability , Safety ,
1919} ;
2020
21- use either:: Either ;
2221use hir_def:: {
2322 builtin_type:: BuiltinType ,
2423 data:: adt:: StructKind ,
2524 expander:: Expander ,
2625 generics:: {
27- TypeOrConstParamData , TypeParamProvenance , WherePredicate , WherePredicateTypeTarget ,
26+ GenericParamData , TypeOrConstParamData , TypeParamProvenance , WherePredicate ,
27+ WherePredicateTypeTarget ,
2828 } ,
2929 lang_item:: LangItem ,
3030 nameres:: MacroSubNs ,
@@ -354,13 +354,18 @@ impl<'a> TyLoweringContext<'a> {
354354 . filter ( |( _, data) | {
355355 matches ! (
356356 data,
357- TypeOrConstParamData :: TypeParamData ( data)
357+ GenericParamData :: TypeParamData ( data)
358358 if data. provenance == TypeParamProvenance :: ArgumentImplTrait
359359 )
360360 } )
361361 . nth ( idx as usize )
362362 . map_or ( TyKind :: Error , |( id, _) | {
363- TyKind :: Placeholder ( to_placeholder_idx ( self . db , id) )
363+ if let GenericParamId :: TypeParamId ( id) = id {
364+ TyKind :: Placeholder ( to_placeholder_idx ( self . db , id. into ( ) ) )
365+ } else {
366+ // we just filtered them out
367+ unreachable ! ( "Unexpected lifetime or const argument" ) ;
368+ }
364369 } ) ;
365370 param. intern ( Interner )
366371 } else {
@@ -837,7 +842,7 @@ impl<'a> TyLoweringContext<'a> {
837842
838843 let ty_error = TyKind :: Error . intern ( Interner ) . cast ( Interner ) ;
839844
840- let mut def_generic_iter = def_generics. iter_id_with_lt ( ) ;
845+ let mut def_generic_iter = def_generics. iter_id ( ) ;
841846
842847 let fill_self_params = || {
843848 for x in explicit_self_ty
@@ -1732,9 +1737,9 @@ pub(crate) fn generic_defaults_query(
17321737 let generic_params = generics ( db. upcast ( ) , def) ;
17331738 let parent_start_idx = generic_params. len_self ( ) ;
17341739
1735- let toc_iter = generic_params. iter ( ) . enumerate ( ) . map ( |( idx, ( id, p) ) | {
1740+ let defaults = Arc :: from_iter ( generic_params. iter ( ) . enumerate ( ) . map ( |( idx, ( id, p) ) | {
17361741 match p {
1737- TypeOrConstParamData :: TypeParamData ( p) => {
1742+ GenericParamData :: TypeParamData ( p) => {
17381743 let mut ty =
17391744 p. default . as_ref ( ) . map_or ( TyKind :: Error . intern ( Interner ) , |t| ctx. lower_ty ( t) ) ;
17401745 // Each default can only refer to previous parameters.
@@ -1743,13 +1748,13 @@ pub(crate) fn generic_defaults_query(
17431748 ty = fallback_bound_vars ( ty, idx, parent_start_idx) ;
17441749 crate :: make_binders ( db, & generic_params, ty. cast ( Interner ) )
17451750 }
1746- TypeOrConstParamData :: ConstParamData ( p) => {
1751+ GenericParamData :: ConstParamData ( p) => {
1752+ let GenericParamId :: ConstParamId ( id) = id else {
1753+ unreachable ! ( "Unexpected lifetime or type argument" )
1754+ } ;
1755+
17471756 let mut val = p. default . as_ref ( ) . map_or_else (
1748- || {
1749- unknown_const_as_generic (
1750- db. const_param_ty ( ConstParamId :: from_unchecked ( id) ) ,
1751- )
1752- } ,
1757+ || unknown_const_as_generic ( db. const_param_ty ( id. into ( ) ) ) ,
17531758 |c| {
17541759 let c = ctx. lower_const ( c, ctx. lower_ty ( & p. ty ) ) ;
17551760 c. cast ( Interner )
@@ -1759,15 +1764,12 @@ pub(crate) fn generic_defaults_query(
17591764 val = fallback_bound_vars ( val, idx, parent_start_idx) ;
17601765 make_binders ( db, & generic_params, val)
17611766 }
1767+ GenericParamData :: LifetimeParamData ( _) => {
1768+ // using static because it requires defaults
1769+ make_binders ( db, & generic_params, static_lifetime ( ) . cast ( Interner ) )
1770+ }
17621771 }
1763- } ) ;
1764-
1765- let lt_iter = generic_params
1766- . iter_lt ( )
1767- . enumerate ( )
1768- . map ( |_| make_binders ( db, & generic_params, static_lifetime ( ) . cast ( Interner ) ) ) ;
1769-
1770- let defaults = Arc :: from_iter ( toc_iter. chain ( lt_iter) ) ;
1772+ } ) ) ;
17711773
17721774 defaults
17731775}
@@ -1782,8 +1784,9 @@ pub(crate) fn generic_defaults_recover(
17821784 // we still need one default per parameter
17831785 let defaults = Arc :: from_iter ( generic_params. iter_id ( ) . map ( |id| {
17841786 let val = match id {
1785- Either :: Left ( _) => TyKind :: Error . intern ( Interner ) . cast ( Interner ) ,
1786- Either :: Right ( id) => unknown_const_as_generic ( db. const_param_ty ( id) ) ,
1787+ GenericParamId :: TypeParamId ( _) => TyKind :: Error . intern ( Interner ) . cast ( Interner ) ,
1788+ GenericParamId :: ConstParamId ( id) => unknown_const_as_generic ( db. const_param_ty ( id) ) ,
1789+ GenericParamId :: LifetimeParamId ( _) => static_lifetime ( ) . cast ( Interner ) ,
17871790 } ;
17881791 crate :: make_binders ( db, & generic_params, val)
17891792 } ) ) ;
0 commit comments