From ae6693cad024d854f9d975cd32c54f95fffb55ca Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 9 Nov 2016 11:43:19 +0100 Subject: [PATCH 1/2] Fix Parser::process --- src/driver.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver.rs b/src/driver.rs index 8dac7e0c..dfcb633c 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -85,7 +85,7 @@ pub struct Parser where Sink: TreeSink { impl TendrilSink for Parser { fn process(&mut self, t: StrTendril) { - self.input_buffer.push_front(t); + self.input_buffer.push_back(t); let _ = self.tokenizer.feed(&mut self.input_buffer); } From 73294d45420a974ecfea065ccfe521f573de83fd Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Wed, 9 Nov 2016 09:40:11 +0100 Subject: [PATCH 2/2] Make TokenizerResult as #[must_use] --- Cargo.toml | 2 +- src/driver.rs | 9 ++++++--- src/tokenizer/mod.rs | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5d9aea22..6bc33f78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "html5ever" -version = "0.10.0" +version = "0.10.1" authors = [ "The html5ever Project Developers" ] license = "MIT / Apache-2.0" repository = "https://github.com/servo/html5ever" diff --git a/src/driver.rs b/src/driver.rs index dfcb633c..2d26ea62 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -9,7 +9,7 @@ //! High-level interface to the parser. -use tokenizer::{Attribute, Tokenizer, TokenizerOpts}; +use tokenizer::{Attribute, Tokenizer, TokenizerOpts, TokenizerResult}; use tokenizer::buffer_queue::BufferQueue; use tree_builder::{TreeBuilderOpts, TreeBuilder, TreeSink}; @@ -86,7 +86,8 @@ pub struct Parser where Sink: TreeSink { impl TendrilSink for Parser { fn process(&mut self, t: StrTendril) { self.input_buffer.push_back(t); - let _ = self.tokenizer.feed(&mut self.input_buffer); + // FIXME: Properly support somehow. + while let TokenizerResult::Script(_) = self.tokenizer.feed(&mut self.input_buffer) {} } // FIXME: Is it too noisy to report every character decoding error? @@ -97,7 +98,9 @@ impl TendrilSink for Parser { type Output = Sink::Output; fn finish(mut self) -> Self::Output { - self.tokenizer.feed(&mut self.input_buffer); + // FIXME: Properly support somehow. + while let TokenizerResult::Script(_) = self.tokenizer.feed(&mut self.input_buffer) {} + assert!(self.input_buffer.is_empty()); self.tokenizer.end(); self.tokenizer.unwrap().unwrap().finish() } diff --git a/src/tokenizer/mod.rs b/src/tokenizer/mod.rs index 11f8a144..bcd6d601 100644 --- a/src/tokenizer/mod.rs +++ b/src/tokenizer/mod.rs @@ -49,6 +49,7 @@ pub enum ProcessResult { Script(Handle) } +#[must_use] pub enum TokenizerResult { Done, Script(Handle) @@ -1287,7 +1288,7 @@ impl Tokenizer { // 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); + assert!(matches!(self.run(&mut input), TokenizerResult::Done)); assert!(input.is_empty()); loop {