Changeset 43144 in webkit for trunk/JavaScriptCore/parser/Lexer.cpp
- Timestamp:
- May 2, 2009, 4:33:56 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Lexer.cpp
r41045 r43144 89 89 } 90 90 91 void Lexer::setCode(const SourceCode& source) 92 { 93 yylineno = source.firstLine(); 94 m_restrKeyword = false; 95 m_delimited = false; 96 m_eatNextIdentifier = false; 97 m_stackToken = -1; 98 m_lastToken = -1; 99 100 m_position = source.startOffset(); 101 m_source = &source; 102 m_code = source.provider()->data(); 103 m_length = source.endOffset(); 104 m_skipLF = false; 105 m_skipCR = false; 106 m_error = false; 107 m_atLineStart = true; 108 109 // read first characters 110 shift(4); 111 } 112 113 void Lexer::shift(unsigned p) 91 ALWAYS_INLINE void Lexer::shift(unsigned p) 114 92 { 115 93 // ECMA-262 calls for stripping Cf characters here, but we only do this for BOM, … … 132 110 m_nextOffset3 = m_position; 133 111 m_next3 = m_code[m_position++]; 134 } while (m_next3 == 0xFEFF); 135 } 112 } while (UNLIKELY(m_next3 == 0xFEFF)); 113 } 114 } 115 116 void Lexer::setCode(const SourceCode& source) 117 { 118 yylineno = source.firstLine(); 119 m_restrKeyword = false; 120 m_delimited = false; 121 m_eatNextIdentifier = false; 122 m_stackToken = -1; 123 m_lastToken = -1; 124 125 m_position = source.startOffset(); 126 m_source = &source; 127 m_code = source.provider()->data(); 128 m_length = source.endOffset(); 129 m_skipLF = false; 130 m_skipCR = false; 131 m_error = false; 132 m_atLineStart = true; 133 134 // read first characters 135 shift(4); 136 136 } 137 137 … … 156 156 m_state = Start; 157 157 unsigned short stringType = 0; // either single or double quotes 158 m_buffer8. clear();159 m_buffer16. clear();158 m_buffer8.resize(0); 159 m_buffer16.resize(0); 160 160 m_done = false; 161 161 m_terminator = false; … … 171 171 } 172 172 int startOffset = m_currentOffset; 173 while (!m_done) { 173 if (!m_done) { 174 while (true) { 174 175 if (m_skipLF && m_current != '\n') // found \r but not \n afterwards 175 176 m_skipLF = false; … … 452 453 } 453 454 454 // move on to the next character455 if (!m_done)456 shift(1);457 455 if (m_state != Start && m_state != InSingleLineComment) 458 456 m_atLineStart = false; 457 if (m_done) 458 break; 459 460 shift(1); 461 } 459 462 } 460 463 … … 843 846 bool Lexer::scanRegExp() 844 847 { 845 m_buffer16. clear();848 m_buffer16.resize(0); 846 849 bool lastWasEscape = false; 847 850 bool inBrackets = false; … … 863 866 } else { // end of regexp 864 867 m_pattern = UString(m_buffer16); 865 m_buffer16. clear();868 m_buffer16.resize(0); 866 869 shift(1); 867 870 break;
Note:
See TracChangeset
for help on using the changeset viewer.