Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 2a8223d802c84d515fdb50d7e2a65fe5f05505a1
      
https://github.com/WebKit/WebKit/commit/2a8223d802c84d515fdb50d7e2a65fe5f05505a1
  Author: Yusuke Suzuki <[email protected]>
  Date:   2026-06-08 (Mon, 08 Jun 2026)

  Changed paths:
    A JSTests/stress/yarr-auto-possessification.js
    M Source/JavaScriptCore/yarr/YarrJIT.cpp
    M Source/JavaScriptCore/yarr/YarrPattern.cpp
    M Source/JavaScriptCore/yarr/YarrPattern.h

  Log Message:
  -----------
  [YARR] Add auto-possession optimization
https://bugs.webkit.org/show_bug.cgi?id=316491
rdar://178912776

Reviewed by Yijia Huang.

This is an initial patch adding auto-possession optimization to YarrJIT.
This optimization adds possessive flag to Terms. This is completely
optional and implementation can leverage this additional information
just if they want, but it is totally fine to ignore this flag too.

When you have a code like, /a*b/, and `a` and `b` are exclusive each other,
then you can find that backtracking `a` part is meaningless since
once-`a`-matched character never matches against `b`.

We detect this pattern and annotate Term with possessive flag. Then
YarrJIT can skip backtracking when this flag is set.

Test: JSTests/stress/yarr-auto-possessification.js

* JSTests/stress/yarr-auto-possessification.js: Added.
(shouldBe):
(test):
* Source/JavaScriptCore/yarr/YarrJIT.cpp:
* Source/JavaScriptCore/yarr/YarrPattern.cpp:
(JSC::Yarr::YarrPatternConstructor::optimizePossessiveQuantifiers):
(JSC::Yarr::YarrPattern::compile):
(JSC::Yarr::PatternTerm::dumpQuantifier):
* Source/JavaScriptCore/yarr/YarrPattern.h:
(JSC::Yarr::PatternTerm::capture const):
(JSC::Yarr::PatternTerm::possessive const):
(JSC::Yarr::PatternTerm::ignoreCase const):
(JSC::Yarr::PatternTerm::multiline const):
(JSC::Yarr::PatternTerm::dotAll const):
(JSC::Yarr::PatternTerm::containsAnyCaptures const):
(JSC::Yarr::PatternTerm::capture): Deleted.
(JSC::Yarr::PatternTerm::ignoreCase): Deleted.
(JSC::Yarr::PatternTerm::multiline): Deleted.
(JSC::Yarr::PatternTerm::dotAll): Deleted.
(JSC::Yarr::PatternTerm::containsAnyCaptures): Deleted.

Canonical link: https://commits.webkit.org/314736@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to