From 5d09449c95857bb7e37e1c3ed8c4ee6036f40d2f Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 4 Jul 2023 11:22:07 -0600 Subject: [PATCH] widen CharReader buffer (#1859) --- src/parser/char_reader.rs | 8 ++++---- src/parser/lexer.rs | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/parser/char_reader.rs b/src/parser/char_reader.rs index a2a7c2e2..8a74db37 100644 --- a/src/parser/char_reader.rs +++ b/src/parser/char_reader.rs @@ -20,7 +20,7 @@ use std::str; pub struct CharReader { inner: R, - buf: SmallVec<[u8;4]>, + buf: SmallVec<[u8;32]>, pos: usize, } @@ -121,7 +121,7 @@ impl CharReader { self.buf.clear(); - let mut word = [0u8;4]; + let mut word = [0u8; std::mem::size_of::()]; let nread = self.inner.read(&mut word)?; self.buf.extend_from_slice(&word[..nread]); @@ -234,10 +234,10 @@ impl CharRead for CharReader { #[inline(always)] fn put_back_char(&mut self, c: char) { let src_len = self.buf.len() - self.pos; - debug_assert!(src_len <= 4); + debug_assert!(src_len <= self.buf.capacity()); let c_len = c.len_utf8(); - let mut shifted_slice = [0u8; 4]; + let mut shifted_slice = [0u8; 32]; shifted_slice[0..src_len].copy_from_slice(&self.buf[self.pos .. self.buf.len()]); diff --git a/src/parser/lexer.rs b/src/parser/lexer.rs index 7f5d73ed..3fbddc1d 100644 --- a/src/parser/lexer.rs +++ b/src/parser/lexer.rs @@ -988,6 +988,17 @@ impl<'a, R: CharRead> Lexer<'a, R> { return Ok(Token::End); } + Ok(c) if c == '\\' => { + self.skip_char(c); + + if self.lookahead_char().ok() == Some('n') { + self.skip_char('n'); + return Ok(Token::End); + } else { + self.return_char(c); + self.return_char('.'); + } + } Err(ParserError::UnexpectedEOF) => { return Ok(Token::End); } -- 2.54.0