@@ -518,23 +518,26 @@ pub enum AliasTermKind {
518518 /// An unevaluated anonymous constants.
519519 UnevaluatedConst ,
520520 /// An unevaluated const coming from an associated const.
521- ProjectionConst ,
521+ ProjectionConst { is_type_const : bool } ,
522522 /// A top level const item not part of a trait or impl.
523- FreeConst ,
523+ FreeConst { is_type_const : bool } ,
524524 /// An associated const in an inherent `impl`
525- InherentConst ,
525+ InherentConst { is_type_const : bool } ,
526526}
527527
528528impl AliasTermKind {
529529 pub fn descr ( self ) -> & ' static str {
530530 match self {
531531 AliasTermKind :: ProjectionTy => "associated type" ,
532- AliasTermKind :: ProjectionConst => "associated const" ,
532+ AliasTermKind :: ProjectionConst { is_type_const : true } => "associated const" ,
533+ AliasTermKind :: ProjectionConst { is_type_const : false } => "associated const" ,
533534 AliasTermKind :: InherentTy => "inherent associated type" ,
534- AliasTermKind :: InherentConst => "inherent associated const" ,
535+ AliasTermKind :: InherentConst { is_type_const : true } => "inherent associated const" ,
536+ AliasTermKind :: InherentConst { is_type_const : false } => "inherent associated const" ,
535537 AliasTermKind :: OpaqueTy => "opaque type" ,
536538 AliasTermKind :: FreeTy => "type alias" ,
537- AliasTermKind :: FreeConst => "unevaluated constant" ,
539+ AliasTermKind :: FreeConst { is_type_const : true } => "unevaluated constant" ,
540+ AliasTermKind :: FreeConst { is_type_const : false } => "unevaluated constant" ,
538541 AliasTermKind :: UnevaluatedConst => "unevaluated constant" ,
539542 }
540543 }
@@ -547,9 +550,9 @@ impl AliasTermKind {
547550 | AliasTermKind :: FreeTy => true ,
548551
549552 AliasTermKind :: UnevaluatedConst
550- | AliasTermKind :: ProjectionConst
551- | AliasTermKind :: InherentConst
552- | AliasTermKind :: FreeConst => false ,
553+ | AliasTermKind :: ProjectionConst { .. }
554+ | AliasTermKind :: InherentConst { .. }
555+ | AliasTermKind :: FreeConst { .. } => false ,
553556 }
554557 }
555558}
@@ -629,11 +632,11 @@ impl<I: Interner> AliasTerm<I> {
629632 AliasTermKind :: InherentTy => AliasTyKind :: Inherent { def_id : self . def_id } ,
630633 AliasTermKind :: OpaqueTy => AliasTyKind :: Opaque { def_id : self . def_id } ,
631634 AliasTermKind :: FreeTy => AliasTyKind :: Free { def_id : self . def_id } ,
632- AliasTermKind :: InherentConst
633- | AliasTermKind :: FreeConst
635+ kind @ ( AliasTermKind :: InherentConst { .. }
636+ | AliasTermKind :: FreeConst { .. }
634637 | AliasTermKind :: UnevaluatedConst
635- | AliasTermKind :: ProjectionConst => {
636- panic ! ( "Cannot turn `UnevaluatedConst ` into `AliasTy`" )
638+ | AliasTermKind :: ProjectionConst { .. } ) => {
639+ panic ! ( "Cannot turn `{} ` into `AliasTy`" , kind . descr ( ) )
637640 }
638641 } ;
639642 ty:: AliasTy { kind, args : self . args , _use_alias_ty_new_instead : ( ) }
@@ -645,10 +648,10 @@ impl<I: Interner> AliasTerm<I> {
645648
646649 pub fn to_term ( self , interner : I ) -> I :: Term {
647650 let alias_ty_kind = match self . kind ( interner) {
648- AliasTermKind :: FreeConst
649- | AliasTermKind :: InherentConst
651+ AliasTermKind :: FreeConst { .. }
652+ | AliasTermKind :: InherentConst { .. }
650653 | AliasTermKind :: UnevaluatedConst
651- | AliasTermKind :: ProjectionConst => {
654+ | AliasTermKind :: ProjectionConst { .. } => {
652655 return I :: Const :: new_unevaluated (
653656 interner,
654657 ty:: UnevaluatedConst :: new ( self . def_id . try_into ( ) . unwrap ( ) , self . args ) ,
@@ -685,7 +688,7 @@ impl<I: Interner> AliasTerm<I> {
685688 assert ! (
686689 matches!(
687690 self . kind( interner) ,
688- AliasTermKind :: ProjectionTy | AliasTermKind :: ProjectionConst
691+ AliasTermKind :: ProjectionTy | AliasTermKind :: ProjectionConst { .. }
689692 ) ,
690693 "expected a projection"
691694 ) ;
@@ -738,7 +741,7 @@ impl<I: Interner> AliasTerm<I> {
738741 ) -> I :: GenericArgs {
739742 debug_assert ! ( matches!(
740743 self . kind( interner) ,
741- AliasTermKind :: InherentTy | AliasTermKind :: InherentConst
744+ AliasTermKind :: InherentTy | AliasTermKind :: InherentConst { .. }
742745 ) ) ;
743746 interner. mk_args_from_iter ( impl_args. iter ( ) . chain ( self . args . iter ( ) . skip ( 1 ) ) )
744747 }
0 commit comments