aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/lex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp/lex.rs')
-rw-r--r--src/lisp/lex.rs25
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> {
102pub struct Lexer<'input> { 102pub 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
108impl<'a> Lexer<'a> { 107impl<'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
173fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { 168fn 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
216fn parse_string<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { 211fn 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
263fn parse_name<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { 258fn 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
272fn parse_char<'a>(input: &'a str) -> Result<(usize, Token<'a>), ParseErrorKind> { 267fn 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() {