@@ -49,14 +49,14 @@ enum SelfSemantic {
4949} 
5050
5151enum  TraitOrTraitImpl  { 
52-     Trait  {  span :  Span ,  constness_span :   Option < Span >  } , 
52+     Trait  {  span :  Span ,  constness :   Const  } , 
5353    TraitImpl  {  constness :  Const ,  polarity :  ImplPolarity ,  trait_ref_span :  Span  } , 
5454} 
5555
5656impl  TraitOrTraitImpl  { 
5757    fn  constness ( & self )  -> Option < Span >  { 
5858        match  self  { 
59-             Self :: Trait  {  constness_span :   Some ( span) ,  .. } 
59+             Self :: Trait  {  constness :   Const :: Yes ( span) ,  .. } 
6060            | Self :: TraitImpl  {  constness :  Const :: Yes ( span) ,  .. }  => Some ( * span) , 
6161            _ => None , 
6262        } 
@@ -110,15 +110,10 @@ impl<'a> AstValidator<'a> {
110110        self . outer_trait_or_trait_impl  = old; 
111111    } 
112112
113-     fn  with_in_trait ( 
114-         & mut  self , 
115-         span :  Span , 
116-         constness_span :  Option < Span > , 
117-         f :  impl  FnOnce ( & mut  Self ) , 
118-     )  { 
113+     fn  with_in_trait ( & mut  self ,  span :  Span ,  constness :  Const ,  f :  impl  FnOnce ( & mut  Self ) )  { 
119114        let  old = mem:: replace ( 
120115            & mut  self . outer_trait_or_trait_impl , 
121-             Some ( TraitOrTraitImpl :: Trait  {  span,  constness_span  } ) , 
116+             Some ( TraitOrTraitImpl :: Trait  {  span,  constness  } ) , 
122117        ) ; 
123118        f ( self ) ; 
124119        self . outer_trait_or_trait_impl  = old; 
@@ -273,7 +268,7 @@ impl<'a> AstValidator<'a> {
273268        } ; 
274269
275270        let  make_trait_const_sugg = if  const_trait_impl
276-             && let  TraitOrTraitImpl :: Trait  {  span,  constness_span :   None  }  = parent
271+             && let  TraitOrTraitImpl :: Trait  {  span,  constness :  ast :: Const :: No  }  = parent
277272        { 
278273            Some ( span. shrink_to_lo ( ) ) 
279274        }  else  { 
@@ -1131,10 +1126,23 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
11311126                } 
11321127                visit:: walk_item ( self ,  item) 
11331128            } 
1134-             ItemKind :: Trait ( box Trait  {  is_auto,  generics,  ident,  bounds,  items,  .. } )  => { 
1129+             ItemKind :: Trait ( box Trait  { 
1130+                 constness, 
1131+                 is_auto, 
1132+                 generics, 
1133+                 ident, 
1134+                 bounds, 
1135+                 items, 
1136+                 ..
1137+             } )  => { 
11351138                self . visit_attrs_vis_ident ( & item. attrs ,  & item. vis ,  ident) ; 
1136-                 let  is_const_trait =
1139+                 // FIXME(const_trait_impl) remove this 
1140+                 let  alt_const_trait_span =
11371141                    attr:: find_by_name ( & item. attrs ,  sym:: const_trait) . map ( |attr| attr. span ) ; 
1142+                 let  constness = match  ( * constness,  alt_const_trait_span)  { 
1143+                     ( Const :: Yes ( span) ,  _)  | ( Const :: No ,  Some ( span) )  => Const :: Yes ( span) , 
1144+                     ( Const :: No ,  None )  => Const :: No , 
1145+                 } ; 
11381146                if  * is_auto == IsAuto :: Yes  { 
11391147                    // Auto traits cannot have generics, super traits nor contain items. 
11401148                    self . deny_generic_params ( generics,  ident. span ) ; 
@@ -1145,13 +1153,13 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
11451153
11461154                // Equivalent of `visit::walk_item` for `ItemKind::Trait` that inserts a bound 
11471155                // context for the supertraits. 
1148-                 let  disallowed =
1149-                     is_const_trait . is_none ( ) . then ( || TildeConstReason :: Trait  {  span :  item. span  } ) ; 
1156+                 let  disallowed =  matches ! ( constness ,  ast :: Const :: No ) 
1157+                     . then ( || TildeConstReason :: Trait  {  span :  item. span  } ) ; 
11501158                self . with_tilde_const ( disallowed,  |this| { 
11511159                    this. visit_generics ( generics) ; 
11521160                    walk_list ! ( this,  visit_param_bound,  bounds,  BoundKind :: SuperTraits ) 
11531161                } ) ; 
1154-                 self . with_in_trait ( item. span ,  is_const_trait ,  |this| { 
1162+                 self . with_in_trait ( item. span ,  constness ,  |this| { 
11551163                    walk_list ! ( this,  visit_assoc_item,  items,  AssocCtxt :: Trait ) ; 
11561164                } ) ; 
11571165            } 
0 commit comments