From 2b10c5c6c1aeb5b867c5df6866ce6a28457f258a Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Fri, 16 Apr 2021 21:59:05 +0800 Subject: [PATCH] Correct position of negative numbers. --- src/parser.rs | 4 ++-- src/token.rs | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index d376d7f2..6169657c 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1328,7 +1328,7 @@ fn parse_unary( match parse_unary(input, state, lib, settings.level_up())? { // Negative integer - Expr::IntegerConstant(num, pos) => num + Expr::IntegerConstant(num, _) => num .checked_neg() .map(|i| Expr::IntegerConstant(i, pos)) .or_else(|| { @@ -1341,7 +1341,7 @@ fn parse_unary( // Negative float #[cfg(not(feature = "no_float"))] - Expr::FloatConstant(x, pos) => Ok(Expr::FloatConstant((-(*x)).into(), pos)), + Expr::FloatConstant(x, _) => Ok(Expr::FloatConstant((-(*x)).into(), pos)), // Call negative function expr => { diff --git a/src/token.rs b/src/token.rs index d12831ca..a035d278 100644 --- a/src/token.rs +++ b/src/token.rs @@ -1240,7 +1240,7 @@ fn get_next_token_inner( ); } - let mut negated = false; + let mut negated_pos = Position::NONE; while let Some(c) = stream.get_next() { pos.advance(); @@ -1349,9 +1349,12 @@ fn get_next_token_inner( } } - if negated { + let num_pos = if !negated_pos.is_none() { result.insert(0, '-'); - } + negated_pos + } else { + start_pos + }; // Parse number return Some(( @@ -1388,7 +1391,7 @@ fn get_next_token_inner( Token::LexError(LERR::MalformedNumber(result.into_iter().collect())) }) }, - start_pos, + num_pos, )); } @@ -1507,7 +1510,7 @@ fn get_next_token_inner( ('+', _) if !state.non_unary => return Some((Token::UnaryPlus, start_pos)), ('+', _) => return Some((Token::Plus, start_pos)), - ('-', '0'..='9') if !state.non_unary => negated = true, + ('-', '0'..='9') if !state.non_unary => negated_pos = start_pos, ('-', '0'..='9') => return Some((Token::Minus, start_pos)), ('-', '=') => { eat_next(stream, pos);