Changeset 121858 in webkit


Ignore:
Timestamp:
Jul 4, 2012 8:31:53 AM (12 years ago)
Author:
kseo@webkit.org
Message:

Stop tracking line number in tokenizer
https://bugs.webkit.org/show_bug.cgi?id=90544

Reviewed by Adam Barth.

Because SegmentedString knows how to track the current line and column,
a tokenizer does not need to keep track of the current line by itself.
No behavior change, so no new tests.

  • html/parser/HTMLDocumentParser.cpp:

(WebCore::HTMLDocumentParser::pumpTokenizer):
(WebCore::HTMLDocumentParser::lineNumber):
(WebCore::HTMLDocumentParser::textPosition):

  • html/parser/HTMLTokenizer.cpp:

(WebCore::HTMLTokenizer::reset):
(WebCore::HTMLTokenizer::flushBufferedEndTag):
(WebCore):
(WebCore::HTMLTokenizer::nextToken):

  • html/parser/HTMLTreeBuilder.cpp:

(WebCore::HTMLTreeBuilder::processScriptStartTag):

  • html/track/WebVTTTokenizer.cpp:

(WebCore::WebVTTTokenizer::reset):
(WebCore::WebVTTTokenizer::nextToken):

  • platform/text/SegmentedString.cpp:

(WebCore::SegmentedString::advanceAndUpdateLineNumberSlowCase):

  • platform/text/SegmentedString.h:

(WebCore::SegmentedString::advancePastNewlineAndUpdateLineNumber):
(WebCore::SegmentedString::advanceAndUpdateLineNumber):
(SegmentedString):

  • xml/parser/MarkupTokenizerBase.h:

(WebCore::MarkupTokenizerBase::InputStreamPreprocessor::peek):
(WebCore::MarkupTokenizerBase::InputStreamPreprocessor::advance):
(WebCore::MarkupTokenizerBase::emitAndResumeIn):
(WebCore::MarkupTokenizerBase::emitEndOfFile):
(WebCore::MarkupTokenizerBase::reset):
(MarkupTokenizerBase):

  • xml/parser/MarkupTokenizerInlineMethods.h:

(WebCore):

  • xml/parser/XMLTokenizer.cpp:

(WebCore::XMLTokenizer::nextToken):

Location:
trunk/Source/WebCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r121857 r121858  
     12012-07-04  Kwang Yul Seo  <skyul@company100.net>
     2
     3        Stop tracking line number in tokenizer
     4        https://bugs.webkit.org/show_bug.cgi?id=90544
     5
     6        Reviewed by Adam Barth.
     7
     8        Because SegmentedString knows how to track the current line and column,
     9        a tokenizer does not need to keep track of the current line by itself.
     10        No behavior change, so no new tests.
     11
     12        * html/parser/HTMLDocumentParser.cpp:
     13        (WebCore::HTMLDocumentParser::pumpTokenizer):
     14        (WebCore::HTMLDocumentParser::lineNumber):
     15        (WebCore::HTMLDocumentParser::textPosition):
     16        * html/parser/HTMLTokenizer.cpp:
     17        (WebCore::HTMLTokenizer::reset):
     18        (WebCore::HTMLTokenizer::flushBufferedEndTag):
     19        (WebCore):
     20        (WebCore::HTMLTokenizer::nextToken):
     21        * html/parser/HTMLTreeBuilder.cpp:
     22        (WebCore::HTMLTreeBuilder::processScriptStartTag):
     23        * html/track/WebVTTTokenizer.cpp:
     24        (WebCore::WebVTTTokenizer::reset):
     25        (WebCore::WebVTTTokenizer::nextToken):
     26        * platform/text/SegmentedString.cpp:
     27        (WebCore::SegmentedString::advanceAndUpdateLineNumberSlowCase):
     28        * platform/text/SegmentedString.h:
     29        (WebCore::SegmentedString::advancePastNewlineAndUpdateLineNumber):
     30        (WebCore::SegmentedString::advanceAndUpdateLineNumber):
     31        (SegmentedString):
     32        * xml/parser/MarkupTokenizerBase.h:
     33        (WebCore::MarkupTokenizerBase::InputStreamPreprocessor::peek):
     34        (WebCore::MarkupTokenizerBase::InputStreamPreprocessor::advance):
     35        (WebCore::MarkupTokenizerBase::emitAndResumeIn):
     36        (WebCore::MarkupTokenizerBase::emitEndOfFile):
     37        (WebCore::MarkupTokenizerBase::reset):
     38        (MarkupTokenizerBase):
     39        * xml/parser/MarkupTokenizerInlineMethods.h:
     40        (WebCore):
     41        * xml/parser/XMLTokenizer.cpp:
     42        (WebCore::XMLTokenizer::nextToken):
     43
    1442012-07-04  Ryuan Choi  <ryuan.choi@samsung.com>
    245
  • trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp

    r103999 r121858  
    259259    // end up parsing the whole buffer in this pump.  We should pass how
    260260    // much we parsed as part of didWriteHTML instead of willWriteHTML.
    261     InspectorInstrumentationCookie cookie = InspectorInstrumentation::willWriteHTML(document(), m_input.current().length(), m_tokenizer->lineNumber().zeroBasedInt());
     261    InspectorInstrumentationCookie cookie = InspectorInstrumentation::willWriteHTML(document(), m_input.current().length(), m_input.current().currentLine().zeroBasedInt());
    262262
    263263    while (canTakeNextToken(mode, session) && !session.needsYield) {
     
    299299    }
    300300
    301     InspectorInstrumentation::didWriteHTML(cookie, m_tokenizer->lineNumber().zeroBasedInt());
     301    InspectorInstrumentation::didWriteHTML(cookie, m_input.current().currentLine().zeroBasedInt());
    302302}
    303303
     
    449449OrdinalNumber HTMLDocumentParser::lineNumber() const
    450450{
    451     return m_tokenizer->lineNumber();
     451    return m_input.current().currentLine();
    452452}
    453453
     
    457457    OrdinalNumber line = currentString.currentLine();
    458458    OrdinalNumber column = currentString.currentColumn();
    459     ASSERT(m_tokenizer->lineNumber() == line);
    460459
    461460    return TextPosition(line, column);
  • trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp

    r103999 r121858  
    135135    m_state = HTMLTokenizerState::DataState;
    136136    m_token = 0;
    137     m_lineNumber = 0;
    138137    m_forceNullCharacterReplacement = false;
    139138    m_shouldAllowCDATA = false;
     
    161160{
    162161    ASSERT(m_token->type() == HTMLTokenTypes::Character || m_token->type() == HTMLTokenTypes::Uninitialized);
    163     source.advance(m_lineNumber);
     162    source.advanceAndUpdateLineNumber();
    164163    if (m_token->type() == HTMLTokenTypes::Character)
    165164        return true;
     
    176175            return true;                                                   \
    177176        if (source.isEmpty()                                               \
    178             || !m_inputStreamPreprocessor.peek(source, m_lineNumber))      \
     177            || !m_inputStreamPreprocessor.peek(source))                    \
    179178            return haveBufferedCharacterToken();                           \
    180179        cc = m_inputStreamPreprocessor.nextInputCharacter();               \
     
    208207    }
    209208
    210     if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source, m_lineNumber))
     209    if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source))
    211210        return haveBufferedCharacterToken();
    212211    UChar cc = m_inputStreamPreprocessor.nextInputCharacter();
  • trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp

    r121683 r121858  
    26472647    TextPosition position = m_parser->textPosition();
    26482648
    2649     ASSERT(position.m_line == m_parser->tokenizer()->lineNumber());
    2650 
    26512649    m_lastScriptElementStartPosition = position;
    26522650
  • trunk/Source/WebCore/html/track/WebVTTTokenizer.cpp

    r95901 r121858  
    6666    m_state = WebVTTTokenizerState::DataState;
    6767    m_token = 0;
    68     m_lineNumber = 0;
    6968    m_buffer.clear();
    7069}
     
    7776    m_token = &token;
    7877
    79     if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source, m_lineNumber))
     78    if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source))
    8079        return haveBufferedCharacterToken();
    8180
  • trunk/Source/WebCore/platform/text/SegmentedString.cpp

    r121523 r121858  
    223223}
    224224
    225 void SegmentedString::advanceSlowCase(int& lineNumber)
     225void SegmentedString::advanceAndUpdateLineNumberSlowCase()
    226226{
    227227    if (m_pushedChar1) {
     
    230230    } else if (m_currentString.m_current) {
    231231        if (*m_currentString.m_current++ == '\n' && m_currentString.doNotExcludeLineNumbers()) {
    232             ++lineNumber;
    233232            ++m_currentLine;
    234233            // Plus 1 because numberOfCharactersConsumed value hasn't incremented yet; it does with m_length decrement below.
  • trunk/Source/WebCore/platform/text/SegmentedString.h

    r121523 r121858  
    158158    }
    159159
    160     void advancePastNewline(int& lineNumber)
     160    void advancePastNewlineAndUpdateLineNumber()
    161161    {
    162162        ASSERT(*current() == '\n');
    163163        if (!m_pushedChar1 && m_currentString.m_length > 1) {
    164164            int newLineFlag = m_currentString.doNotExcludeLineNumbers();
    165             lineNumber += newLineFlag;
    166165            m_currentLine += newLineFlag;
    167166            if (newLineFlag)
     
    171170            return;
    172171        }
    173         advanceSlowCase(lineNumber);
     172        advanceAndUpdateLineNumberSlowCase();
    174173    }
    175174   
     
    185184    }
    186185   
    187     void advance(int& lineNumber)
     186    void advanceAndUpdateLineNumber()
    188187    {
    189188        if (!m_pushedChar1 && m_currentString.m_length > 1) {
    190189            int newLineFlag = (*m_currentString.m_current == '\n') & m_currentString.doNotExcludeLineNumbers();
    191             lineNumber += newLineFlag;
    192190            m_currentLine += newLineFlag;
    193191            if (newLineFlag)
     
    197195            return;
    198196        }
    199         advanceSlowCase(lineNumber);
     197        advanceAndUpdateLineNumberSlowCase();
    200198    }
    201199
     
    235233
    236234    void advanceSlowCase();
    237     void advanceSlowCase(int& lineNumber);
     235    void advanceAndUpdateLineNumberSlowCase();
    238236    void advanceSubstring();
    239237    const UChar* current() const { return m_currentChar; }
  • trunk/Source/WebCore/xml/parser/MarkupTokenizerBase.h

    r103102 r121858  
    4646    virtual ~MarkupTokenizerBase() { }
    4747
    48     OrdinalNumber lineNumber() const { return OrdinalNumber::fromZeroBasedInt(m_lineNumber); }
    49 
    5048    typename State::State state() const { return m_state; }
    5149    void setState(typename State::State state) { m_state = state; }
     
    7472        // The only way we can fail to peek is if there are no more
    7573        // characters in |source| (after collapsing \r\n, etc).
    76         ALWAYS_INLINE bool peek(SegmentedString& source, int& lineNumber)
     74        ALWAYS_INLINE bool peek(SegmentedString& source)
    7775        {
    7876        PeekAgain:
     
    9189            if (m_nextInputCharacter == '\n' && m_skipNextNewLine) {
    9290                m_skipNextNewLine = false;
    93                 source.advancePastNewline(lineNumber);
     91                source.advancePastNewlineAndUpdateLineNumber();
    9492                if (source.isEmpty())
    9593                    return false;
     
    119117
    120118        // Returns whether there are more characters in |source| after advancing.
    121         bool advance(SegmentedString& source, int& lineNumber)
    122         {
    123             source.advance(lineNumber);
     119        bool advance(SegmentedString& source)
     120        {
     121            source.advanceAndUpdateLineNumber();
    124122            if (source.isEmpty())
    125123                return false;
    126             return peek(source, lineNumber);
     124            return peek(source);
    127125        }
    128126
     
    157155    {
    158156        m_state = state;
    159         source.advance(m_lineNumber);
     157        source.advanceAndUpdateLineNumber();
    160158        return true;
    161159    }
     
    173171            return true;
    174172        m_state = State::DataState;
    175         source.advance(m_lineNumber);
     173        source.advanceAndUpdateLineNumber();
    176174        m_token->clear();
    177175        m_token->makeEndOfFile();
     
    183181        m_state = State::DataState;
    184182        m_token = 0;
    185         m_lineNumber = 0;
    186183    }
    187184
     
    196193    // this member might be pointing to unallocated memory.
    197194    Token* m_token;
    198     int m_lineNumber;
    199195
    200196    bool m_forceNullCharacterReplacement;
  • trunk/Source/WebCore/xml/parser/MarkupTokenizerInlineMethods.h

    r95901 r121858  
    7272    do {                                                                   \
    7373        m_state = prefix::stateName;                                       \
    74         if (!m_inputStreamPreprocessor.advance(source, m_lineNumber))      \
     74        if (!m_inputStreamPreprocessor.advance(source))                    \
    7575            return haveBufferedCharacterToken();                           \
    7676        cc = m_inputStreamPreprocessor.nextInputCharacter();               \
     
    8585    do {                                                                   \
    8686        m_state = prefix::stateName;                                       \
    87         if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source, m_lineNumber)) \
     87        if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source))  \
    8888            return haveBufferedCharacterToken();                           \
    8989        cc = m_inputStreamPreprocessor.nextInputCharacter();               \
  • trunk/Source/WebCore/xml/parser/XMLTokenizer.cpp

    r95901 r121858  
    226226    m_token = &token;
    227227
    228     if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source, m_lineNumber))
     228    if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source))
    229229        return haveBufferedCharacterToken();
    230230    UChar cc = m_inputStreamPreprocessor.nextInputCharacter();
Note: See TracChangeset for help on using the changeset viewer.