|
3 | 3 | use crate::ast::{self, Ident, Lit, LitKind}; |
4 | 4 | use crate::parse::parser::Parser; |
5 | 5 | use crate::parse::PResult; |
6 | | -use crate::parse::token::{self, TokenKind}; |
| 6 | +use crate::parse::token::{self, Token, TokenKind}; |
7 | 7 | use crate::parse::unescape::{unescape_str, unescape_char, unescape_byte_str, unescape_byte}; |
8 | 8 | use crate::print::pprust; |
9 | 9 | use crate::symbol::{kw, sym, Symbol}; |
@@ -272,44 +272,42 @@ impl<'a> Parser<'a> { |
272 | 272 | if self.token == token::Dot { |
273 | 273 | // Attempt to recover `.4` as `0.4`. |
274 | 274 | recovered = self.look_ahead(1, |t| { |
275 | | - if let token::Literal(token::Lit { kind: token::Integer, symbol, suffix }) = *t { |
| 275 | + if let token::Literal(token::Lit { kind: token::Integer, symbol, suffix }) = t.kind { |
276 | 276 | let next_span = self.look_ahead_span(1); |
277 | 277 | if self.span.hi() == next_span.lo() { |
278 | 278 | let s = String::from("0.") + &symbol.as_str(); |
279 | | - let token = TokenKind::lit(token::Float, Symbol::intern(&s), suffix); |
280 | | - return Some((token, self.span.to(next_span))); |
| 279 | + let kind = TokenKind::lit(token::Float, Symbol::intern(&s), suffix); |
| 280 | + return Some(Token { kind, span: self.span.to(next_span) }); |
281 | 281 | } |
282 | 282 | } |
283 | 283 | None |
284 | 284 | }); |
285 | | - if let Some((ref token, span)) = recovered { |
| 285 | + if let Some(token) = &recovered { |
286 | 286 | self.bump(); |
287 | 287 | self.diagnostic() |
288 | | - .struct_span_err(span, "float literals must have an integer part") |
| 288 | + .struct_span_err(token.span, "float literals must have an integer part") |
289 | 289 | .span_suggestion( |
290 | | - span, |
| 290 | + token.span, |
291 | 291 | "must have an integer part", |
292 | | - pprust::token_to_string(&token), |
| 292 | + pprust::token_to_string(token), |
293 | 293 | Applicability::MachineApplicable, |
294 | 294 | ) |
295 | 295 | .emit(); |
296 | 296 | } |
297 | 297 | } |
298 | 298 |
|
299 | | - let (token, span) = recovered.as_ref().map_or((&self.token, self.span), |
300 | | - |(token, span)| (token, *span)); |
301 | | - |
302 | | - match Lit::from_token(token, span) { |
| 299 | + let token = recovered.as_ref().unwrap_or(&self.token); |
| 300 | + match Lit::from_token(token, token.span) { |
303 | 301 | Ok(lit) => { |
304 | 302 | self.bump(); |
305 | 303 | Ok(lit) |
306 | 304 | } |
307 | 305 | Err(LitError::NotLiteral) => { |
308 | 306 | let msg = format!("unexpected token: {}", self.this_token_descr()); |
309 | | - Err(self.span_fatal(span, &msg)) |
| 307 | + Err(self.span_fatal(token.span, &msg)) |
310 | 308 | } |
311 | 309 | Err(err) => { |
312 | | - let lit = token.expect_lit(); |
| 310 | + let (lit, span) = (token.expect_lit(), token.span); |
313 | 311 | self.bump(); |
314 | 312 | err.report(&self.sess.span_diagnostic, lit, span); |
315 | 313 | let lit = token::Lit::new(token::Err, lit.symbol, lit.suffix); |
|
0 commit comments