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