Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f6fb8cf9a00ca7536822fb21e092dc538244a92a
      
https://github.com/WebKit/WebKit/commit/f6fb8cf9a00ca7536822fb21e092dc538244a92a
  Author: Taher Ali <[email protected]>
  Date:   2026-05-13 (Wed, 13 May 2026)

  Changed paths:
    M Source/WebCore/css/SelectorChecker.cpp
    M Source/WebCore/css/SelectorChecker.h
    M Source/WebCore/cssjit/SelectorCompiler.cpp
    M Source/WebCore/cssjit/SelectorCompiler.h
    M Source/WebCore/page/MemoryRelease.cpp

  Log Message:
  -----------
  [CSS JIT] Compile :has() argument selectors (reland)
https://bugs.webkit.org/show_bug.cgi?id=314405
rdar://176553021

Reviewed by Antti Koivisto

When :has() is evaluated, the argument selector (e.g., .active in :has(> 
.active))
is checked per-element via the SelectorChecker interpreter. This patch 
JIT-compiles
the argument selector so each per-element check runs as native code.

Argument selectors with adjacent/sibling combinators (+, ~) or functional
pseudo-classes (:not, :is) fall back to the interpreter because the CSS JIT
doesn't generate all the style relations needed for :has() invalidation with
sibling relationships. This can be addressed in a follow-up.

* Source/WebCore/css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne const):
(WebCore::compiledHasArgumentSelectorsMap):
(WebCore::SelectorChecker::clearCompiledHasArgumentSelectors):
(WebCore::canJITCompileHasArgument):
(WebCore::SelectorChecker::matchHasPseudoClass const):
(WebCore::SelectorChecker::matchHasArgumentSelector const):
* Source/WebCore/css/SelectorChecker.h:
* Source/WebCore/cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::compileSelector):
(WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
(WebCore::SelectorCompiler::constructFragmentsInternal):
(WebCore::SelectorCompiler::constructFragments):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesHasScope):
* Source/WebCore/cssjit/SelectorCompiler.h:
* Source/WebCore/page/MemoryRelease.cpp:
(WebCore::releaseNoncriticalMemory):

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



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

Reply via email to