specctra/read: don't repeat character retrieval code

This commit is contained in:
Alain Emilia Anna Zscheile 2024-09-30 20:06:47 +02:00 committed by tomec
parent 62b58e2210
commit b738a425e4
1 changed files with 8 additions and 16 deletions

View File

@ -198,16 +198,8 @@ impl<R: std::io::BufRead> ListTokenizer<R> {
} }
fn next_char(&mut self) -> Result<char, ParseErrorContext> { fn next_char(&mut self) -> Result<char, ParseErrorContext> {
let return_chr = if let Some(chr) = self.peeked_char { let return_chr = self.peek_char()?;
self.peeked_char = None; self.peeked_char = None;
chr
} else {
self.reader
.chars()
.next()
.ok_or(self.add_context(ParseError::Eof))?
.map_err(|err| self.add_context(err.into()))?
};
if return_chr == '\n' { if return_chr == '\n' {
self.line += 1; self.line += 1;
@ -220,17 +212,17 @@ impl<R: std::io::BufRead> ListTokenizer<R> {
} }
fn peek_char(&mut self) -> Result<char, ParseErrorContext> { fn peek_char(&mut self) -> Result<char, ParseErrorContext> {
if let Some(chr) = self.peeked_char { Ok(if let Some(chr) = self.peeked_char {
Ok(chr) chr
} else { } else {
let chr = self.reader let chr = self.reader
.chars() .read_char()
.next() .transpose()
.ok_or(self.add_context(ParseError::Eof))? .ok_or(self.add_context(ParseError::Eof))?
.map_err(|err| self.add_context(err.into()))?; .map_err(|err| self.add_context(err.into()))?;
self.peeked_char = Some(chr); self.peeked_char = Some(chr);
Ok(chr) chr
} })
} }
fn skip_whitespace(&mut self) -> Result<(), ParseErrorContext> { fn skip_whitespace(&mut self) -> Result<(), ParseErrorContext> {