-
antti@apple.com authored
Eliminate m_tagHistory pointer from CSSSelector Reviewed by Darin Adler. Keep the component selectors in the array in CSSSelectorList instead of maintaining a linked list between them. This allows eliminating m_tagHistory pointer, shrinking CSSSelector by 25% (selection performance seems to improve some too due to better locality). * WebCore.xcodeproj/project.pbxproj: Make CSSSelector.h a private header. * css/CSSGrammar.y: Use CSSParserSelector during parsing to keep the tag history in a linked list. This is flattened to an array after parsing. Use accessors for setting selector values. Use OwnPtr in selector vector. * css/CSSPageRule.cpp: (WebCore::CSSPageRule::CSSPageRule): * css/CSSPageRule.h: (WebCore::CSSPageRule::create): Simplify. * css/CSSParser.cpp: (WebCore::CSSParser::~CSSParser): (WebCore::CSSParser::createFloatingSelector): (WebCore::CSSParser::sinkFloatingSelector): (WebCore::CSSParser::createStyleRule): (WebCore::CSSParser::updateSpecifiersWithElementName): (WebCore::CSSParser::createPageRule): * css/CSSParser.h: (WebCore::CSSParser::reusableSelectorVector): CSSSelector -> CSSParserSelector. Use OwnPtr in selector vector. * css/CSSParserValues.cpp: (WebCore::CSSParserSelector::CSSParserSelector): (WebCore::CSSParserSelector::~CSSParserSelector): * css/CSSParserValues.h: (WebCore::CSSParserSelector::releaseSelector): (WebCore::CSSParserSelector::setTag): (WebCore::CSSParserSelector::setValue): (WebCore::CSSParserSelector::setAttribute): (WebCore::CSSParserSelector::setArgument): (WebCore::CSSParserSelector::setSimpleSelector): (WebCore::CSSParserSelector::setMatch): (WebCore::CSSParserSelector::setRelation): (WebCore::CSSParserSelector::setForPage): (WebCore::CSSParserSelector::pseudoType): (WebCore::CSSParserSelector::isUnknownPseudoElement): (WebCore::CSSParserSelector::isSimple): (WebCore::CSSParserSelector::tagHistory): (WebCore::CSSParserSelector::setTagHistory): Linked list used during parsing. Avoid recursive destruction. * css/CSSSelector.cpp: (WebCore::CSSSelector::extractPseudoType): (WebCore::CSSSelector::operator==): (WebCore::CSSSelector::selectorText): (WebCore::CSSSelector::setSimpleSelector): * css/CSSSelector.h: (WebCore::CSSSelector::CSSSelector): (WebCore::CSSSelector::~CSSSelector): (WebCore::CSSSelector::tagHistory): (WebCore::CSSSelector::tag): (WebCore::CSSSelector::value): (WebCore::CSSSelector::setTag): (WebCore::CSSSelector::isLastInTagHistory): (WebCore::CSSSelector::setNotLastInTagHistory): (WebCore::CSSSelector::RareData::RareData): (WebCore::CSSSelector::RareData::~RareData): (WebCore::CSSSelector::createRareData): (WebCore::CSSSelector::setValue): Remove m_tagHistory. Keep m_value in the union with the rare data pointer instead. Make m_value and m_tag private, implement accessors. Add a new bit to indicate end of the tag history (multipart selector). Eliminate complex destruction. Selectors are now deleted as an array or by a CSSParserSelector chain. * css/CSSSelectorList.cpp: (WebCore::CSSSelectorList::adoptSelectorVector): Flatten everything to an array. (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()): * css/CSSSelectorList.h: (WebCore::CSSSelectorList::hasOneSelector): (WebCore::CSSSelectorList::next): Skip over the subparts of multipart selectors to find the next selector. * css/CSSStyleRule.h: (WebCore::CSSStyleRule::adoptSelectorVector): CSSSelector -> CSSParserSelector. * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): (WebCore::CSSRuleSet::addRule): (WebCore::collectIdsAndSiblingRulesFromList): (WebCore::CSSStyleSelector::matchPageRulesForList): * dom/Node.cpp: (WebCore::Node::querySelector): * dom/SelectorNodeList.cpp: (WebCore::createSelectorNodeList): Use accessors. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76648 268f45cc-cd09-0410-ab3c-d52691b4dbfc
3c931302