Changeset 62082 in webkit


Ignore:
Timestamp:
Jun 28, 2010 9:31:40 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-06-28 Eric Seidel <eric@webkit.org>

Reviewed by Adam Barth.

Implement HTMLTreeBuilder::reconstructTheActiveFormattingElements
https://bugs.webkit.org/show_bug.cgi?id=41319

Restructure the code to not use in-band data, which is what
got us in trouble with a signed/unsigned mismatch before.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement): (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
  • html/HTMLTreeBuilder.h:
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r62081 r62082  
     12010-06-28  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Implement HTMLTreeBuilder::reconstructTheActiveFormattingElements
     6        https://bugs.webkit.org/show_bug.cgi?id=41319
     7
     8        Restructure the code to not use in-band data, which is what
     9        got us in trouble with a signed/unsigned mismatch before.
     10
     11        * html/HTMLTreeBuilder.cpp:
     12        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
     13        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
     14        * html/HTMLTreeBuilder.h:
     15
    1162010-06-28  Daniel Bates  <dbates@rim.com>
    217
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r62080 r62082  
    915915}
    916916
    917 int HTMLTreeBuilder::indexOfLastOpenFormattingElementOrMarker() const
    918 {
    919     ASSERT(!m_activeFormattingElements.isEmpty());
    920     for (int index = m_activeFormattingElements.size() - 1; index >= 0; --index) {
     917bool HTMLTreeBuilder::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const
     918{
     919    if (m_activeFormattingElements.isEmpty())
     920        return false;
     921    unsigned index = m_activeFormattingElements.size();
     922    do {
     923        --index;
    921924        const FormattingElementEntry& entry = m_activeFormattingElements[index];
    922         if (entry.isMarker() || m_openElements.contains(entry.element()))
    923             return index;
    924     }
    925     return -1; // No elements are open!
    926 }
    927 
    928 void HTMLTreeBuilder::reopenFormattingElementsAfterIndex(unsigned lastOpenElementIndex)
    929 {
     925        if (entry.isMarker() || m_openElements.contains(entry.element())) {
     926            firstUnopenElementIndex = index;
     927            return true;
     928        }
     929    } while (index);
     930    return false;
     931}
     932
     933void HTMLTreeBuilder::reconstructTheActiveFormattingElements()
     934{
     935    unsigned firstUnopenElementIndex;
     936    if (!indexOfFirstUnopenFormattingElement(firstUnopenElementIndex))
     937        return;
     938
    930939    Vector<FormattingElementEntry>& stack = m_activeFormattingElements;
    931     unsigned unopenEntryIndex = lastOpenElementIndex + 1;
     940    unsigned unopenEntryIndex = firstUnopenElementIndex;
    932941    ASSERT(unopenEntryIndex < stack.size());
    933942    for (; unopenEntryIndex < stack.size(); ++unopenEntryIndex) {
     
    940949}
    941950
    942 void HTMLTreeBuilder::reconstructTheActiveFormattingElements()
    943 {
    944     if (m_activeFormattingElements.isEmpty())
    945         return;
    946 
    947     int lastOpenElementIndex = indexOfLastOpenFormattingElementOrMarker();
    948     if (lastOpenElementIndex < m_activeFormattingElements.size() - 1)
    949         reopenFormattingElementsAfterIndex(lastOpenElementIndex);
    950 }
    951 
    952951void HTMLTreeBuilder::finished()
    953952{
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r62080 r62082  
    216216
    217217    PassRefPtr<Element> createElement(AtomicHTMLToken&);
    218     int indexOfLastOpenFormattingElementOrMarker() const;
    219     void reopenFormattingElementsAfterIndex(unsigned lastOpenElementIndex);
     218
     219    bool indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const;
    220220    void reconstructTheActiveFormattingElements();
    221221
Note: See TracChangeset for help on using the changeset viewer.