@@ -5067,6 +5067,7 @@ impl<'a> Parser<'a> {
50675067 crate fn parse_generic_params ( & mut self ) -> PResult < ' a , Vec < ast:: GenericParam > > {
50685068 let mut params = vec ! [ ] ;
50695069 let mut max_param = None ;
5070+ // TODO(const_generics): move parameter order enforcement to AST.
50705071 fn enforce_param_order ( parser : & Parser ,
50715072 max_param : & mut Option < ParamKindOrd > ,
50725073 param_ord : ParamKindOrd ) {
@@ -5111,9 +5112,6 @@ impl<'a> Parser<'a> {
51115112 if let Some ( max_param) = max_param {
51125113 self . span_err ( attrs[ 0 ] . span ,
51135114 & format ! ( "trailing attribute after {} parameters" , max_param) ) ;
5114- } else {
5115- self . span_err ( attrs[ 0 ] . span ,
5116- "leading attribute before generic parameters" ) ;
51175115 }
51185116 }
51195117 break
@@ -5202,7 +5200,7 @@ impl<'a> Parser<'a> {
52025200 let lit = self . parse_lit ( ) ?;
52035201 self . mk_expr ( lit. span , ExprKind :: Lit ( P ( lit) ) , ThinVec :: new ( ) )
52045202 } else {
5205- unreachable ! ( )
5203+ unreachable ! ( ) // TODO(const_generics): handle this case
52065204 } ;
52075205 debug ! ( "const arg: expr={:?}" , expr) ;
52085206 let value = AnonConst {
@@ -5253,7 +5251,7 @@ impl<'a> Parser<'a> {
52535251 // We are considering adding generics to the `where` keyword as an alternative higher-rank
52545252 // parameter syntax (as in `where<'a>` or `where<T>`. To avoid that being a breaking
52555253 // change we parse those generics now, but report an error.
5256- if self . choose_generics_over_qpath ( false ) {
5254+ if self . choose_generics_over_qpath ( ) {
52575255 let generics = self . parse_generics ( ) ?;
52585256 self . span_err ( generics. span ,
52595257 "generic parameters on `where` clauses are reserved for future use" ) ;
@@ -5827,7 +5825,7 @@ impl<'a> Parser<'a> {
58275825 }
58285826 }
58295827
5830- fn choose_generics_over_qpath ( & self , param : bool ) -> bool {
5828+ fn choose_generics_over_qpath ( & self ) -> bool {
58315829 // There's an ambiguity between generic parameters and qualified paths in impls.
58325830 // If we see `<` it may start both, so we have to inspect some following tokens.
58335831 // The following combinations can only start generics,
@@ -5849,8 +5847,7 @@ impl<'a> Parser<'a> {
58495847 self . look_ahead ( 1 , |t| t. is_lifetime ( ) || t. is_ident ( ) ) &&
58505848 self . look_ahead ( 2 , |t| t == & token:: Gt || t == & token:: Comma ||
58515849 t == & token:: Colon || t == & token:: Eq ) ||
5852- param && self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Const ) &&
5853- self . look_ahead ( 2 , |t| t. is_ident ( ) ) ) )
5850+ self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Const ) ) )
58545851 }
58555852
58565853 fn parse_impl_body ( & mut self ) -> PResult < ' a , ( Vec < ImplItem > , Vec < Attribute > ) > {
@@ -5883,7 +5880,7 @@ impl<'a> Parser<'a> {
58835880 fn parse_item_impl ( & mut self , unsafety : Unsafety , defaultness : Defaultness )
58845881 -> PResult < ' a , ItemInfo > {
58855882 // First, parse generic parameters if necessary.
5886- let mut generics = if self . choose_generics_over_qpath ( true ) {
5883+ let mut generics = if self . choose_generics_over_qpath ( ) {
58875884 self . parse_generics ( ) ?
58885885 } else {
58895886 ast:: Generics :: default ( )
0 commit comments