From bc12c0b4e7e8d6c2f8469427f478d5d4e9f45153 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sat, 23 May 2020 01:49:21 -0400 Subject: [PATCH] refactor number parsing to reduce nesting --- src/utils/number.rs | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/src/utils/number.rs b/src/utils/number.rs index 8d5713f..e1727b8 100644 --- a/src/utils/number.rs +++ b/src/utils/number.rs @@ -84,35 +84,30 @@ pub(crate) fn eat_number>( let mut times_ten = String::new(); let mut times_ten_is_postive = true; loop { - match toks.peek() { - // TODO: https://github.com/rust-lang/rust/issues/54883 - Some(Token { kind: 'e', .. }) | Some(Token { kind: 'E', .. }) => { - if toks.peek_forward(1).is_none() { - break; - } else { - let Token { kind, pos } = *toks.peek().unwrap(); - match kind { - '-' => { - toks.next(); - times_ten_is_postive = false; - } - '0'..='9' => {} - _ => break, - } + // TODO: https://github.com/rust-lang/rust/issues/54883 + if let Some(Token { kind: 'e', .. }) | Some(Token { kind: 'E', .. }) = toks.peek() { + let t = if let Some(tok) = toks.peek_forward(1) { + *tok + } else { + break; + }; + match t.kind { + '-' => { toks.next(); - - eat_whole_number(toks, &mut times_ten); - - if times_ten.is_empty() && !times_ten_is_postive { - if let Some(t) = toks.peek() { - return Err(("Expected digit.", t.pos()).into()); - } - return Err(("Expected digit.", pos).into()); - } + times_ten_is_postive = false; } + '0'..='9' => {} + _ => break, + } + + toks.next(); + + eat_whole_number(toks, &mut times_ten); + + if times_ten.is_empty() && !times_ten_is_postive { + return Err(("Expected digit.", toks.peek().unwrap_or(&t).pos).into()); } - Some(..) | None => break, } break; }