diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index 90541ef..3c585ee 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -229,6 +229,11 @@ impl Lexer { self.state = State::Hash; self.advance(); } + else if let Some(sign) = Sign::from_char(c) { + self.number_builder.sign(sign); + self.state = State::NumberSign; + self.advance(); + } else if c.is_digit(self.number_builder.radix_value()) { self.number_builder.extend_value(c); self.state = State::Number; @@ -452,6 +457,12 @@ mod tests { check_single_token("#o45", Token::Number(Number::from_int(0o45))); } + #[test] + fn finds_exact_numbers() { + check_single_token("#e45", Token::Number(Number::from_int(45))); + check_single_token("#e-45", Token::Number(Number::from_int(-45))); + } + #[test] fn finds_hex_numbers() { check_single_token("#h4A65", Token::Number(Number::from_int(0x4A65)));