diff options
| author | Kevin Butler <haqkrs@gmail.com> | 2014-05-23 20:51:21 +0100 |
|---|---|---|
| committer | Kevin Butler <haqkrs@gmail.com> | 2014-05-23 20:51:21 +0100 |
| commit | da663ccf9f9bcc737d63ee48515689bd2b40ef3d (patch) | |
| tree | 29a89758503a72cd6bf53aa372acd9a180ad5c04 /src/libsyntax | |
| parent | ad775be8b48f82d19356942a4fc6fcadc56d3e7e (diff) | |
| download | rust-da663ccf9f9bcc737d63ee48515689bd2b40ef3d.tar.gz rust-da663ccf9f9bcc737d63ee48515689bd2b40ef3d.zip | |
Improve error message for lifetimes after type params.
Closes #14303.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index c117b5b0128..ae104707284 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3425,6 +3425,7 @@ impl<'a> Parser<'a> { let lifetimes = self.parse_lifetimes(); let mut seen_default = false; let ty_params = self.parse_seq_to_gt(Some(token::COMMA), |p| { + p.forbid_lifetime(); let ty_param = p.parse_ty_param(); if ty_param.default.is_some() { seen_default = true; @@ -3444,10 +3445,21 @@ impl<'a> Parser<'a> { let lifetimes = self.parse_lifetimes(); let result = self.parse_seq_to_gt( Some(token::COMMA), - |p| p.parse_ty(false)); + |p| { + p.forbid_lifetime(); + p.parse_ty(false) + } + ); (lifetimes, result.into_vec()) } + fn forbid_lifetime(&mut self) { + if Parser::token_is_lifetime(&self.token) { + self.span_fatal(self.span, "lifetime parameters must be declared \ + prior to type parameters"); + } + } + fn parse_fn_args(&mut self, named_args: bool, allow_variadic: bool) -> (Vec<Arg> , bool) { let sp = self.span; |
