Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: be1f27dcb8c0a43fe001fe2836e344c78bda3d06
https://github.com/WebKit/WebKit/commit/be1f27dcb8c0a43fe001fe2836e344c78bda3d06
Author: Taher Ali <[email protected]>
Date: 2026-04-29 (Wed, 29 Apr 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
https://bugs.webkit.org/show_bug.cgi?id=311203
rdar://problem/173791568
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/312288@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications