From b0f880ddd95b5ed73bb9db66119c730fecb23fad Mon Sep 17 00:00:00 2001 From: "Zack M. Davis" Date: Sat, 30 Dec 2017 21:16:16 -0800 Subject: in which leading zeroes on tuple-struct accesses are abjured Resolves #47073. --- src/libsyntax/parse/parser.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a4aad81f5f5..1a2146509e3 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2592,7 +2592,7 @@ impl<'a> Parser<'a> { token::Ident(..) => { e = self.parse_dot_suffix(e, lo)?; } - token::Literal(token::Integer(n), suf) => { + token::Literal(token::Integer(index_ident), suf) => { let sp = self.span; // A tuple index may not have a suffix @@ -2602,16 +2602,25 @@ impl<'a> Parser<'a> { hi = self.span; self.bump(); - let index = n.as_str().parse::().ok(); + let invalid_msg = "invalid tuple or struct index"; + + let index = index_ident.as_str().parse::().ok(); match index { Some(n) => { + if n.to_string() != index_ident.as_str() { + let mut err = self.struct_span_err(self.prev_span, invalid_msg); + err.span_suggestion(self.prev_span, + "try simplifying the index", + n.to_string()); + err.emit(); + } let id = respan(dot_span.to(hi), n); let field = self.mk_tup_field(e, id); e = self.mk_expr(lo.to(hi), field, ThinVec::new()); } None => { let prev_span = self.prev_span; - self.span_err(prev_span, "invalid tuple or tuple struct index"); + self.span_err(prev_span, invalid_msg); } } } -- cgit 1.4.1-3-g733a5