diff options
| author | Zack M. Davis <code@zackmdavis.net> | 2017-12-30 21:16:16 -0800 |
|---|---|---|
| committer | Zack M. Davis <code@zackmdavis.net> | 2017-12-30 21:16:16 -0800 |
| commit | b0f880ddd95b5ed73bb9db66119c730fecb23fad (patch) | |
| tree | dc662f728a3f999394661128515e6e59d2abbd08 /src/libsyntax/parse/parser.rs | |
| parent | 54d7285a349a3558755a31bba5682d7618b66967 (diff) | |
| download | rust-b0f880ddd95b5ed73bb9db66119c730fecb23fad.tar.gz rust-b0f880ddd95b5ed73bb9db66119c730fecb23fad.zip | |
in which leading zeroes on tuple-struct accesses are abjured
Resolves #47073.
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 15 |
1 files changed, 12 insertions, 3 deletions
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::<usize>().ok(); + let invalid_msg = "invalid tuple or struct index"; + + let index = index_ident.as_str().parse::<usize>().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); } } } |
