summaryrefslogtreecommitdiffstats
path: root/crates/rebel-parse
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rebel-parse')
-rw-r--r--crates/rebel-parse/src/grammar/recipe.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/crates/rebel-parse/src/grammar/recipe.rs b/crates/rebel-parse/src/grammar/recipe.rs
index 2d342ad..5f6adbc 100644
--- a/crates/rebel-parse/src/grammar/recipe.rs
+++ b/crates/rebel-parse/src/grammar/recipe.rs
@@ -198,7 +198,7 @@ peg::parser! {
}
rule number() -> i64
- = [Token::Number(s)] { ?
+ = neg:p('-')? [Token::Number(s)] { ?
let (radix, rest) = if let Some(rest) = s.strip_prefix("0x") {
(16, rest)
} else if let Some(rest) = s.strip_prefix("0o") {
@@ -208,7 +208,10 @@ peg::parser! {
} else {
(10, *s)
};
- let digits = rest.replace('_', "");
+ let mut digits = rest.replace('_', "");
+ if neg.is_some() {
+ digits = format!("-{digits}");
+ }
i64::from_str_radix(&digits, radix).or(Err("number"))
}