Title: [161046] trunk/Source/WebCore
Revision
161046
Author
[email protected]
Date
2013-12-23 19:28:58 -0800 (Mon, 23 Dec 2013)

Log Message

Add the pseudo classes link and any-link to the Selector Code Generator
https://bugs.webkit.org/show_bug.cgi?id=126196

Reviewed by Ryosuke Niwa.

* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::addPseudoType):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLink):
* dom/Node.h:
(WebCore::Node::flagIsElement):
(WebCore::Node::flagIsLink):
Fix the type to match TrustedImm32.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (161045 => 161046)


--- trunk/Source/WebCore/ChangeLog	2013-12-24 03:28:01 UTC (rev 161045)
+++ trunk/Source/WebCore/ChangeLog	2013-12-24 03:28:58 UTC (rev 161046)
@@ -1,5 +1,21 @@
 2013-12-23  Benjamin Poulain  <[email protected]>
 
+        Add the pseudo classes link and any-link to the Selector Code Generator
+        https://bugs.webkit.org/show_bug.cgi?id=126196
+
+        Reviewed by Ryosuke Niwa.
+
+        * cssjit/SelectorCompiler.cpp:
+        (WebCore::SelectorCompiler::addPseudoType):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
+        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLink):
+        * dom/Node.h:
+        (WebCore::Node::flagIsElement):
+        (WebCore::Node::flagIsLink):
+        Fix the type to match TrustedImm32.
+
+2013-12-23  Benjamin Poulain  <[email protected]>
+
         Add the experimental CSS code generator files to the remaining build systems
         https://bugs.webkit.org/show_bug.cgi?id=126192
 

Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (161045 => 161046)


--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2013-12-24 03:28:01 UTC (rev 161045)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp	2013-12-24 03:28:58 UTC (rev 161046)
@@ -143,6 +143,7 @@
     void generateElementHasId(Assembler::JumpList& failureCases, const LocalRegister& elementDataAddress, const AtomicString& idToMatch);
     void generateElementHasClasses(Assembler::JumpList& failureCases, const LocalRegister& elementDataAddress, const Vector<const AtomicStringImpl*>& classNames);
     void generateElementIsFocused(Assembler::JumpList& failureCases);
+    void generateElementIsLink(Assembler::JumpList& failureCases);
 
     Assembler m_assembler;
     RegisterAllocator m_registerAllocator;
@@ -204,6 +205,10 @@
 static inline FunctionType addPseudoType(CSSSelector::PseudoType type, HashSet<unsigned>& pseudoClasses)
 {
     switch (type) {
+    case CSSSelector::PseudoAnyLink:
+    case CSSSelector::PseudoLink:
+        pseudoClasses.add(CSSSelector::PseudoLink);
+        return FunctionType::SimpleSelectorChecker;
     case CSSSelector::PseudoFocus:
         pseudoClasses.add(CSSSelector::PseudoFocus);
         return FunctionType::SimpleSelectorChecker;
@@ -768,6 +773,9 @@
 
 void SelectorCodeGenerator::generateElementMatching(Assembler::JumpList& failureCases, const SelectorFragment& fragment)
 {
+    if (fragment.pseudoClasses.contains(CSSSelector::PseudoLink))
+        generateElementIsLink(failureCases);
+
     if (fragment.tagName)
         generateElementHasTagName(failureCases, *(fragment.tagName));
 
@@ -874,6 +882,11 @@
     failureCases.append(functionCall.callAndBranchOnCondition(Assembler::Zero));
 }
 
+void SelectorCodeGenerator::generateElementIsLink(Assembler::JumpList& failureCases)
+{
+    failureCases.append(m_assembler.branchTest32(Assembler::Zero, Assembler::Address(elementAddressRegister, Node::nodeFlagsMemoryOffset()), Assembler::TrustedImm32(Node::flagIsLink())));
+}
+
 }; // namespace SelectorCompiler.
 }; // namespace WebCore.
 

Modified: trunk/Source/WebCore/dom/Node.h (161045 => 161046)


--- trunk/Source/WebCore/dom/Node.h	2013-12-24 03:28:01 UTC (rev 161045)
+++ trunk/Source/WebCore/dom/Node.h	2013-12-24 03:28:58 UTC (rev 161046)
@@ -562,7 +562,8 @@
 
 #if ENABLE(CSS_SELECTOR_JIT)
     static ptrdiff_t nodeFlagsMemoryOffset() { return OBJECT_OFFSETOF(Node, m_nodeFlags); }
-    static uint8_t flagIsElement() { return IsElementFlag; }
+    static int32_t flagIsElement() { return IsElementFlag; }
+    static int32_t flagIsLink() { return IsLinkFlag; }
 #endif // ENABLE(CSS_SELECTOR_JIT)
 
 protected:
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to