Skip to content

Commit daaa60d

Browse files
committed
parser: Use a lookup table for Delimiter::from_byte.
It's faster.
1 parent 9c53e4f commit daaa60d

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

src/parser.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -314,16 +314,19 @@ impl Delimiters {
314314

315315
#[inline]
316316
fn from_byte(byte: Option<u8>) -> Delimiters {
317-
match byte {
318-
Some(b';') => Delimiter::Semicolon,
319-
Some(b'!') => Delimiter::Bang,
320-
Some(b',') => Delimiter::Comma,
321-
Some(b'{') => Delimiter::CurlyBracketBlock,
322-
Some(b'}') => ClosingDelimiter::CloseCurlyBracket,
323-
Some(b']') => ClosingDelimiter::CloseSquareBracket,
324-
Some(b')') => ClosingDelimiter::CloseParenthesis,
325-
_ => Delimiter::None,
326-
}
317+
let Some(b) = byte else { return Delimiter::None };
318+
const TABLE: [Delimiters; 255] = {
319+
let mut table = [Delimiter::None; 255];
320+
table[b';' as usize] = Delimiter::Semicolon;
321+
table[b'!' as usize] = Delimiter::Bang;
322+
table[b',' as usize] = Delimiter::Comma;
323+
table[b'{' as usize] = Delimiter::CurlyBracketBlock;
324+
table[b'}' as usize] = ClosingDelimiter::CloseCurlyBracket;
325+
table[b']' as usize] = ClosingDelimiter::CloseSquareBracket;
326+
table[b')' as usize] = ClosingDelimiter::CloseParenthesis;
327+
table
328+
};
329+
TABLE[b as usize]
327330
}
328331
}
329332

0 commit comments

Comments
 (0)