[webkit-changes] [WebKit/WebKit] bfa1b0: CSSSelector: distinguish between list of possibly-...
Kiet Ho
noreply at github.com
Thu Sep 12 02:10:28 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: bfa1b0b5543cf56d2db6e950c3f3aea114da8353
https://github.com/WebKit/WebKit/commit/bfa1b0b5543cf56d2db6e950c3f3aea114da8353
Author: Kiet Ho <kiet.ho at apple.com>
Date: 2024-09-12 (Thu, 12 Sep 2024)
Changed paths:
M Source/WebCore/css/CSSSelector.cpp
M Source/WebCore/css/CSSSelector.h
M Source/WebCore/css/SelectorChecker.cpp
M Source/WebCore/css/SelectorCheckerTestFunctions.h
M Source/WebCore/css/parser/CSSSelectorParser.cpp
M Source/WebCore/css/parser/MutableCSSSelector.cpp
M Source/WebCore/css/parser/MutableCSSSelector.h
M Source/WebCore/cssjit/SelectorCompiler.cpp
M Source/WebCore/style/RuleSet.cpp
Log Message:
-----------
CSSSelector: distinguish between list of possibly-quoted-IDs and list of not-quoted-IDs
rdar://135608738
https://bugs.webkit.org/show_bug.cgi?id=279394
Reviewed by Antti Koivisto.
Some CSS pseudo-classes and pseudo-elements take a list of identifiers as arguments
(e.g: :active-view-transition-type(foo, bar, baz)). :lang() also takes a list of
identifiers, but they can optionally be quoted (e.g: :lang("en-US")), and we need to
remember if an argument is quoted or not for serialization purpose.
Currently, we store those identifiers in CSSSelector::argumentList, which is a vector of
PossiblyQuotedIdentifier (struct that stores the identifier string and whether it's quoted
or not). However, for pseudo-classes/elements that don't accept quoted identifiers,
at parsing time, we still have to convert bare identifiers into PossiblyQuotedIdentifier
for storage in CSSSeletor, and perform the reverse conversion at matching time.
Considering only :lang accepts quoted identifiers, we're doing this round-trip conversion
at a lot of places.
This commit changes argumentList to be a vector of bare identifiers only, and adds a new
vector of PossiblyQuotedIdentifier for :lang arguments. Only :lang code will use the
new vector, while other pseudo-classes/elements code will use the existing vector,
while not having to convert to and from PossiblyQuotedIdentifier.
This commit also adds a bunch of ASSERTs to ensure CSSSelector::argumentList is not null
before using it.
* Source/WebCore/css/CSSSelector.cpp:
(WebCore::simpleSelectorSpecificity):
(WebCore::appendCommaSeparatedIdentifierList):
(WebCore::CSSSelector::selectorText const):
(WebCore::CSSSelector::setArgumentList):
(WebCore::CSSSelector::setLangList):
(WebCore::CSSSelector::RareData::RareData):
* Source/WebCore/css/CSSSelector.h:
(WebCore::CSSSelector::argumentList const):
(WebCore::CSSSelector::langList const):
* Source/WebCore/css/SelectorChecker.cpp:
(WebCore::SelectorChecker::checkOne const):
* Source/WebCore/css/SelectorCheckerTestFunctions.h:
(WebCore::matchesLangPseudoClass):
(WebCore::matchesActiveViewTransitionTypePseudoClass):
* Source/WebCore/css/parser/CSSSelectorParser.cpp:
(WebCore::consumeCommaSeparatedCustomIdentList):
(WebCore::CSSSelectorParser::consumePseudo):
* Source/WebCore/css/parser/MutableCSSSelector.cpp:
(WebCore::MutableCSSSelector::setArgumentList):
(WebCore::MutableCSSSelector::setLangList):
* Source/WebCore/css/parser/MutableCSSSelector.h:
* Source/WebCore/cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::JSC_DEFINE_NOEXCEPT_JIT_OPERATION):
(WebCore::SelectorCompiler::addPseudoClassType):
* Source/WebCore/style/RuleSet.cpp:
(WebCore::Style::RuleSet::addRule):
Canonical link: https://commits.webkit.org/283545@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list