diff --git a/lexer/src/states/number/digit.rs b/lexer/src/states/number/digit.rs index fb5ccef..26e9493 100644 --- a/lexer/src/states/number/digit.rs +++ b/lexer/src/states/number/digit.rs @@ -2,9 +2,10 @@ * Eryn Wells */ +use chars::Lexable; use error::Error; -use states::{State, StateResult}; -use states::number::{Builder, Radix, Exact}; +use states::{State, StateResult, Resume}; +use states::number::{Builder, Radix}; use token::Token; #[derive(Debug)] pub struct Digit(Builder); @@ -31,6 +32,8 @@ impl State for Digit { fn lex(&mut self, c: char) -> StateResult { if self.0.push_digit(c).is_ok() { StateResult::Continue + } else if c.is_identifier_delimiter() { + StateResult::emit(Token::Num(self.0.resolve()), Resume::Here) } else { StateResult::fail(Error::invalid_char(c)) } diff --git a/lexer/tests/single_tokens.rs b/lexer/tests/single_tokens.rs index 5c89c31..ff77dfa 100644 --- a/lexer/tests/single_tokens.rs +++ b/lexer/tests/single_tokens.rs @@ -75,8 +75,9 @@ fn bool_with_spaces() { #[test] fn integer() { - let expected_lex = Lex::new(Token::Num(23), "23", 0, 0); - let mut lex = Lexer::new("23".chars()); - assert_eq!(lex.next(), Some(Ok(expected_lex))); + let mut lex = Lexer::new("23 42".chars()); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(23), "23", 0, 0)))); + // TODO: Fix this once issue #12 is fixed. + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(42), " 42", 0, 0)))); assert_eq!(lex.next(), None); }