11pub use super :: token:: Tok ;
22use std:: collections:: HashMap ;
33use std:: str:: CharIndices ;
4- use std:: str:: FromStr ;
54
65pub struct Lexer < ' input > {
76 chars : CharIndices < ' input > ,
@@ -100,9 +99,18 @@ impl<'input> Lexer<'input> {
10099 while self . is_number ( ) {
101100 value_text. push ( self . next_char ( ) . unwrap ( ) ) ;
102101 }
102+
103+ // If float:
104+ if let Some ( '.' ) = self . chr0 {
105+ value_text. push ( self . next_char ( ) . unwrap ( ) ) ;
106+ while self . is_number ( ) {
107+ value_text. push ( self . next_char ( ) . unwrap ( ) ) ;
108+ }
109+ }
110+
103111 let end_pos = self . location ;
104112
105- let value = i32 :: from_str ( & value_text) . unwrap ( ) ;
113+ let value = value_text;
106114
107115 return Ok ( ( start_pos, Tok :: Number { value : value } , end_pos) ) ;
108116 }
@@ -672,7 +680,7 @@ mod tests {
672680 fn $name( ) {
673681 let source = String :: from( format!( r"99232 # {}" , $eol) ) ;
674682 let tokens = lex_source( & source) ;
675- assert_eq!( tokens, vec![ Tok :: Number { value: 99232 } ] ) ;
683+ assert_eq!( tokens, vec![ Tok :: Number { value: " 99232" . to_string ( ) } ] ) ;
676684 }
677685 ) *
678686 }
@@ -695,9 +703,9 @@ mod tests {
695703 assert_eq!(
696704 tokens,
697705 vec![
698- Tok :: Number { value: 123 } ,
706+ Tok :: Number { value: " 123" . to_string ( ) } ,
699707 Tok :: Newline ,
700- Tok :: Number { value: 456 } ,
708+ Tok :: Number { value: " 456" . to_string ( ) } ,
701709 ]
702710 )
703711 }
@@ -722,11 +730,11 @@ mod tests {
722730 name: String :: from( "avariable" ) ,
723731 } ,
724732 Tok :: Equal ,
725- Tok :: Number { value: 99 } ,
733+ Tok :: Number { value: "99" . to_string ( ) } ,
726734 Tok :: Plus ,
727- Tok :: Number { value: 2 } ,
735+ Tok :: Number { value: "2" . to_string ( ) } ,
728736 Tok :: Minus ,
729- Tok :: Number { value: 0 } ,
737+ Tok :: Number { value: "0" . to_string ( ) } ,
730738 ]
731739 ) ;
732740 }
@@ -751,7 +759,7 @@ mod tests {
751759 Tok :: Newline ,
752760 Tok :: Indent ,
753761 Tok :: Return ,
754- Tok :: Number { value: 99 } ,
762+ Tok :: Number { value: "99" . to_string ( ) } ,
755763 Tok :: Newline ,
756764 Tok :: Dedent ,
757765 ]
@@ -794,7 +802,7 @@ mod tests {
794802 Tok :: Newline ,
795803 Tok :: Indent ,
796804 Tok :: Return ,
797- Tok :: Number { value: 99 } ,
805+ Tok :: Number { value: "99" . to_string ( ) } ,
798806 Tok :: Newline ,
799807 Tok :: Dedent ,
800808 Tok :: Dedent ,
@@ -826,9 +834,9 @@ mod tests {
826834 } ,
827835 Tok :: Equal ,
828836 Tok :: Lsqb ,
829- Tok :: Number { value: 1 } ,
837+ Tok :: Number { value: "1" . to_string ( ) } ,
830838 Tok :: Comma ,
831- Tok :: Number { value: 2 } ,
839+ Tok :: Number { value: "2" . to_string ( ) } ,
832840 Tok :: Rsqb ,
833841 Tok :: Newline ,
834842 ]
0 commit comments