Skip to content

Commit

Permalink
Remove negative number tokens (#94)
Browse files Browse the repository at this point in the history
  • Loading branch information
mitsuhiko committed Sep 3, 2022
1 parent fb73eee commit a905d86
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 14 deletions.
16 changes: 5 additions & 11 deletions minijinja/src/lexer.rs
Expand Up @@ -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
Expand All @@ -169,15 +169,15 @@ fn tokenize_raw(
if is_float {
return Some(Ok((
Token::Float(match num.parse::<f64>() {
Ok(val) => val * if $neg { -1.0 } else { 1.0 },
Ok(val) => val,
Err(_) => syntax_error!("invalid float"),
}),
span!(old_loc),
)));
} else {
return Some(Ok((
Token::Int(match num.parse::<i64>() {
Ok(val) => val * if $neg { -1 } else { 1 },
Ok(val) => val,
Err(_) => syntax_error!("invalid integer"),
}),
span!(old_loc),
Expand Down Expand Up @@ -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),
Expand All @@ -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 {
Expand Down
3 changes: 3 additions & 0 deletions minijinja/tests/inputs/math.txt
Expand Up @@ -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 }}
6 changes: 4 additions & 2 deletions minijinja/tests/snapshots/test_lexer__lexer@things.txt.snap
Expand Up @@ -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"),
Expand All @@ -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"),
Expand Down
5 changes: 4 additions & 1 deletion 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
Expand All @@ -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

0 comments on commit a905d86

Please sign in to comment.