Integers with underscores
diff --git a/src/lit.rs b/src/lit.rs
index a427ae8..131bd73 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -320,8 +320,8 @@
pub fn digits(input: &str) -> IResult<&str, u64> {
let mut value = 0u64;
let mut len = 0;
- let mut bytes = input.bytes().peekable();
- while let Some(&b) = bytes.peek() {
+ let mut empty = true;
+ for b in input.bytes() {
match b {
b'0'...b'9' => {
value = match value.checked_mul(10) {
@@ -332,16 +332,22 @@
Some(value) => value,
None => return IResult::Error,
};
- bytes.next();
+ len += 1;
+ empty = false;
+ }
+ b'_' => {
+ if empty {
+ return IResult::Error;
+ }
len += 1;
}
_ => break,
}
}
- if len > 0 {
- IResult::Done(&input[len..], value)
- } else {
+ if empty {
IResult::Error
+ } else {
+ IResult::Done(&input[len..], value)
}
}
}