From 08cf6e88b004d900ecc6a96ee0573b85fc3945ae Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sat, 3 Sep 2022 10:51:34 +0200 Subject: [PATCH] Remove negative number tokens --- minijinja/src/lexer.rs | 16 +++++----------- minijinja/tests/inputs/math.txt | 3 +++ .../snapshots/test_lexer__lexer@things.txt.snap | 6 ++++-- .../snapshots/test_templates__vm@math.txt.snap | 5 ++++- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/minijinja/src/lexer.rs b/minijinja/src/lexer.rs index 8c22d291..aa0783bb 100644 --- a/minijinja/src/lexer.rs +++ b/minijinja/src/lexer.rs @@ -150,7 +150,7 @@ fn tokenize_raw( } macro_rules! eat_number { - ($neg:expr) => {{ + () => {{ let old_loc = loc!(); let mut is_float = false; let num_len = rest @@ -169,7 +169,7 @@ fn tokenize_raw( if is_float { return Some(Ok(( Token::Float(match num.parse::() { - Ok(val) => val * if $neg { -1.0 } else { 1.0 }, + Ok(val) => val, Err(_) => syntax_error!("invalid float"), }), span!(old_loc), @@ -177,7 +177,7 @@ fn tokenize_raw( } else { return Some(Ok(( Token::Int(match num.parse::() { - Ok(val) => val * if $neg { -1 } else { 1 }, + Ok(val) => val, Err(_) => syntax_error!("invalid integer"), }), span!(old_loc), @@ -311,13 +311,7 @@ fn tokenize_raw( // single character operators (and strings) let op = match rest.as_bytes().get(0) { Some(b'+') => Some(Token::Plus), - Some(b'-') => { - if rest.as_bytes().get(1).map_or(false, |x| x.is_ascii_digit()) { - advance!(1); - eat_number!(true); - } - Some(Token::Minus) - } + Some(b'-') => Some(Token::Minus), Some(b'*') => Some(Token::Mul), Some(b'/') => Some(Token::Div), Some(b'%') => Some(Token::Mod), @@ -338,7 +332,7 @@ fn tokenize_raw( Some(b'}') => Some(Token::BraceClose), Some(b'\'') => eat_string!(b'\''), Some(b'"') => eat_string!(b'"'), - Some(c) if c.is_ascii_digit() => eat_number!(false), + Some(c) if c.is_ascii_digit() => eat_number!(), _ => None, }; if let Some(op) = op { diff --git a/minijinja/tests/inputs/math.txt b/minijinja/tests/inputs/math.txt index e96dd256..9ff64f2e 100644 --- a/minijinja/tests/inputs/math.txt +++ b/minijinja/tests/inputs/math.txt @@ -6,3 +6,6 @@ should be -2.5: {{ 1.5 * 2.5 * 2 / 3 - var }} should be -3.0: {{ 1.5 * 2.5 * 2 // 3 - var }} should be 2.0: {{ 4 / 2 }} should be 2: {{ 4 // 2 }} +should be 0: {{ 1 - 1 }} +should be 0: {{1-1}} +should be -1: {{ -1 }} diff --git a/minijinja/tests/snapshots/test_lexer__lexer@things.txt.snap b/minijinja/tests/snapshots/test_lexer__lexer@things.txt.snap index 43c0fe31..7121d81e 100644 --- a/minijinja/tests/snapshots/test_lexer__lexer@things.txt.snap +++ b/minijinja/tests/snapshots/test_lexer__lexer@things.txt.snap @@ -9,7 +9,8 @@ input_file: minijinja/tests/lexer-inputs/things.txt PAREN_OPEN, INT(42), COMMA, - INT(-42), + MINUS, + INT(42), PAREN_CLOSE, VARIABLE_END(false), TEMPLATE_DATA("\n"), @@ -18,7 +19,8 @@ input_file: minijinja/tests/lexer-inputs/things.txt PAREN_OPEN, FLOAT(1.5), COMMA, - FLOAT(-1.5), + MINUS, + FLOAT(1.5), PAREN_CLOSE, VARIABLE_END(false), TEMPLATE_DATA("\n"), diff --git a/minijinja/tests/snapshots/test_templates__vm@math.txt.snap b/minijinja/tests/snapshots/test_templates__vm@math.txt.snap index 38aa7460..213ff557 100644 --- a/minijinja/tests/snapshots/test_templates__vm@math.txt.snap +++ b/minijinja/tests/snapshots/test_templates__vm@math.txt.snap @@ -1,6 +1,6 @@ --- source: minijinja/tests/test_templates.rs -description: "should be -2.5: {{ 1.5 * 2.5 * 2 / 3 - var }}\nshould be -3.0: {{ 1.5 * 2.5 * 2 // 3 - var }}\nshould be 2.0: {{ 4 / 2 }}\nshould be 2: {{ 4 // 2 }}" +description: "should be -2.5: {{ 1.5 * 2.5 * 2 / 3 - var }}\nshould be -3.0: {{ 1.5 * 2.5 * 2 // 3 - var }}\nshould be 2.0: {{ 4 / 2 }}\nshould be 2: {{ 4 // 2 }}\nshould be 0: {{ 1 - 1 }}\nshould be 0: {{1-1}}\nshould be -1: {{ -1 }}" info: var: 5 input_file: minijinja/tests/inputs/math.txt @@ -9,4 +9,7 @@ should be -2.5: -2.5 should be -3.0: -3.0 should be 2.0: 2.0 should be 2: 2 +should be 0: 0 +should be 0: 0 +should be -1: -1