Modified: trunk/Source/WebCore/ChangeLog (143151 => 143152)
--- trunk/Source/WebCore/ChangeLog 2013-02-18 06:38:12 UTC (rev 143151)
+++ trunk/Source/WebCore/ChangeLog 2013-02-18 06:44:13 UTC (rev 143152)
@@ -1,5 +1,26 @@
2013-02-17 Dimitri Glazkov <[email protected]>
+ Stop passing around SelectorChecker in SelectorQuery, now that it's stack-allocated.
+ https://bugs.webkit.org/show_bug.cgi?id=110038
+
+ Reviewed by Andreas Kling.
+
+ No functional changes, covered by existing tests.
+
+ * dom/SelectorQuery.cpp:
+ (WebCore::SelectorDataList::matches): Moved instantiation of SelectorChecker in here.
+ (WebCore::SelectorDataList::queryAll): Got rid of unneeded SelectorChecker arg.
+ (WebCore::SelectorDataList::queryFirst): Ditto.
+ (WebCore::SelectorDataList::execute): Moved instantiation of SelectorChecker in here.
+ (WebCore::SelectorQuery::matches): Removed instantiation of SelectorChecker here.
+ (WebCore::SelectorQuery::queryAll): Ditto.
+ (WebCore::SelectorQuery::queryFirst): Ditto.
+ * dom/SelectorQuery.h:
+ (WebCore): Tweaked headers to make SelectorChecker just an implementation detail.
+ (SelectorDataList): Tweaked decls to remove SelectorChecker args.
+
+2013-02-17 Dimitri Glazkov <[email protected]>
+
Stop passing around SelectorChecker in ContentSelectorQuery.
https://bugs.webkit.org/show_bug.cgi?id=110041
Modified: trunk/Source/WebCore/dom/SelectorQuery.cpp (143151 => 143152)
--- trunk/Source/WebCore/dom/SelectorQuery.cpp 2013-02-18 06:38:12 UTC (rev 143151)
+++ trunk/Source/WebCore/dom/SelectorQuery.cpp 2013-02-18 06:44:13 UTC (rev 143152)
@@ -29,9 +29,9 @@
#include "CSSParser.h"
#include "CSSSelectorList.h"
#include "Document.h"
+#include "SelectorChecker.h"
#include "StaticNodeList.h"
#include "StyledElement.h"
-#include <wtf/HashMap.h>
namespace WebCore {
@@ -48,10 +48,11 @@
m_selectors.uncheckedAppend(SelectorData(selector, SelectorChecker::isFastCheckableSelector(selector)));
}
-bool SelectorDataList::matches(const SelectorChecker& selectorChecker, Element* targetElement) const
+bool SelectorDataList::matches(Element* targetElement) const
{
ASSERT(targetElement);
+ SelectorChecker selectorChecker(targetElement->document(), SelectorChecker::ResolvingStyle);
unsigned selectorCount = m_selectors.size();
for (unsigned i = 0; i < selectorCount; ++i) {
if (selectorChecker.matches(m_selectors[i].selector, targetElement, m_selectors[i].isFastCheckable))
@@ -61,17 +62,17 @@
return false;
}
-PassRefPtr<NodeList> SelectorDataList::queryAll(const SelectorChecker& selectorChecker, Node* rootNode) const
+PassRefPtr<NodeList> SelectorDataList::queryAll(Node* rootNode) const
{
Vector<RefPtr<Node> > result;
- execute<false>(selectorChecker, rootNode, result);
+ execute<false>(rootNode, result);
return StaticNodeList::adopt(result);
}
-PassRefPtr<Element> SelectorDataList::queryFirst(const SelectorChecker& selectorChecker, Node* rootNode) const
+PassRefPtr<Element> SelectorDataList::queryFirst(Node* rootNode) const
{
Vector<RefPtr<Node> > result;
- execute<true>(selectorChecker, rootNode, result);
+ execute<true>(rootNode, result);
if (result.isEmpty())
return 0;
ASSERT(result.size() == 1);
@@ -103,8 +104,10 @@
}
template <bool firstMatchOnly>
-void SelectorDataList::execute(const SelectorChecker& selectorChecker, Node* rootNode, Vector<RefPtr<Node> >& matchedElements) const
+void SelectorDataList::execute(Node* rootNode, Vector<RefPtr<Node> >& matchedElements) const
{
+ SelectorChecker selectorChecker(rootNode->document(), SelectorChecker::QueryingRules);
+
if (canUseIdLookup(rootNode)) {
ASSERT(m_selectors.size() == 1);
const CSSSelector* selector = m_selectors[0].selector;
@@ -152,20 +155,17 @@
bool SelectorQuery::matches(Element* element) const
{
- SelectorChecker selectorChecker(element->document(), SelectorChecker::ResolvingStyle);
- return m_selectors.matches(selectorChecker, element);
+ return m_selectors.matches(element);
}
PassRefPtr<NodeList> SelectorQuery::queryAll(Node* rootNode) const
{
- SelectorChecker selectorChecker(rootNode->document(), SelectorChecker::QueryingRules);
- return m_selectors.queryAll(selectorChecker, rootNode);
+ return m_selectors.queryAll(rootNode);
}
PassRefPtr<Element> SelectorQuery::queryFirst(Node* rootNode) const
{
- SelectorChecker selectorChecker(rootNode->document(), SelectorChecker::QueryingRules);
- return m_selectors.queryFirst(selectorChecker, rootNode);
+ return m_selectors.queryFirst(rootNode);
}
SelectorQuery* SelectorQueryCache::add(const AtomicString& selectors, Document* document, ExceptionCode& ec)
Modified: trunk/Source/WebCore/dom/SelectorQuery.h (143151 => 143152)
--- trunk/Source/WebCore/dom/SelectorQuery.h 2013-02-18 06:38:12 UTC (rev 143151)
+++ trunk/Source/WebCore/dom/SelectorQuery.h 2013-02-18 06:44:13 UTC (rev 143152)
@@ -27,14 +27,16 @@
#define SelectorQuery_h
#include "CSSSelectorList.h"
-#include "SelectorChecker.h"
+#include <wtf/HashMap.h>
#include <wtf/Vector.h>
+#include <wtf/text/AtomicStringHash.h>
namespace WebCore {
typedef int ExceptionCode;
class CSSSelector;
+class Document;
class Element;
class Node;
class NodeList;
@@ -42,9 +44,9 @@
class SelectorDataList {
public:
void initialize(const CSSSelectorList&);
- bool matches(const SelectorChecker&, Element*) const;
- PassRefPtr<NodeList> queryAll(const SelectorChecker&, Node* rootNode) const;
- PassRefPtr<Element> queryFirst(const SelectorChecker&, Node* rootNode) const;
+ bool matches(Element*) const;
+ PassRefPtr<NodeList> queryAll(Node* rootNode) const;
+ PassRefPtr<Element> queryFirst(Node* rootNode) const;
private:
struct SelectorData {
@@ -55,7 +57,7 @@
bool canUseIdLookup(Node* rootNode) const;
template <bool firstMatchOnly>
- void execute(const SelectorChecker&, Node* rootNode, Vector<RefPtr<Node> >&) const;
+ void execute(Node* rootNode, Vector<RefPtr<Node> >&) const;
Vector<SelectorData> m_selectors;
};