Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove negative number tokens #94

Merged
merged 1 commit into from Sep 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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