From da663ccf9f9bcc737d63ee48515689bd2b40ef3d Mon Sep 17 00:00:00 2001 From: Kevin Butler Date: Fri, 23 May 2014 20:51:21 +0100 Subject: Improve error message for lifetimes after type params. Closes #14303. --- src/libsyntax/parse/parser.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/libsyntax') 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 , bool) { let sp = self.span; -- cgit 1.4.1-3-g733a5