Skip to content

Commit 73e8b82

Browse files
committed
Optimise compiler directive identification
1 parent 331cff7 commit 73e8b82

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

core/src/defaults/lexer.rs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -982,17 +982,27 @@ fn consume_to_eof(input: &str, token_type: RawTokenType) -> (usize, RawTokenType
982982

983983
fn compiler_directive_type(input: &str, offset: usize) -> RawTokenType {
984984
let count = count_matching(input, offset, |b| b.is_ascii_alphabetic());
985-
// `to_lowercase` here is slow, but this code isn't hit very often.
986-
match input[offset..(offset + count)].to_lowercase().as_str() {
987-
"if" => TT::ConditionalDirective(CDK::If),
988-
"ifdef" => TT::ConditionalDirective(CDK::Ifdef),
989-
"ifndef" => TT::ConditionalDirective(CDK::Ifndef),
990-
"ifopt" => TT::ConditionalDirective(CDK::Ifopt),
991-
"elseif" => TT::ConditionalDirective(CDK::Elseif),
992-
"else" => TT::ConditionalDirective(CDK::Else),
993-
"ifend" => TT::ConditionalDirective(CDK::Ifend),
994-
"endif" => TT::ConditionalDirective(CDK::Endif),
995-
_ => TT::CompilerDirective,
985+
986+
let directive = &input[offset..(offset + count)];
987+
988+
if directive.eq_ignore_ascii_case("if") {
989+
TT::ConditionalDirective(CDK::If)
990+
} else if directive.eq_ignore_ascii_case("ifdef") {
991+
TT::ConditionalDirective(CDK::Ifdef)
992+
} else if directive.eq_ignore_ascii_case("ifndef") {
993+
TT::ConditionalDirective(CDK::Ifndef)
994+
} else if directive.eq_ignore_ascii_case("ifopt") {
995+
TT::ConditionalDirective(CDK::Ifopt)
996+
} else if directive.eq_ignore_ascii_case("elseif") {
997+
TT::ConditionalDirective(CDK::Elseif)
998+
} else if directive.eq_ignore_ascii_case("else") {
999+
TT::ConditionalDirective(CDK::Else)
1000+
} else if directive.eq_ignore_ascii_case("ifend") {
1001+
TT::ConditionalDirective(CDK::Ifend)
1002+
} else if directive.eq_ignore_ascii_case("endif") {
1003+
TT::ConditionalDirective(CDK::Endif)
1004+
} else {
1005+
TT::CompilerDirective
9961006
}
9971007
}
9981008

0 commit comments

Comments
 (0)