From 8c2bd324d2bf61902a8157610cf0b05e7daf8b7c Mon Sep 17 00:00:00 2001 From: Taym Date: Mon, 10 Jun 2024 16:39:03 +0200 Subject: [PATCH 1/5] Convert BufferQueue to use Interior Mutability Signed-off-by: Taym --- markup5ever/util/buffer_queue.rs | 53 +++++++++++++++++--------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/markup5ever/util/buffer_queue.rs b/markup5ever/util/buffer_queue.rs index d41b6135..1a2c05b2 100644 --- a/markup5ever/util/buffer_queue.rs +++ b/markup5ever/util/buffer_queue.rs @@ -18,7 +18,7 @@ //! //! [`BufferQueue`]: struct.BufferQueue.html -use std::collections::VecDeque; +use std::{cell::RefCell, collections::VecDeque}; use tendril::StrTendril; @@ -46,7 +46,7 @@ pub enum SetResult { #[derive(Debug)] pub struct BufferQueue { /// Buffers to process. - buffers: VecDeque, + buffers: RefCell>, } impl Default for BufferQueue { @@ -54,7 +54,7 @@ impl Default for BufferQueue { #[inline] fn default() -> Self { Self { - buffers: VecDeque::with_capacity(16), + buffers: RefCell::new(VecDeque::with_capacity(16)), } } } @@ -63,42 +63,45 @@ impl BufferQueue { /// Returns whether the queue is empty. #[inline] pub fn is_empty(&self) -> bool { - self.buffers.is_empty() + self.buffers.borrow().is_empty() } /// Get the buffer at the beginning of the queue. #[inline] - pub fn pop_front(&mut self) -> Option { - self.buffers.pop_front() + pub fn pop_front(&self) -> Option { + self.buffers.borrow_mut().pop_front() } /// Add a buffer to the beginning of the queue. /// /// If the buffer is empty, it will be skipped. - pub fn push_front(&mut self, buf: StrTendril) { + pub fn push_front(&self, buf: StrTendril) { if buf.len32() == 0 { return; } - self.buffers.push_front(buf); + self.buffers.borrow_mut().push_front(buf); } /// Add a buffer to the end of the queue. /// /// If the buffer is empty, it will be skipped. - pub fn push_back(&mut self, buf: StrTendril) { + pub fn push_back(&self, buf: StrTendril) { if buf.len32() == 0 { return; } - self.buffers.push_back(buf); + self.buffers.borrow_mut().push_back(buf); } /// Look at the next available character without removing it, if the queue is not empty. pub fn peek(&self) -> Option { debug_assert!( - !self.buffers.iter().any(|el| el.len32() == 0), + !self.buffers.borrow().iter().any(|el| el.len32() == 0), "invariant \"all buffers in the queue are non-empty\" failed" ); - self.buffers.front().map(|b| b.chars().next().unwrap()) + self.buffers + .borrow() + .front() + .map(|b| b.chars().next().unwrap()) } /// Pops and returns either a single character from the given set, or @@ -128,8 +131,8 @@ impl BufferQueue { /// // ... /// # } /// ``` - pub fn pop_except_from(&mut self, set: SmallCharSet) -> Option { - let (result, now_empty) = match self.buffers.front_mut() { + pub fn pop_except_from(&self, set: SmallCharSet) -> Option { + let (result, now_empty) = match self.buffers.borrow_mut().front_mut() { None => (None, false), Some(buf) => { let n = set.nonmember_prefix_len(buf); @@ -149,7 +152,7 @@ impl BufferQueue { // Unborrow self for this part. if now_empty { - self.buffers.pop_front(); + self.buffers.borrow_mut().pop_front(); } result @@ -178,17 +181,17 @@ impl BufferQueue { /// assert!(queue.is_empty()); /// # } /// ``` - pub fn eat bool>(&mut self, pat: &str, eq: F) -> Option { + pub fn eat bool>(&self, pat: &str, eq: F) -> Option { let mut buffers_exhausted = 0; let mut consumed_from_last = 0; - self.buffers.front()?; + self.buffers.borrow().front()?; for pattern_byte in pat.bytes() { - if buffers_exhausted >= self.buffers.len() { + if buffers_exhausted >= self.buffers.borrow().len() { return None; } - let buf = &self.buffers[buffers_exhausted]; + let buf = &self.buffers.borrow()[buffers_exhausted]; if !eq(&buf.as_bytes()[consumed_from_last], &pattern_byte) { return Some(false); @@ -203,10 +206,10 @@ impl BufferQueue { // We have a match. Commit changes to the BufferQueue. for _ in 0..buffers_exhausted { - self.buffers.pop_front(); + self.buffers.borrow_mut().pop_front(); } - match self.buffers.front_mut() { + match self.buffers.borrow_mut().front_mut() { None => assert_eq!(consumed_from_last, 0), Some(ref mut buf) => buf.pop_front(consumed_from_last as u32), } @@ -222,7 +225,7 @@ impl Iterator for BufferQueue { /// /// This function manages the buffers, removing them as they become empty. fn next(&mut self) -> Option { - let (result, now_empty) = match self.buffers.front_mut() { + let (result, now_empty) = match self.buffers.borrow_mut().front_mut() { None => (None, false), Some(buf) => { let c = buf.pop_front_char().expect("empty buffer in queue"); @@ -231,7 +234,7 @@ impl Iterator for BufferQueue { }; if now_empty { - self.buffers.pop_front(); + self.buffers.borrow_mut().pop_front(); } result @@ -280,9 +283,9 @@ mod test { #[test] fn can_pop_except_set() { - let mut bq = BufferQueue::default(); + let bq = BufferQueue::default(); bq.push_back("abc&def".to_tendril()); - let mut pop = || bq.pop_except_from(small_char_set!('&')); + let pop = || bq.pop_except_from(small_char_set!('&')); assert_eq!(pop(), Some(NotFromSet("abc".to_tendril()))); assert_eq!(pop(), Some(FromSet('&'))); assert_eq!(pop(), Some(NotFromSet("def".to_tendril()))); From 34567e9dac0408d746722b785684b2f249eb7cc9 Mon Sep 17 00:00:00 2001 From: Taym Date: Tue, 11 Jun 2024 09:18:00 +0200 Subject: [PATCH 2/5] remove mut Signed-off-by: Taym --- rcdom/tests/html-serializer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rcdom/tests/html-serializer.rs b/rcdom/tests/html-serializer.rs index e4e6562b..3490a8cf 100644 --- a/rcdom/tests/html-serializer.rs +++ b/rcdom/tests/html-serializer.rs @@ -67,7 +67,7 @@ impl Serialize for Tokens { fn tokenize_and_serialize(input: StrTendril) -> StrTendril { let mut input = { - let mut q = ::html5ever::tokenizer::BufferQueue::default(); + let q = ::html5ever::tokenizer::BufferQueue::default(); q.push_front(input); q }; From 1554f90aa8a0d8cefee992f38eedbaea57e47633 Mon Sep 17 00:00:00 2001 From: Taym Date: Fri, 26 Jul 2024 13:52:42 +0200 Subject: [PATCH 3/5] Remove &mut BufferQueue usage Signed-off-by: Taym --- html5ever/src/tokenizer/char_ref/mod.rs | 22 ++++++++++----------- html5ever/src/tokenizer/mod.rs | 22 +++++++++++---------- markup5ever/util/buffer_queue.rs | 12 ++++-------- xml5ever/src/tokenizer/char_ref/mod.rs | 22 ++++++++++----------- xml5ever/src/tokenizer/mod.rs | 26 +++++++++++++------------ 5 files changed, 52 insertions(+), 52 deletions(-) diff --git a/html5ever/src/tokenizer/char_ref/mod.rs b/html5ever/src/tokenizer/char_ref/mod.rs index 9dee0278..c88dd931 100644 --- a/html5ever/src/tokenizer/char_ref/mod.rs +++ b/html5ever/src/tokenizer/char_ref/mod.rs @@ -115,7 +115,7 @@ impl CharRefTokenizer { pub(super) fn step( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { if self.result.is_some() { return Done; @@ -135,7 +135,7 @@ impl CharRefTokenizer { fn do_begin( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { 'a'..='z' | 'A'..='Z' | '0'..='9' => { @@ -156,7 +156,7 @@ impl CharRefTokenizer { fn do_octothorpe( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c { @@ -177,7 +177,7 @@ impl CharRefTokenizer { fn do_numeric( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, base: u32, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); @@ -207,7 +207,7 @@ impl CharRefTokenizer { fn do_numeric_semicolon( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { ';' => tokenizer.discard_char(input), @@ -221,7 +221,7 @@ impl CharRefTokenizer { fn unconsume_numeric( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let mut unconsume = StrTendril::from_char('#'); if let Some(c) = self.hex_marker { @@ -270,7 +270,7 @@ impl CharRefTokenizer { fn do_named( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { // peek + discard skips over newline normalization, therefore making it easier to // un-consume @@ -304,14 +304,14 @@ impl CharRefTokenizer { tokenizer.emit_error(msg); } - fn unconsume_name(&mut self, input: &mut BufferQueue) { + fn unconsume_name(&mut self, input: & BufferQueue) { input.push_front(self.name_buf_opt.take().unwrap()); } fn finish_named( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, end_char: Option, ) -> Status { match self.name_match { @@ -395,7 +395,7 @@ impl CharRefTokenizer { fn do_bogus_name( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { // peek + discard skips over newline normalization, therefore making it easier to // un-consume @@ -414,7 +414,7 @@ impl CharRefTokenizer { pub(super) fn end_of_file( &mut self, tokenizer: &mut Tokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) { while self.result.is_none() { match self.state { diff --git a/html5ever/src/tokenizer/mod.rs b/html5ever/src/tokenizer/mod.rs index 9e777dbc..71e610cb 100644 --- a/html5ever/src/tokenizer/mod.rs +++ b/html5ever/src/tokenizer/mod.rs @@ -206,7 +206,7 @@ impl Tokenizer { } /// Feed an input string into the tokenizer. - pub fn feed(&mut self, input: &mut BufferQueue) -> TokenizerResult { + pub fn feed(&mut self, input: & BufferQueue) -> TokenizerResult { if input.is_empty() { return TokenizerResult::Done; } @@ -248,7 +248,7 @@ impl Tokenizer { //§ preprocessing-the-input-stream // Get the next input character, which might be the character // 'c' that we already consumed from the buffers. - fn get_preprocessed_char(&mut self, mut c: char, input: &mut BufferQueue) -> Option { + fn get_preprocessed_char(&mut self, mut c: char, input: & BufferQueue) -> Option { if self.ignore_lf { self.ignore_lf = false; if c == '\n' { @@ -283,7 +283,7 @@ impl Tokenizer { //§ tokenization // Get the next input character, if one is available. - fn get_char(&mut self, input: &mut BufferQueue) -> Option { + fn get_char(&mut self, input: & BufferQueue) -> Option { if self.reconsume { self.reconsume = false; Some(self.current_char) @@ -294,7 +294,7 @@ impl Tokenizer { } } - fn pop_except_from(&mut self, input: &mut BufferQueue, set: SmallCharSet) -> Option { + fn pop_except_from(&mut self, input: & BufferQueue, set: SmallCharSet) -> Option { // Bail to the slow path for various corner cases. // This means that `FromSet` can contain characters not in the set! // It shouldn't matter because the fallback `FromSet` case should @@ -321,7 +321,7 @@ impl Tokenizer { // NB: this doesn't set the current input character. fn eat( &mut self, - input: &mut BufferQueue, + input: & BufferQueue, pat: &str, eq: fn(&u8, &u8) -> bool, ) -> Option { @@ -336,7 +336,9 @@ impl Tokenizer { match input.eat(pat, eq) { None if self.at_eof => Some(false), None => { - self.temp_buf.extend(input); + while let Some(data) = input.next() { + self.temp_buf.push_char(data); + } None }, Some(matched) => Some(matched), @@ -344,7 +346,7 @@ impl Tokenizer { } /// Run the state machine for as long as we can. - fn run(&mut self, input: &mut BufferQueue) -> TokenizerResult { + fn run(&mut self, input: & BufferQueue) -> TokenizerResult { if self.opts.profile { loop { let state = self.state; @@ -567,7 +569,7 @@ impl Tokenizer { } } - fn discard_char(&mut self, input: &mut BufferQueue) { + fn discard_char(&mut self, input: & BufferQueue) { // peek() deals in un-processed characters (no newline normalization), while get_char() // does. // @@ -696,7 +698,7 @@ impl Tokenizer { // Return true if we should be immediately re-invoked // (this just simplifies control flow vs. break / continue). #[allow(clippy::never_loop)] - fn step(&mut self, input: &mut BufferQueue) -> ProcessResult { + fn step(&mut self, input: & BufferQueue) -> ProcessResult { if self.char_ref_tokenizer.is_some() { return self.step_char_ref_tokenizer(input); } @@ -1382,7 +1384,7 @@ impl Tokenizer { } } - fn step_char_ref_tokenizer(&mut self, input: &mut BufferQueue) -> ProcessResult { + fn step_char_ref_tokenizer(&mut self, input: & BufferQueue) -> ProcessResult { // FIXME HACK: Take and replace the tokenizer so we don't // double-mut-borrow self. This is why it's boxed. let mut tok = self.char_ref_tokenizer.take().unwrap(); diff --git a/markup5ever/util/buffer_queue.rs b/markup5ever/util/buffer_queue.rs index 1a2c05b2..137d11eb 100644 --- a/markup5ever/util/buffer_queue.rs +++ b/markup5ever/util/buffer_queue.rs @@ -216,15 +216,11 @@ impl BufferQueue { Some(true) } -} - -impl Iterator for BufferQueue { - type Item = char; /// Get the next character if one is available, removing it from the queue. /// /// This function manages the buffers, removing them as they become empty. - fn next(&mut self) -> Option { + pub fn next(&self) -> Option { let (result, now_empty) = match self.buffers.borrow_mut().front_mut() { None => (None, false), Some(buf) => { @@ -251,7 +247,7 @@ mod test { #[test] fn smoke_test() { - let mut bq = BufferQueue::default(); + let bq = BufferQueue::default(); assert_eq!(bq.peek(), None); assert_eq!(bq.next(), None); @@ -269,7 +265,7 @@ mod test { #[test] fn can_unconsume() { - let mut bq = BufferQueue::default(); + let bq = BufferQueue::default(); bq.push_back("abc".to_tendril()); assert_eq!(bq.next(), Some('a')); @@ -297,7 +293,7 @@ mod test { // This is not very comprehensive. We rely on the tokenizer // integration tests for more thorough testing with many // different input buffer splits. - let mut bq = BufferQueue::default(); + let bq = BufferQueue::default(); bq.push_back("a".to_tendril()); bq.push_back("bc".to_tendril()); assert_eq!(bq.eat("abcd", u8::eq_ignore_ascii_case), None); diff --git a/xml5ever/src/tokenizer/char_ref/mod.rs b/xml5ever/src/tokenizer/char_ref/mod.rs index c9171908..6358524b 100644 --- a/xml5ever/src/tokenizer/char_ref/mod.rs +++ b/xml5ever/src/tokenizer/char_ref/mod.rs @@ -116,7 +116,7 @@ impl CharRefTokenizer { pub fn step( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { if self.result.is_some() { return Done; @@ -136,7 +136,7 @@ impl CharRefTokenizer { fn do_begin( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { '\t' | '\n' | '\x0C' | ' ' | '<' | '&' => self.finish_none(), @@ -159,7 +159,7 @@ impl CharRefTokenizer { fn do_octothorpe( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c { @@ -181,7 +181,7 @@ impl CharRefTokenizer { &mut self, tokenizer: &mut XmlTokenizer, base: u32, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c.to_digit(base) { @@ -210,7 +210,7 @@ impl CharRefTokenizer { fn do_numeric_semicolon( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { ';' => tokenizer.discard_char(input), @@ -224,7 +224,7 @@ impl CharRefTokenizer { fn unconsume_numeric( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let mut unconsume = StrTendril::from_char('#'); if let Some(c) = self.hex_marker { @@ -273,7 +273,7 @@ impl CharRefTokenizer { fn do_named( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.get_char(input), Stuck); self.name_buf_mut().push_char(c); @@ -307,7 +307,7 @@ impl CharRefTokenizer { fn unconsume_name( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) { tokenizer.unconsume(input, self.name_buf_opt.take().unwrap()); } @@ -316,7 +316,7 @@ impl CharRefTokenizer { &mut self, tokenizer: &mut XmlTokenizer, end_char: Option, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { match self.name_match { None => { @@ -404,7 +404,7 @@ impl CharRefTokenizer { fn do_bogus_name( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.get_char(input), Stuck); self.name_buf_mut().push_char(c); @@ -420,7 +420,7 @@ impl CharRefTokenizer { pub fn end_of_file( &mut self, tokenizer: &mut XmlTokenizer, - input: &mut BufferQueue, + input: & BufferQueue, ) { while self.result.is_none() { match self.state { diff --git a/xml5ever/src/tokenizer/mod.rs b/xml5ever/src/tokenizer/mod.rs index e81430f2..e02a0ca3 100644 --- a/xml5ever/src/tokenizer/mod.rs +++ b/xml5ever/src/tokenizer/mod.rs @@ -200,7 +200,7 @@ impl XmlTokenizer { } /// Feed an input string into the tokenizer. - pub fn feed(&mut self, input: &mut BufferQueue) { + pub fn feed(&mut self, input: & BufferQueue) { if input.is_empty() { return; } @@ -229,7 +229,7 @@ impl XmlTokenizer { // Get the next input character, which might be the character // 'c' that we already consumed from the buffers. - fn get_preprocessed_char(&mut self, mut c: char, input: &mut BufferQueue) -> Option { + fn get_preprocessed_char(&mut self, mut c: char, input: & BufferQueue) -> Option { if self.ignore_lf { self.ignore_lf = false; if c == '\n' { @@ -274,7 +274,7 @@ impl XmlTokenizer { self.emit_error(msg); } - fn pop_except_from(&mut self, input: &mut BufferQueue, set: SmallCharSet) -> Option { + fn pop_except_from(&mut self, input: & BufferQueue, set: SmallCharSet) -> Option { // Bail to the slow path for various corner cases. // This means that `FromSet` can contain characters not in the set! // It shouldn't matter because the fallback `FromSet` case should @@ -300,12 +300,14 @@ impl XmlTokenizer { // // NB: this doesn't do input stream preprocessing or set the current input // character. - fn eat(&mut self, input: &mut BufferQueue, pat: &str) -> Option { + fn eat(&mut self, input: & BufferQueue, pat: &str) -> Option { input.push_front(replace(&mut self.temp_buf, StrTendril::new())); match input.eat(pat, u8::eq_ignore_ascii_case) { None if self.at_eof => Some(false), None => { - self.temp_buf.extend(input); + while let Some(data) = input.next() { + self.temp_buf.push_char(data); + } None }, Some(matched) => Some(matched), @@ -313,7 +315,7 @@ impl XmlTokenizer { } /// Run the state machine for as long as we can. - pub fn run(&mut self, input: &mut BufferQueue) { + pub fn run(&mut self, input: & BufferQueue) { if self.opts.profile { loop { let state = self.state; @@ -342,7 +344,7 @@ impl XmlTokenizer { //§ tokenization // Get the next input character, if one is available. - fn get_char(&mut self, input: &mut BufferQueue) -> Option { + fn get_char(&mut self, input: & BufferQueue) -> Option { if self.reconsume { self.reconsume = false; Some(self.current_char) @@ -495,7 +497,7 @@ impl XmlTokenizer { } } - fn peek(&mut self, input: &mut BufferQueue) -> Option { + fn peek(&mut self, input: & BufferQueue) -> Option { if self.reconsume { Some(self.current_char) } else { @@ -503,12 +505,12 @@ impl XmlTokenizer { } } - fn discard_char(&mut self, input: &mut BufferQueue) { + fn discard_char(&mut self, input: & BufferQueue) { let c = self.get_char(input); assert!(c.is_some()); } - fn unconsume(&mut self, input: &mut BufferQueue, buf: StrTendril) { + fn unconsume(&mut self, input: & BufferQueue, buf: StrTendril) { input.push_front(buf); } } @@ -638,7 +640,7 @@ impl XmlTokenizer { // Return true if we should be immediately re-invoked // (this just simplifies control flow vs. break / continue). #[allow(clippy::never_loop)] - fn step(&mut self, input: &mut BufferQueue) -> bool { + fn step(&mut self, input: & BufferQueue) -> bool { if self.char_ref_tokenizer.is_some() { return self.step_char_ref_tokenizer(input); } @@ -1204,7 +1206,7 @@ impl XmlTokenizer { } } - fn step_char_ref_tokenizer(&mut self, input: &mut BufferQueue) -> bool { + fn step_char_ref_tokenizer(&mut self, input: & BufferQueue) -> bool { let mut tok = self.char_ref_tokenizer.take().unwrap(); let outcome = tok.step(self, input); From c110578bf3eeddd008518a91eaeb3fbdc640aba3 Mon Sep 17 00:00:00 2001 From: Taym Date: Fri, 26 Jul 2024 14:13:34 +0200 Subject: [PATCH 4/5] Fix format Signed-off-by: Taym --- html5ever/src/tokenizer/char_ref/mod.rs | 22 +++++++++++----------- html5ever/src/tokenizer/mod.rs | 23 +++++++++-------------- xml5ever/src/tokenizer/char_ref/mod.rs | 22 +++++++++++----------- xml5ever/src/tokenizer/mod.rs | 22 +++++++++++----------- 4 files changed, 42 insertions(+), 47 deletions(-) diff --git a/html5ever/src/tokenizer/char_ref/mod.rs b/html5ever/src/tokenizer/char_ref/mod.rs index c88dd931..af5d650e 100644 --- a/html5ever/src/tokenizer/char_ref/mod.rs +++ b/html5ever/src/tokenizer/char_ref/mod.rs @@ -115,7 +115,7 @@ impl CharRefTokenizer { pub(super) fn step( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { if self.result.is_some() { return Done; @@ -135,7 +135,7 @@ impl CharRefTokenizer { fn do_begin( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { 'a'..='z' | 'A'..='Z' | '0'..='9' => { @@ -156,7 +156,7 @@ impl CharRefTokenizer { fn do_octothorpe( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c { @@ -177,7 +177,7 @@ impl CharRefTokenizer { fn do_numeric( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, base: u32, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); @@ -207,7 +207,7 @@ impl CharRefTokenizer { fn do_numeric_semicolon( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { ';' => tokenizer.discard_char(input), @@ -221,7 +221,7 @@ impl CharRefTokenizer { fn unconsume_numeric( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let mut unconsume = StrTendril::from_char('#'); if let Some(c) = self.hex_marker { @@ -270,7 +270,7 @@ impl CharRefTokenizer { fn do_named( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { // peek + discard skips over newline normalization, therefore making it easier to // un-consume @@ -304,14 +304,14 @@ impl CharRefTokenizer { tokenizer.emit_error(msg); } - fn unconsume_name(&mut self, input: & BufferQueue) { + fn unconsume_name(&mut self, input: &BufferQueue) { input.push_front(self.name_buf_opt.take().unwrap()); } fn finish_named( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, end_char: Option, ) -> Status { match self.name_match { @@ -395,7 +395,7 @@ impl CharRefTokenizer { fn do_bogus_name( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { // peek + discard skips over newline normalization, therefore making it easier to // un-consume @@ -414,7 +414,7 @@ impl CharRefTokenizer { pub(super) fn end_of_file( &mut self, tokenizer: &mut Tokenizer, - input: & BufferQueue, + input: &BufferQueue, ) { while self.result.is_none() { match self.state { diff --git a/html5ever/src/tokenizer/mod.rs b/html5ever/src/tokenizer/mod.rs index 71e610cb..aca12738 100644 --- a/html5ever/src/tokenizer/mod.rs +++ b/html5ever/src/tokenizer/mod.rs @@ -206,7 +206,7 @@ impl Tokenizer { } /// Feed an input string into the tokenizer. - pub fn feed(&mut self, input: & BufferQueue) -> TokenizerResult { + pub fn feed(&mut self, input: &BufferQueue) -> TokenizerResult { if input.is_empty() { return TokenizerResult::Done; } @@ -248,7 +248,7 @@ impl Tokenizer { //§ preprocessing-the-input-stream // Get the next input character, which might be the character // 'c' that we already consumed from the buffers. - fn get_preprocessed_char(&mut self, mut c: char, input: & BufferQueue) -> Option { + fn get_preprocessed_char(&mut self, mut c: char, input: &BufferQueue) -> Option { if self.ignore_lf { self.ignore_lf = false; if c == '\n' { @@ -283,7 +283,7 @@ impl Tokenizer { //§ tokenization // Get the next input character, if one is available. - fn get_char(&mut self, input: & BufferQueue) -> Option { + fn get_char(&mut self, input: &BufferQueue) -> Option { if self.reconsume { self.reconsume = false; Some(self.current_char) @@ -294,7 +294,7 @@ impl Tokenizer { } } - fn pop_except_from(&mut self, input: & BufferQueue, set: SmallCharSet) -> Option { + fn pop_except_from(&mut self, input: &BufferQueue, set: SmallCharSet) -> Option { // Bail to the slow path for various corner cases. // This means that `FromSet` can contain characters not in the set! // It shouldn't matter because the fallback `FromSet` case should @@ -319,12 +319,7 @@ impl Tokenizer { // BufferQueue::eat. // // NB: this doesn't set the current input character. - fn eat( - &mut self, - input: & BufferQueue, - pat: &str, - eq: fn(&u8, &u8) -> bool, - ) -> Option { + fn eat(&mut self, input: &BufferQueue, pat: &str, eq: fn(&u8, &u8) -> bool) -> Option { if self.ignore_lf { self.ignore_lf = false; if self.peek(input) == Some('\n') { @@ -346,7 +341,7 @@ impl Tokenizer { } /// Run the state machine for as long as we can. - fn run(&mut self, input: & BufferQueue) -> TokenizerResult { + fn run(&mut self, input: &BufferQueue) -> TokenizerResult { if self.opts.profile { loop { let state = self.state; @@ -569,7 +564,7 @@ impl Tokenizer { } } - fn discard_char(&mut self, input: & BufferQueue) { + fn discard_char(&mut self, input: &BufferQueue) { // peek() deals in un-processed characters (no newline normalization), while get_char() // does. // @@ -698,7 +693,7 @@ impl Tokenizer { // Return true if we should be immediately re-invoked // (this just simplifies control flow vs. break / continue). #[allow(clippy::never_loop)] - fn step(&mut self, input: & BufferQueue) -> ProcessResult { + fn step(&mut self, input: &BufferQueue) -> ProcessResult { if self.char_ref_tokenizer.is_some() { return self.step_char_ref_tokenizer(input); } @@ -1384,7 +1379,7 @@ impl Tokenizer { } } - fn step_char_ref_tokenizer(&mut self, input: & BufferQueue) -> ProcessResult { + fn step_char_ref_tokenizer(&mut self, input: &BufferQueue) -> ProcessResult { // FIXME HACK: Take and replace the tokenizer so we don't // double-mut-borrow self. This is why it's boxed. let mut tok = self.char_ref_tokenizer.take().unwrap(); diff --git a/xml5ever/src/tokenizer/char_ref/mod.rs b/xml5ever/src/tokenizer/char_ref/mod.rs index 6358524b..ecb6bfe4 100644 --- a/xml5ever/src/tokenizer/char_ref/mod.rs +++ b/xml5ever/src/tokenizer/char_ref/mod.rs @@ -116,7 +116,7 @@ impl CharRefTokenizer { pub fn step( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { if self.result.is_some() { return Done; @@ -136,7 +136,7 @@ impl CharRefTokenizer { fn do_begin( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { '\t' | '\n' | '\x0C' | ' ' | '<' | '&' => self.finish_none(), @@ -159,7 +159,7 @@ impl CharRefTokenizer { fn do_octothorpe( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c { @@ -181,7 +181,7 @@ impl CharRefTokenizer { &mut self, tokenizer: &mut XmlTokenizer, base: u32, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.peek(input), Stuck); match c.to_digit(base) { @@ -210,7 +210,7 @@ impl CharRefTokenizer { fn do_numeric_semicolon( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { match unwrap_or_return!(tokenizer.peek(input), Stuck) { ';' => tokenizer.discard_char(input), @@ -224,7 +224,7 @@ impl CharRefTokenizer { fn unconsume_numeric( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let mut unconsume = StrTendril::from_char('#'); if let Some(c) = self.hex_marker { @@ -273,7 +273,7 @@ impl CharRefTokenizer { fn do_named( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.get_char(input), Stuck); self.name_buf_mut().push_char(c); @@ -307,7 +307,7 @@ impl CharRefTokenizer { fn unconsume_name( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) { tokenizer.unconsume(input, self.name_buf_opt.take().unwrap()); } @@ -316,7 +316,7 @@ impl CharRefTokenizer { &mut self, tokenizer: &mut XmlTokenizer, end_char: Option, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { match self.name_match { None => { @@ -404,7 +404,7 @@ impl CharRefTokenizer { fn do_bogus_name( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) -> Status { let c = unwrap_or_return!(tokenizer.get_char(input), Stuck); self.name_buf_mut().push_char(c); @@ -420,7 +420,7 @@ impl CharRefTokenizer { pub fn end_of_file( &mut self, tokenizer: &mut XmlTokenizer, - input: & BufferQueue, + input: &BufferQueue, ) { while self.result.is_none() { match self.state { diff --git a/xml5ever/src/tokenizer/mod.rs b/xml5ever/src/tokenizer/mod.rs index e02a0ca3..2640151f 100644 --- a/xml5ever/src/tokenizer/mod.rs +++ b/xml5ever/src/tokenizer/mod.rs @@ -200,7 +200,7 @@ impl XmlTokenizer { } /// Feed an input string into the tokenizer. - pub fn feed(&mut self, input: & BufferQueue) { + pub fn feed(&mut self, input: &BufferQueue) { if input.is_empty() { return; } @@ -229,7 +229,7 @@ impl XmlTokenizer { // Get the next input character, which might be the character // 'c' that we already consumed from the buffers. - fn get_preprocessed_char(&mut self, mut c: char, input: & BufferQueue) -> Option { + fn get_preprocessed_char(&mut self, mut c: char, input: &BufferQueue) -> Option { if self.ignore_lf { self.ignore_lf = false; if c == '\n' { @@ -274,7 +274,7 @@ impl XmlTokenizer { self.emit_error(msg); } - fn pop_except_from(&mut self, input: & BufferQueue, set: SmallCharSet) -> Option { + fn pop_except_from(&mut self, input: &BufferQueue, set: SmallCharSet) -> Option { // Bail to the slow path for various corner cases. // This means that `FromSet` can contain characters not in the set! // It shouldn't matter because the fallback `FromSet` case should @@ -300,7 +300,7 @@ impl XmlTokenizer { // // NB: this doesn't do input stream preprocessing or set the current input // character. - fn eat(&mut self, input: & BufferQueue, pat: &str) -> Option { + fn eat(&mut self, input: &BufferQueue, pat: &str) -> Option { input.push_front(replace(&mut self.temp_buf, StrTendril::new())); match input.eat(pat, u8::eq_ignore_ascii_case) { None if self.at_eof => Some(false), @@ -315,7 +315,7 @@ impl XmlTokenizer { } /// Run the state machine for as long as we can. - pub fn run(&mut self, input: & BufferQueue) { + pub fn run(&mut self, input: &BufferQueue) { if self.opts.profile { loop { let state = self.state; @@ -344,7 +344,7 @@ impl XmlTokenizer { //§ tokenization // Get the next input character, if one is available. - fn get_char(&mut self, input: & BufferQueue) -> Option { + fn get_char(&mut self, input: &BufferQueue) -> Option { if self.reconsume { self.reconsume = false; Some(self.current_char) @@ -497,7 +497,7 @@ impl XmlTokenizer { } } - fn peek(&mut self, input: & BufferQueue) -> Option { + fn peek(&mut self, input: &BufferQueue) -> Option { if self.reconsume { Some(self.current_char) } else { @@ -505,12 +505,12 @@ impl XmlTokenizer { } } - fn discard_char(&mut self, input: & BufferQueue) { + fn discard_char(&mut self, input: &BufferQueue) { let c = self.get_char(input); assert!(c.is_some()); } - fn unconsume(&mut self, input: & BufferQueue, buf: StrTendril) { + fn unconsume(&mut self, input: &BufferQueue, buf: StrTendril) { input.push_front(buf); } } @@ -640,7 +640,7 @@ impl XmlTokenizer { // Return true if we should be immediately re-invoked // (this just simplifies control flow vs. break / continue). #[allow(clippy::never_loop)] - fn step(&mut self, input: & BufferQueue) -> bool { + fn step(&mut self, input: &BufferQueue) -> bool { if self.char_ref_tokenizer.is_some() { return self.step_char_ref_tokenizer(input); } @@ -1206,7 +1206,7 @@ impl XmlTokenizer { } } - fn step_char_ref_tokenizer(&mut self, input: & BufferQueue) -> bool { + fn step_char_ref_tokenizer(&mut self, input: &BufferQueue) -> bool { let mut tok = self.char_ref_tokenizer.take().unwrap(); let outcome = tok.step(self, input); From a495a598b919797814c7b537ddc727b6230a48df Mon Sep 17 00:00:00 2001 From: Taym Date: Fri, 26 Jul 2024 14:35:04 +0200 Subject: [PATCH 5/5] Fix clippy warnings Signed-off-by: Taym --- html5ever/benches/html5ever.rs | 6 +++--- html5ever/examples/noop-tokenize.rs | 4 ++-- html5ever/examples/tokenize.rs | 4 ++-- html5ever/src/driver.rs | 4 ++-- html5ever/src/tokenizer/mod.rs | 10 +++++----- rcdom/tests/html-serializer.rs | 4 ++-- rcdom/tests/html-tokenizer.rs | 6 +++--- rcdom/tests/xml-tokenizer.rs | 6 +++--- xml5ever/benches/xml5ever.rs | 6 +++--- xml5ever/examples/simple_xml_tokenizer.rs | 4 ++-- xml5ever/examples/xml_tokenizer.rs | 4 ++-- xml5ever/src/driver.rs | 2 +- xml5ever/src/tokenizer/mod.rs | 6 +++--- 13 files changed, 33 insertions(+), 33 deletions(-) diff --git a/html5ever/benches/html5ever.rs b/html5ever/benches/html5ever.rs index f52cb574..5b5e1c9c 100644 --- a/html5ever/benches/html5ever.rs +++ b/html5ever/benches/html5ever.rs @@ -54,14 +54,14 @@ fn run_bench(c: &mut Criterion, name: &str) { c.bench_function(&test_name, move |b| { b.iter(|| { let mut tok = Tokenizer::new(Sink, Default::default()); - let mut buffer = BufferQueue::default(); + let buffer = BufferQueue::default(); // We are doing clone inside the bench function, this is not ideal, but possibly // necessary since our iterator consumes the underlying buffer. for buf in input.clone().into_iter() { buffer.push_back(buf); - let _ = tok.feed(&mut buffer); + let _ = tok.feed(&buffer); } - let _ = tok.feed(&mut buffer); + let _ = tok.feed(&buffer); tok.end(); }) }); diff --git a/html5ever/examples/noop-tokenize.rs b/html5ever/examples/noop-tokenize.rs index ade4571b..c5100563 100644 --- a/html5ever/examples/noop-tokenize.rs +++ b/html5ever/examples/noop-tokenize.rs @@ -36,11 +36,11 @@ fn main() { let mut chunk = ByteTendril::new(); io::stdin().read_to_tendril(&mut chunk).unwrap(); - let mut input = BufferQueue::default(); + let input = BufferQueue::default(); input.push_back(chunk.try_reinterpret().unwrap()); let mut tok = Tokenizer::new(Sink(Vec::new()), Default::default()); - let _ = tok.feed(&mut input); + let _ = tok.feed(&input); assert!(input.is_empty()); tok.end(); } diff --git a/html5ever/examples/tokenize.rs b/html5ever/examples/tokenize.rs index 04ade72e..f262de17 100644 --- a/html5ever/examples/tokenize.rs +++ b/html5ever/examples/tokenize.rs @@ -90,7 +90,7 @@ fn main() { let mut chunk = ByteTendril::new(); io::stdin().read_to_tendril(&mut chunk).unwrap(); - let mut input = BufferQueue::default(); + let input = BufferQueue::default(); input.push_back(chunk.try_reinterpret().unwrap()); let mut tok = Tokenizer::new( @@ -100,7 +100,7 @@ fn main() { ..Default::default() }, ); - let _ = tok.feed(&mut input); + let _ = tok.feed(&input); assert!(input.is_empty()); tok.end(); diff --git a/html5ever/src/driver.rs b/html5ever/src/driver.rs index 42426e7b..b178c469 100644 --- a/html5ever/src/driver.rs +++ b/html5ever/src/driver.rs @@ -106,7 +106,7 @@ impl TendrilSink for Parser { fn process(&mut self, t: StrTendril) { self.input_buffer.push_back(t); // FIXME: Properly support somehow. - while let TokenizerResult::Script(_) = self.tokenizer.feed(&mut self.input_buffer) {} + while let TokenizerResult::Script(_) = self.tokenizer.feed(&self.input_buffer) {} } // FIXME: Is it too noisy to report every character decoding error? @@ -118,7 +118,7 @@ impl TendrilSink for Parser { fn finish(mut self) -> Self::Output { // FIXME: Properly support somehow. - while let TokenizerResult::Script(_) = self.tokenizer.feed(&mut self.input_buffer) {} + while let TokenizerResult::Script(_) = self.tokenizer.feed(&self.input_buffer) {} assert!(self.input_buffer.is_empty()); self.tokenizer.end(); self.tokenizer.sink.sink.finish() diff --git a/html5ever/src/tokenizer/mod.rs b/html5ever/src/tokenizer/mod.rs index aca12738..5aa5ba55 100644 --- a/html5ever/src/tokenizer/mod.rs +++ b/html5ever/src/tokenizer/mod.rs @@ -1429,11 +1429,11 @@ impl Tokenizer { pub fn end(&mut self) { // Handle EOF in the char ref sub-tokenizer, if there is one. // Do this first because it might un-consume stuff. - let mut input = BufferQueue::default(); + let input = BufferQueue::default(); match self.char_ref_tokenizer.take() { None => (), Some(mut tok) => { - tok.end_of_file(self, &mut input); + tok.end_of_file(self, &input); self.process_char_ref(tok.get_result()); }, } @@ -1441,7 +1441,7 @@ impl Tokenizer { // Process all remaining buffered input. // If we're waiting for lookahead, we're not gonna get it. self.at_eof = true; - assert!(matches!(self.run(&mut input), TokenizerResult::Done)); + assert!(matches!(self.run(&input), TokenizerResult::Done)); assert!(input.is_empty()); loop { @@ -1665,10 +1665,10 @@ mod test { fn tokenize(input: Vec, opts: TokenizerOpts) -> Vec<(Token, u64)> { let sink = LinesMatch::new(); let mut tok = Tokenizer::new(sink, opts); - let mut buffer = BufferQueue::default(); + let buffer = BufferQueue::default(); for chunk in input.into_iter() { buffer.push_back(chunk); - let _ = tok.feed(&mut buffer); + let _ = tok.feed(&buffer); } tok.end(); tok.sink.lines diff --git a/rcdom/tests/html-serializer.rs b/rcdom/tests/html-serializer.rs index 3490a8cf..1439048e 100644 --- a/rcdom/tests/html-serializer.rs +++ b/rcdom/tests/html-serializer.rs @@ -66,13 +66,13 @@ impl Serialize for Tokens { } fn tokenize_and_serialize(input: StrTendril) -> StrTendril { - let mut input = { + let input = { let q = ::html5ever::tokenizer::BufferQueue::default(); q.push_front(input); q }; let mut tokenizer = Tokenizer::new(Tokens(vec![]), Default::default()); - let _ = tokenizer.feed(&mut input); + let _ = tokenizer.feed(&input); tokenizer.end(); let mut output = ::std::io::Cursor::new(vec![]); serialize( diff --git a/rcdom/tests/html-tokenizer.rs b/rcdom/tests/html-tokenizer.rs index 061effcb..f84e4f27 100644 --- a/rcdom/tests/html-tokenizer.rs +++ b/rcdom/tests/html-tokenizer.rs @@ -147,12 +147,12 @@ impl TokenSink for TokenLogger { fn tokenize(input: Vec, opts: TokenizerOpts) -> (Vec, Vec) { let sink = TokenLogger::new(opts.exact_errors); let mut tok = Tokenizer::new(sink, opts); - let mut buffer = BufferQueue::default(); + let buffer = BufferQueue::default(); for chunk in input.into_iter() { buffer.push_back(chunk); - let _ = tok.feed(&mut buffer); + let _ = tok.feed(&buffer); } - let _ = tok.feed(&mut buffer); + let _ = tok.feed(&buffer); tok.end(); tok.sink.get_tokens() } diff --git a/rcdom/tests/xml-tokenizer.rs b/rcdom/tests/xml-tokenizer.rs index 3370db87..a72cd791 100644 --- a/rcdom/tests/xml-tokenizer.rs +++ b/rcdom/tests/xml-tokenizer.rs @@ -129,13 +129,13 @@ impl TokenSink for TokenLogger { fn tokenize_xml(input: Vec, opts: XmlTokenizerOpts) -> Vec { let sink = TokenLogger::new(opts.exact_errors); let mut tok = XmlTokenizer::new(sink, opts); - let mut buf = BufferQueue::default(); + let buf = BufferQueue::default(); for chunk in input.into_iter() { buf.push_back(chunk); - tok.feed(&mut buf); + tok.feed(&buf); } - tok.feed(&mut buf); + tok.feed(&buf); tok.end(); tok.sink.get_tokens() } diff --git a/xml5ever/benches/xml5ever.rs b/xml5ever/benches/xml5ever.rs index 288613c3..14f3566c 100644 --- a/xml5ever/benches/xml5ever.rs +++ b/xml5ever/benches/xml5ever.rs @@ -53,14 +53,14 @@ fn run_bench(c: &mut Criterion, name: &str) { c.bench_function(&test_name, move |b| { b.iter(|| { let mut tok = XmlTokenizer::new(Sink, Default::default()); - let mut buffer = BufferQueue::default(); + let buffer = BufferQueue::default(); // We are doing clone inside the bench function, this is not ideal, but possibly // necessary since our iterator consumes the underlying buffer. for buf in input.clone().into_iter() { buffer.push_back(buf); - tok.feed(&mut buffer); + tok.feed(&buffer); } - tok.feed(&mut buffer); + tok.feed(&buffer); tok.end(); }) }); diff --git a/xml5ever/examples/simple_xml_tokenizer.rs b/xml5ever/examples/simple_xml_tokenizer.rs index 66651b68..002c236c 100644 --- a/xml5ever/examples/simple_xml_tokenizer.rs +++ b/xml5ever/examples/simple_xml_tokenizer.rs @@ -72,10 +72,10 @@ fn main() { // into StrTendril. // Load input into BufferQueue - let mut input_buffer = BufferQueue::default(); + let input_buffer = BufferQueue::default(); input_buffer.push_back(input.try_reinterpret().unwrap()); // Here we create and run tokenizer let mut tok = XmlTokenizer::new(sink, Default::default()); - tok.feed(&mut input_buffer); + tok.feed(&input_buffer); tok.end(); } diff --git a/xml5ever/examples/xml_tokenizer.rs b/xml5ever/examples/xml_tokenizer.rs index ff648597..63d27cb5 100644 --- a/xml5ever/examples/xml_tokenizer.rs +++ b/xml5ever/examples/xml_tokenizer.rs @@ -91,7 +91,7 @@ fn main() { let mut sink = TokenPrinter { in_char_run: false }; let mut input = ByteTendril::new(); io::stdin().read_to_tendril(&mut input).unwrap(); - let mut input_buffer = BufferQueue::default(); + let input_buffer = BufferQueue::default(); input_buffer.push_back(input.try_reinterpret().unwrap()); let mut tok = XmlTokenizer::new( @@ -102,7 +102,7 @@ fn main() { ..Default::default() }, ); - tok.feed(&mut input_buffer); + tok.feed(&input_buffer); tok.end(); sink.is_char(false); } diff --git a/xml5ever/src/driver.rs b/xml5ever/src/driver.rs index fd853433..7cb71c19 100644 --- a/xml5ever/src/driver.rs +++ b/xml5ever/src/driver.rs @@ -63,7 +63,7 @@ impl TendrilSink for XmlParser { fn process(&mut self, t: StrTendril) { self.input_buffer.push_back(t); - self.tokenizer.feed(&mut self.input_buffer); + self.tokenizer.feed(&self.input_buffer); } // FIXME: Is it too noisy to report every character decoding error? diff --git a/xml5ever/src/tokenizer/mod.rs b/xml5ever/src/tokenizer/mod.rs index 2640151f..fda51d57 100644 --- a/xml5ever/src/tokenizer/mod.rs +++ b/xml5ever/src/tokenizer/mod.rs @@ -1081,11 +1081,11 @@ impl XmlTokenizer { pub fn end(&mut self) { // Handle EOF in the char ref sub-tokenizer, if there is one. // Do this first because it might un-consume stuff. - let mut input = BufferQueue::default(); + let input = BufferQueue::default(); match self.char_ref_tokenizer.take() { None => (), Some(mut tok) => { - tok.end_of_file(self, &mut input); + tok.end_of_file(self, &input); self.process_char_ref(tok.get_result()); }, } @@ -1093,7 +1093,7 @@ impl XmlTokenizer { // Process all remaining buffered input. // If we're waiting for lookahead, we're not gonna get it. self.at_eof = true; - self.run(&mut input); + self.run(&input); while self.eof_step() { // loop