Changeset 167574 in webkit
- Timestamp:
- Apr 20, 2014 2:28:51 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r167571 r167574 1 2014-04-20 Benjamin Poulain <benjamin@webkit.org> 2 3 Compile the pseudo class :target 4 https://bugs.webkit.org/show_bug.cgi?id=131904 5 6 Reviewed by Andreas Kling. 7 8 The pseudo class :target is trivial, it just compare the current element with 9 Document::cssTarget(). 10 11 * cssjit/SelectorCompiler.cpp: 12 (WebCore::SelectorCompiler::addPseudoType): 13 (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching): 14 (WebCore::SelectorCompiler::getDocument): 15 (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching): 16 (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsTarget): 17 * dom/Document.h: 18 (WebCore::Document::cssTargetMemoryOffset): 19 1 20 2014-04-20 Benjamin Poulain <benjamin@webkit.org> 2 21 -
trunk/Source/WebCore/cssjit/SelectorCompiler.cpp
r167571 r167574 191 191 void generateElementIsLink(Assembler::JumpList& failureCases); 192 192 void generateElementIsNthChild(Assembler::JumpList& failureCases, const SelectorFragment&); 193 void generateElementIsTarget(Assembler::JumpList& failureCases); 193 194 194 195 // Helpers. … … 319 320 320 321 case CSSSelector::PseudoClassLink: 322 case CSSSelector::PseudoClassTarget: 321 323 fragment.pseudoClasses.add(type); 322 324 return FunctionType::SimpleSelectorChecker; … … 1167 1169 generateElementIsLink(failureCases); 1168 1170 1171 if (fragment.pseudoClasses.contains(CSSSelector::PseudoTarget)) 1172 generateElementIsTarget(failureCases); 1173 1169 1174 if (fragment.tagName) 1170 1175 generateElementHasTagName(failureCases, *(fragment.tagName)); … … 1513 1518 } 1514 1519 1520 static void getDocument(Assembler& assembler, Assembler::RegisterID element, Assembler::RegisterID output) 1521 { 1522 assembler.loadPtr(Assembler::Address(element, Node::treeScopeMemoryOffset()), output); 1523 assembler.loadPtr(Assembler::Address(output, TreeScope::documentScopeMemoryOffset()), output); 1524 } 1525 1515 1526 void SelectorCodeGenerator::generateElementAttributeValueExactMatching(Assembler::JumpList& failureCases, Assembler::RegisterID currentAttributeAddress, const AtomicString& expectedValue, bool canDefaultToCaseSensitiveValueMatch) 1516 1527 { … … 1529 1540 1530 1541 { 1531 LocalRegister scratchRegister(m_registerAllocator); 1532 // scratchRegister = pointer to treeScope. 1533 m_assembler.loadPtr(Assembler::Address(elementAddressRegister, Node::treeScopeMemoryOffset()), scratchRegister); 1534 // scratchRegister = pointer to document. 1535 m_assembler.loadPtr(Assembler::Address(scratchRegister, TreeScope::documentScopeMemoryOffset()), scratchRegister); 1536 failureCases.append(testIsHTMLClassOnDocument(Assembler::Zero, m_assembler, scratchRegister)); 1542 LocalRegister document(m_registerAllocator); 1543 getDocument(m_assembler, elementAddressRegister, document); 1544 failureCases.append(testIsHTMLClassOnDocument(Assembler::Zero, m_assembler, document)); 1537 1545 } 1538 1546 … … 2036 2044 } 2037 2045 2046 void SelectorCodeGenerator::generateElementIsTarget(Assembler::JumpList& failureCases) 2047 { 2048 LocalRegister document(m_registerAllocator); 2049 getDocument(m_assembler, elementAddressRegister, document); 2050 failureCases.append(m_assembler.branchPtr(Assembler::NotEqual, Assembler::Address(document, Document::cssTargetMemoryOffset()), elementAddressRegister)); 2051 } 2052 2038 2053 }; // namespace SelectorCompiler. 2039 2054 }; // namespace WebCore. -
trunk/Source/WebCore/dom/Document.h
r167497 r167574 756 756 void setCSSTarget(Element*); 757 757 Element* cssTarget() const { return m_cssTarget; } 758 758 static ptrdiff_t cssTargetMemoryOffset() { return OBJECT_OFFSETOF(Document, m_cssTarget); } 759 759 760 void scheduleForcedStyleRecalc(); 760 761 void scheduleStyleRecalc();
Note: See TracChangeset
for help on using the changeset viewer.