From 5ccddd24004fc9d350b7033a6f17f53b0c2f5172 Mon Sep 17 00:00:00 2001 From: sssooonnnggg Date: Wed, 3 Jan 2024 19:26:29 +0800 Subject: [PATCH] perf: use str instead of Cow to reduse Token size --- pest/src/iterators/pairs.rs | 24 ++++++++++++------------ pest/src/iterators/queueable_token.rs | 4 +--- pest/src/parser_state.rs | 4 ++-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/pest/src/iterators/pairs.rs b/pest/src/iterators/pairs.rs index 805b5a34..ed6a9a13 100644 --- a/pest/src/iterators/pairs.rs +++ b/pest/src/iterators/pairs.rs @@ -227,9 +227,9 @@ impl<'i, R: RuleType> Pairs<'i, R> { /// state: Box>, /// ) -> ParseResult>> { /// expr(state, Rule::mul, "*") - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("mul"))) + /// .and_then(|state| state.tag_node("mul")) /// .or_else(|state| expr(state, Rule::add, "+")) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("add"))) + /// .and_then(|state| state.tag_node("add")) /// } /// fn expr<'a>( /// state: Box>, @@ -239,10 +239,10 @@ impl<'i, R: RuleType> Pairs<'i, R> { /// state.rule(r, |state| { /// state.sequence(|state| { /// number(state) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("lhs"))) + /// .and_then(|state| state.tag_node("lhs")) /// .and_then(|state| state.match_string(o)) /// .and_then(number) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("rhs"))) + /// .and_then(|state| state.tag_node("rhs")) /// }) /// }) /// } @@ -278,9 +278,9 @@ impl<'i, R: RuleType> Pairs<'i, R> { /// state: Box>, /// ) -> ParseResult>> { /// expr(state, Rule::mul, "*") - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("mul"))) + /// .and_then(|state| state.tag_node("mul")) /// .or_else(|state| expr(state, Rule::add, "+")) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("add"))) + /// .and_then(|state| state.tag_node("add")) /// } /// fn expr<'a>( /// state: Box>, @@ -290,10 +290,10 @@ impl<'i, R: RuleType> Pairs<'i, R> { /// state.rule(r, |state| { /// state.sequence(|state| { /// number(state) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("lhs"))) + /// .and_then(|state| state.tag_node("lhs")) /// .and_then(|state| state.match_string(o)) /// .and_then(number) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("rhs"))) + /// .and_then(|state| state.tag_node("rhs")) /// }) /// }) /// } @@ -676,9 +676,9 @@ mod tests { state: Box>, ) -> ParseResult>> { expr(state, Rule::mul, "*") - .and_then(|state| state.tag_node(alloc::borrow::Cow::Borrowed("mul"))) + .and_then(|state| state.tag_node("mul")) .or_else(|state| expr(state, Rule::add, "+")) - .and_then(|state| state.tag_node(alloc::borrow::Cow::Borrowed("add"))) + .and_then(|state| state.tag_node("add")) } fn expr<'a>( state: Box>, @@ -688,10 +688,10 @@ mod tests { state.rule(r, |state| { state.sequence(|state| { number(state) - .and_then(|state| state.tag_node(alloc::borrow::Cow::Borrowed("lhs"))) + .and_then(|state| state.tag_node("lhs")) .and_then(|state| state.match_string(o)) .and_then(number) - .and_then(|state| state.tag_node(alloc::borrow::Cow::Borrowed("rhs"))) + .and_then(|state| state.tag_node("rhs")) }) }) } diff --git a/pest/src/iterators/queueable_token.rs b/pest/src/iterators/queueable_token.rs index 67426092..530742b5 100644 --- a/pest/src/iterators/queueable_token.rs +++ b/pest/src/iterators/queueable_token.rs @@ -7,8 +7,6 @@ // option. All files in the project carrying such notice may not be copied, // modified, or distributed except according to those terms. -use alloc::borrow::Cow; - // This structure serves to improve performance over Token objects in two ways: // // * it is smaller than a Token, leading to both less memory use when stored in the queue but also @@ -24,7 +22,7 @@ pub enum QueueableToken<'i, R> { End { start_token_index: usize, rule: R, - tag: Option>, + tag: Option<&'i str>, input_pos: usize, }, } diff --git a/pest/src/parser_state.rs b/pest/src/parser_state.rs index 58c9ecb1..bd0553c5 100644 --- a/pest/src/parser_state.rs +++ b/pest/src/parser_state.rs @@ -392,7 +392,7 @@ impl<'i, R: RuleType> ParserState<'i, R> { /// character(state) /// .and_then(|state| character(state)) /// .and_then(|state| character(state)) - /// .and_then(|state| state.tag_node(std::borrow::Cow::Borrowed("c"))) + /// .and_then(|state| state.tag_node("c")) /// .and_then(|state| character(state)) /// }) /// } @@ -407,7 +407,7 @@ impl<'i, R: RuleType> ParserState<'i, R> { /// assert_eq!(find[0].as_str(), "c") /// ``` #[inline] - pub fn tag_node(mut self: Box, tag: Cow<'i, str>) -> ParseResult> { + pub fn tag_node(mut self: Box, tag: &'i str) -> ParseResult> { if let Some(QueueableToken::End { tag: old, .. }) = self.queue.last_mut() { *old = Some(tag) }