Forráskód Böngészése

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.
Andreas Kling 3 éve
szülő
commit
3d9f2e2f94
1 módosított fájl, 5 hozzáadás és 2 törlés
  1. 5 2
      Userland/Libraries/LibJS/Lexer.cpp

+ 5 - 2
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();
 }