Skip to content

Commit c5171a2

Browse files
committed
refactor(parser): Move keyword_ignoring to keyword module
The subtle detail in the implementation is that keyword_ignoring will now _not_ bypass the any_token parser. As such, it does not take a shortcut, but also the keyword is technically read into memory, and later discarded for convenience (not for memory micro-optimization).
1 parent 81bf60a commit c5171a2

7 files changed

Lines changed: 16 additions & 15 deletions

File tree

rusty_parser/src/built_ins/open.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use rusty_pc::*;
44

55
use crate::input::StringView;
66
use crate::pc_specific::*;
7-
use crate::tokens::{equal_sign_ws, keyword_ignoring, whitespace_ignoring};
7+
use crate::tokens::{equal_sign_ws, whitespace_ignoring};
88
use crate::{BuiltInSub, ParserError, *};
99
pub fn parse() -> impl Parser<StringView, Output = Statement, Error = ParserError> {
1010
seq6(

rusty_parser/src/core/resume.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::core::name::bare_name_p;
44
use crate::core::statement_separator::peek_eof_or_statement_separator;
55
use crate::input::StringView;
66
use crate::pc_specific::*;
7-
use crate::tokens::{keyword_ignoring, whitespace_ignoring};
7+
use crate::tokens::whitespace_ignoring;
88
use crate::{Keyword, ParserError, ResumeOption, Statement};
99

1010
// RESUME

rusty_parser/src/core/select_case.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::core::statement_separator::comments_in_between_keywords;
66
use crate::core::statements::zero_or_more_statements;
77
use crate::input::StringView;
88
use crate::pc_specific::*;
9-
use crate::tokens::{keyword_ignoring, whitespace_ignoring};
9+
use crate::tokens::whitespace_ignoring;
1010
use crate::{ParserError, *};
1111

1212
// SELECT CASE expr ' comment
@@ -115,7 +115,7 @@ mod case_expression_parser {
115115
use crate::core::opt_second_expression::opt_second_expression_after_keyword;
116116
use crate::input::StringView;
117117
use crate::pc_specific::*;
118-
use crate::tokens::{TokenType, any_token, keyword_ignoring, whitespace_ignoring};
118+
use crate::tokens::{TokenType, any_token, whitespace_ignoring};
119119
use crate::{CaseExpression, ExpressionTrait, Keyword, Operator, ParserError};
120120

121121
pub fn parser() -> impl Parser<StringView, Output = CaseExpression, Error = ParserError> {

rusty_parser/src/core/statement.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ mod system {
392392
use crate::core::statement_separator::peek_eof_or_statement_separator;
393393
use crate::input::StringView;
394394
use crate::pc_specific::*;
395-
use crate::tokens::{keyword_ignoring, whitespace_ignoring};
395+
use crate::tokens::whitespace_ignoring;
396396
use crate::{Keyword, ParserError, Statement};
397397

398398
pub fn parse_system_p() -> impl Parser<StringView, Output = Statement, Error = ParserError> {

rusty_parser/src/core/var_name.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use rusty_pc::*;
44
use crate::core::name::{bare_name_without_dots, name_p};
55
use crate::input::StringView;
66
use crate::pc_specific::*;
7-
use crate::tokens::{keyword_ignoring, whitespace_ignoring};
7+
use crate::tokens::whitespace_ignoring;
88
use crate::{ParserError, *};
99

1010
/// A variable name with a type.

rusty_parser/src/pc_specific/keyword.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use rusty_pc::and::IgnoringBothCombiner;
44
use rusty_pc::*;
55

66
use crate::input::StringView;
7-
use crate::tokens::{TokenType, any_token, keyword_ignoring, whitespace_ignoring};
7+
use crate::pc_specific::WithExpected;
8+
use crate::tokens::{TokenMatcher, TokenType, any_token, whitespace_ignoring};
89
use crate::{Keyword, ParserError};
910

1011
// TODO review usages of TokenType::Keyword
@@ -38,6 +39,13 @@ pub fn keyword_p(
3839
KeywordParser::new(any_token(), keywords, eof_is_fatal)
3940
}
4041

42+
pub fn keyword_ignoring(k: Keyword) -> impl Parser<StringView, Output = (), Error = ParserError> {
43+
any_token()
44+
.filter(move |t| k.matches_token(t))
45+
.map_to_unit()
46+
.with_expected_message(format!("Expected: {}", k))
47+
}
48+
4149
/// Parses the given keyword, followed by mandatory whitespace.
4250
pub fn keyword_ws_p(k: Keyword) -> impl Parser<StringView, Output = (), Error = ParserError> {
4351
keyword_ignoring(k).and(whitespace_ignoring().to_fatal(), IgnoringBothCombiner)

rusty_parser/src/tokens/any_token.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use rusty_pc::*;
55

66
use crate::input::StringView;
77
use crate::pc_specific::WithExpected;
8+
use crate::tokens::TokenType;
89
use crate::tokens::any_symbol::any_symbol;
9-
use crate::tokens::{TokenMatcher, TokenType};
1010
use crate::{Keyword, ParserError};
1111

1212
/// Parses any token.
@@ -133,13 +133,6 @@ fn any_keyword() -> impl Parser<StringView, Output = Token, Error = ParserError>
133133
.to_token(TokenType::Keyword)
134134
}
135135

136-
pub fn keyword_ignoring(k: Keyword) -> impl Parser<StringView, Output = (), Error = ParserError> {
137-
any_token()
138-
.filter(move |t| k.matches_token(t))
139-
.map_to_unit()
140-
.with_expected_message(format!("Expected: {}", k))
141-
}
142-
143136
fn ensure_no_illegal_char_after_keyword()
144137
-> impl Parser<StringView, Output = (), Error = ParserError> {
145138
peek_p().to_option().and_then(|opt_ch| match opt_ch {

0 commit comments

Comments
 (0)