diff options
Diffstat (limited to 'src/lisp/lex.rs')
-rw-r--r-- | src/lisp/lex.rs | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/lisp/lex.rs b/src/lisp/lex.rs index 2088421..754a23f 100644 --- a/src/lisp/lex.rs +++ b/src/lisp/lex.rs | |||
@@ -102,16 +102,11 @@ impl<'src, 'file> SpanDisplay<'src, 'file> { | |||
102 | pub struct Lexer<'input> { | 102 | pub struct Lexer<'input> { |
103 | input: &'input str, | 103 | input: &'input str, |
104 | cur_pos: u32, | 104 | cur_pos: u32, |
105 | offset: u32, | ||
106 | } | 105 | } |
107 | 106 | ||
108 | impl<'a> Lexer<'a> { | 107 | impl<'a> Lexer<'a> { |
109 | pub fn new(input: &'a str, offset: u32) -> Self { | 108 | pub fn new(input: &'a str) -> Self { |
110 | Self { | 109 | Self { input, cur_pos: 0 } |
111 | input, | ||
112 | cur_pos: 0, | ||
113 | offset, | ||
114 | } | ||
115 | } | 110 | } |
116 | 111 | ||
117 | pub fn next_token(&mut self) -> Result<(Span, Token<'a>), ParseError> { | 112 | pub fn next_token(&mut self) -> Result<(Span, Token<'a>), ParseError> { |
@@ -166,11 +161,11 @@ impl<'a> Lexer<'a> { | |||
166 | return Ok((sp, token)); | 161 | return Ok((sp, token)); |
167 | } | 162 | } |
168 | self.input = &self.input[..0]; | 163 | self.input = &self.input[..0]; |
169 | return Ok((Span::empty(self.cur_pos), Token::End)); | 164 | Ok((Span::empty(self.cur_pos), Token::End)) |
170 | } | 165 | } |
171 | } | 166 | } |
172 | 167 | ||
173 | fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { | 168 | fn parse_number(mut input: &str) -> Result<(usize, Token<'_>), ParseErrorKind> { |
174 | let mut dot = false; | 169 | let mut dot = false; |
175 | let mut minus = false; | 170 | let mut minus = false; |
176 | let mut size = 0; | 171 | let mut size = 0; |
@@ -186,7 +181,7 @@ fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), ParseError | |||
186 | } | 181 | } |
187 | } | 182 | } |
188 | 183 | ||
189 | while let Some(chr) = chars.next() { | 184 | for chr in chars { |
190 | if chr.is_digit(10) { | 185 | if chr.is_digit(10) { |
191 | size += 1; | 186 | size += 1; |
192 | } else if chr == '.' { | 187 | } else if chr == '.' { |
@@ -210,10 +205,10 @@ fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), ParseError | |||
210 | } else { | 205 | } else { |
211 | Token::Integer(&input[..size]) | 206 | Token::Integer(&input[..size]) |
212 | }; | 207 | }; |
213 | return Ok((size, tok)); | 208 | Ok((size, tok)) |
214 | } | 209 | } |
215 | 210 | ||
216 | fn parse_string<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { | 211 | fn parse_string(input: &str) -> Result<(usize, Token<'_>), ParseErrorKind> { |
217 | // count opening quote | 212 | // count opening quote |
218 | let mut size = 1; | 213 | let mut size = 1; |
219 | let mut closed = false; | 214 | let mut closed = false; |
@@ -260,7 +255,7 @@ fn consume_comment(start: usize, chars: &mut CharIndices) -> usize { | |||
260 | last - start + 1 | 255 | last - start + 1 |
261 | } | 256 | } |
262 | 257 | ||
263 | fn parse_name<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { | 258 | fn parse_name(input: &str) -> Result<(usize, Token<'_>), ParseErrorKind> { |
264 | for (ind, chr) in input.char_indices() { | 259 | for (ind, chr) in input.char_indices() { |
265 | if !is_ident(chr) { | 260 | if !is_ident(chr) { |
266 | return Ok((ind, Token::Name(&input[..ind]))); | 261 | return Ok((ind, Token::Name(&input[..ind]))); |
@@ -269,7 +264,7 @@ fn parse_name<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> | |||
269 | return Ok((input.len(), Token::Name(input))); | 264 | return Ok((input.len(), Token::Name(input))); |
270 | } | 265 | } |
271 | 266 | ||
272 | fn parse_char<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { | 267 | fn parse_char(input: &str) -> Result<(usize, Token<'_>), ParseErrorKind> { |
273 | // first two chars of input are '#' and '\' | 268 | // first two chars of input are '#' and '\' |
274 | let chr = &input[..3]; | 269 | let chr = &input[..3]; |
275 | return Ok((chr.len(), Token::Char(chr))); | 270 | return Ok((chr.len(), Token::Char(chr))); |
@@ -284,7 +279,7 @@ mod tests { | |||
284 | } | 279 | } |
285 | 280 | ||
286 | fn tokens(input: &str) -> Vec<(Span, Token)> { | 281 | fn tokens(input: &str) -> Vec<(Span, Token)> { |
287 | let mut lexer = Lexer::new(input, 0); | 282 | let mut lexer = Lexer::new(input); |
288 | let mut tokens = Vec::new(); | 283 | let mut tokens = Vec::new(); |
289 | loop { | 284 | loop { |
290 | match lexer.next_token().unwrap() { | 285 | match lexer.next_token().unwrap() { |