Prevent where < ident > from parsing.
In order to be forward compatible with `where<'a>` syntax for higher rank parameters, prevent potential conflicts with UFCS from parsing correctly for the near term.
This commit is contained in:
parent
6a495f71ff
commit
90f6219f49
1 changed files with 17 additions and 0 deletions
|
@ -4377,6 +4377,23 @@ impl<'a> Parser<'a> {
|
|||
return Ok(where_clause);
|
||||
}
|
||||
|
||||
// This is a temporary hack.
|
||||
//
|
||||
// We are considering adding generics to the `where` keyword as an alternative higher-rank
|
||||
// parameter syntax (as in `where<'a>` or `where<T>`. To avoid that being a breaking
|
||||
// change, for now we refuse to parse `where < (ident | lifetime) (> | , | :)`.
|
||||
if token::Lt == self.token {
|
||||
let ident_or_lifetime = self.look_ahead(1, |t| t.is_ident() || t.is_lifetime());
|
||||
if ident_or_lifetime {
|
||||
let gt_comma_or_colon = self.look_ahead(2, |t| {
|
||||
*t == token::Gt || *t == token::Comma || *t == token::Colon
|
||||
});
|
||||
if gt_comma_or_colon {
|
||||
return Err(self.fatal("TODO How to even explain this error?"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut parsed_something = false;
|
||||
loop {
|
||||
let lo = self.span.lo;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue