From 3d9f2e2f94074e1705b5fe3a5fefa95ee669fdb5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 13 Feb 2022 12:44:57 +0100 Subject: [PATCH] LibJS: Add ASCII fast path to Lexer::current_code_point() If the current character under the lexer cursor is ASCII, we don't need to create a Utf8View to consume a full code point. This gives a ~3% speedup when parsing the largest Discord JS file. --- Userland/Libraries/LibJS/Lexer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibJS/Lexer.cpp b/Userland/Libraries/LibJS/Lexer.cpp index 685e915d2b..43a3952a56 100644 --- a/Userland/Libraries/LibJS/Lexer.cpp +++ b/Userland/Libraries/LibJS/Lexer.cpp @@ -363,9 +363,12 @@ u32 Lexer::current_code_point() const static constexpr const u32 REPLACEMENT_CHARACTER = 0xFFFD; if (m_position == 0) return REPLACEMENT_CHARACTER; - Utf8View utf_8_view { m_source.substring_view(m_position - 1) }; - if (utf_8_view.is_empty()) + auto substring = m_source.substring_view(m_position - 1); + if (substring.is_empty()) return REPLACEMENT_CHARACTER; + if (is_ascii(substring[0])) + return substring[0]; + Utf8View utf_8_view { substring }; return *utf_8_view.begin(); }