Changeset 121858 in webkit
- Timestamp:
- Jul 4, 2012 8:31:53 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r121857 r121858 1 2012-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 1 44 2012-07-04 Ryuan Choi <ryuan.choi@samsung.com> 2 45 -
trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp
r103999 r121858 259 259 // end up parsing the whole buffer in this pump. We should pass how 260 260 // 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()); 262 262 263 263 while (canTakeNextToken(mode, session) && !session.needsYield) { … … 299 299 } 300 300 301 InspectorInstrumentation::didWriteHTML(cookie, m_ tokenizer->lineNumber().zeroBasedInt());301 InspectorInstrumentation::didWriteHTML(cookie, m_input.current().currentLine().zeroBasedInt()); 302 302 } 303 303 … … 449 449 OrdinalNumber HTMLDocumentParser::lineNumber() const 450 450 { 451 return m_ tokenizer->lineNumber();451 return m_input.current().currentLine(); 452 452 } 453 453 … … 457 457 OrdinalNumber line = currentString.currentLine(); 458 458 OrdinalNumber column = currentString.currentColumn(); 459 ASSERT(m_tokenizer->lineNumber() == line);460 459 461 460 return TextPosition(line, column); -
trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp
r103999 r121858 135 135 m_state = HTMLTokenizerState::DataState; 136 136 m_token = 0; 137 m_lineNumber = 0;138 137 m_forceNullCharacterReplacement = false; 139 138 m_shouldAllowCDATA = false; … … 161 160 { 162 161 ASSERT(m_token->type() == HTMLTokenTypes::Character || m_token->type() == HTMLTokenTypes::Uninitialized); 163 source.advance (m_lineNumber);162 source.advanceAndUpdateLineNumber(); 164 163 if (m_token->type() == HTMLTokenTypes::Character) 165 164 return true; … … 176 175 return true; \ 177 176 if (source.isEmpty() \ 178 || !m_inputStreamPreprocessor.peek(source , m_lineNumber))\177 || !m_inputStreamPreprocessor.peek(source)) \ 179 178 return haveBufferedCharacterToken(); \ 180 179 cc = m_inputStreamPreprocessor.nextInputCharacter(); \ … … 208 207 } 209 208 210 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source , m_lineNumber))209 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source)) 211 210 return haveBufferedCharacterToken(); 212 211 UChar cc = m_inputStreamPreprocessor.nextInputCharacter(); -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
r121683 r121858 2647 2647 TextPosition position = m_parser->textPosition(); 2648 2648 2649 ASSERT(position.m_line == m_parser->tokenizer()->lineNumber());2650 2651 2649 m_lastScriptElementStartPosition = position; 2652 2650 -
trunk/Source/WebCore/html/track/WebVTTTokenizer.cpp
r95901 r121858 66 66 m_state = WebVTTTokenizerState::DataState; 67 67 m_token = 0; 68 m_lineNumber = 0;69 68 m_buffer.clear(); 70 69 } … … 77 76 m_token = &token; 78 77 79 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source , m_lineNumber))78 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source)) 80 79 return haveBufferedCharacterToken(); 81 80 -
trunk/Source/WebCore/platform/text/SegmentedString.cpp
r121523 r121858 223 223 } 224 224 225 void SegmentedString::advance SlowCase(int& lineNumber)225 void SegmentedString::advanceAndUpdateLineNumberSlowCase() 226 226 { 227 227 if (m_pushedChar1) { … … 230 230 } else if (m_currentString.m_current) { 231 231 if (*m_currentString.m_current++ == '\n' && m_currentString.doNotExcludeLineNumbers()) { 232 ++lineNumber;233 232 ++m_currentLine; 234 233 // 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 158 158 } 159 159 160 void advancePastNewline (int& lineNumber)160 void advancePastNewlineAndUpdateLineNumber() 161 161 { 162 162 ASSERT(*current() == '\n'); 163 163 if (!m_pushedChar1 && m_currentString.m_length > 1) { 164 164 int newLineFlag = m_currentString.doNotExcludeLineNumbers(); 165 lineNumber += newLineFlag;166 165 m_currentLine += newLineFlag; 167 166 if (newLineFlag) … … 171 170 return; 172 171 } 173 advance SlowCase(lineNumber);172 advanceAndUpdateLineNumberSlowCase(); 174 173 } 175 174 … … 185 184 } 186 185 187 void advance (int& lineNumber)186 void advanceAndUpdateLineNumber() 188 187 { 189 188 if (!m_pushedChar1 && m_currentString.m_length > 1) { 190 189 int newLineFlag = (*m_currentString.m_current == '\n') & m_currentString.doNotExcludeLineNumbers(); 191 lineNumber += newLineFlag;192 190 m_currentLine += newLineFlag; 193 191 if (newLineFlag) … … 197 195 return; 198 196 } 199 advance SlowCase(lineNumber);197 advanceAndUpdateLineNumberSlowCase(); 200 198 } 201 199 … … 235 233 236 234 void advanceSlowCase(); 237 void advance SlowCase(int& lineNumber);235 void advanceAndUpdateLineNumberSlowCase(); 238 236 void advanceSubstring(); 239 237 const UChar* current() const { return m_currentChar; } -
trunk/Source/WebCore/xml/parser/MarkupTokenizerBase.h
r103102 r121858 46 46 virtual ~MarkupTokenizerBase() { } 47 47 48 OrdinalNumber lineNumber() const { return OrdinalNumber::fromZeroBasedInt(m_lineNumber); }49 50 48 typename State::State state() const { return m_state; } 51 49 void setState(typename State::State state) { m_state = state; } … … 74 72 // The only way we can fail to peek is if there are no more 75 73 // characters in |source| (after collapsing \r\n, etc). 76 ALWAYS_INLINE bool peek(SegmentedString& source , int& lineNumber)74 ALWAYS_INLINE bool peek(SegmentedString& source) 77 75 { 78 76 PeekAgain: … … 91 89 if (m_nextInputCharacter == '\n' && m_skipNextNewLine) { 92 90 m_skipNextNewLine = false; 93 source.advancePastNewline (lineNumber);91 source.advancePastNewlineAndUpdateLineNumber(); 94 92 if (source.isEmpty()) 95 93 return false; … … 119 117 120 118 // 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(); 124 122 if (source.isEmpty()) 125 123 return false; 126 return peek(source , lineNumber);124 return peek(source); 127 125 } 128 126 … … 157 155 { 158 156 m_state = state; 159 source.advance (m_lineNumber);157 source.advanceAndUpdateLineNumber(); 160 158 return true; 161 159 } … … 173 171 return true; 174 172 m_state = State::DataState; 175 source.advance (m_lineNumber);173 source.advanceAndUpdateLineNumber(); 176 174 m_token->clear(); 177 175 m_token->makeEndOfFile(); … … 183 181 m_state = State::DataState; 184 182 m_token = 0; 185 m_lineNumber = 0;186 183 } 187 184 … … 196 193 // this member might be pointing to unallocated memory. 197 194 Token* m_token; 198 int m_lineNumber;199 195 200 196 bool m_forceNullCharacterReplacement; -
trunk/Source/WebCore/xml/parser/MarkupTokenizerInlineMethods.h
r95901 r121858 72 72 do { \ 73 73 m_state = prefix::stateName; \ 74 if (!m_inputStreamPreprocessor.advance(source , m_lineNumber))\74 if (!m_inputStreamPreprocessor.advance(source)) \ 75 75 return haveBufferedCharacterToken(); \ 76 76 cc = m_inputStreamPreprocessor.nextInputCharacter(); \ … … 85 85 do { \ 86 86 m_state = prefix::stateName; \ 87 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source , m_lineNumber))\87 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source)) \ 88 88 return haveBufferedCharacterToken(); \ 89 89 cc = m_inputStreamPreprocessor.nextInputCharacter(); \ -
trunk/Source/WebCore/xml/parser/XMLTokenizer.cpp
r95901 r121858 226 226 m_token = &token; 227 227 228 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source , m_lineNumber))228 if (source.isEmpty() || !m_inputStreamPreprocessor.peek(source)) 229 229 return haveBufferedCharacterToken(); 230 230 UChar cc = m_inputStreamPreprocessor.nextInputCharacter();
Note: See TracChangeset
for help on using the changeset viewer.