Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: src/scanner.h

Issue 113336: Optimize the lexical scanner by selective inlining, and... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/scanner.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 21 matching lines...) Expand all
32 #include "char-predicates-inl.h" 32 #include "char-predicates-inl.h"
33 33
34 namespace v8 { namespace internal { 34 namespace v8 { namespace internal {
35 35
36 36
37 class UTF8Buffer { 37 class UTF8Buffer {
38 public: 38 public:
39 UTF8Buffer(); 39 UTF8Buffer();
40 ~UTF8Buffer(); 40 ~UTF8Buffer();
41 41
42 void Initialize(char* src, int length); 42 void AddChar(uc32 c) {
43 void AddChar(uc32 c); 43 if (cursor_ <= limit_ &&
44 void Reset() { pos_ = 0; } 44 static_cast<unsigned>(c) <= unibrow::Utf8::kMaxOneByteChar) {
45 int pos() const { return pos_; } 45 *cursor_++ = static_cast<char>(c);
46 } else {
47 AddCharSlow(c);
48 }
49 }
50
51 void Reset() { cursor_ = data_; }
52 int pos() const { return cursor_ - data_; }
46 char* data() const { return data_; } 53 char* data() const { return data_; }
47 54
48 private: 55 private:
49 char* data_; 56 char* data_;
50 int size_; 57 char* cursor_;
51 int pos_; 58 char* limit_;
59
60 int Capacity() const {
61 return (limit_ - data_) + unibrow::Utf8::kMaxEncodedSize;
62 }
63
64 static char* ComputeLimit(char* data, int capacity) {
65 return (data + capacity) - unibrow::Utf8::kMaxEncodedSize;
66 }
67
68 void AddCharSlow(uc32 c);
52 }; 69 };
53 70
54 71
55 class UTF16Buffer { 72 class UTF16Buffer {
56 public: 73 public:
57 UTF16Buffer(); 74 UTF16Buffer();
58 75
59 void Initialize(Handle<String> data, unibrow::CharacterStream* stream); 76 void Initialize(Handle<String> data, unibrow::CharacterStream* stream);
60 void PushBack(uc32 ch); 77 void PushBack(uc32 ch);
61 uc32 Advance(); // returns a value < 0 when the buffer end is reached 78 uc32 Advance(); // returns a value < 0 when the buffer end is reached
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // Literal buffer support 214 // Literal buffer support
198 void StartLiteral(); 215 void StartLiteral();
199 void AddChar(uc32 ch); 216 void AddChar(uc32 ch);
200 void AddCharAdvance(); 217 void AddCharAdvance();
201 void TerminateLiteral(); 218 void TerminateLiteral();
202 219
203 // Low-level scanning support. 220 // Low-level scanning support.
204 void Advance(); 221 void Advance();
205 void PushBack(uc32 ch); 222 void PushBack(uc32 ch);
206 223
207 void SkipWhiteSpace(bool initial); 224 bool SkipWhiteSpace();
208 Token::Value SkipSingleLineComment(); 225 Token::Value SkipSingleLineComment();
209 Token::Value SkipMultiLineComment(); 226 Token::Value SkipMultiLineComment();
210 227
211 inline Token::Value Select(Token::Value tok); 228 inline Token::Value Select(Token::Value tok);
212 inline Token::Value Select(uc32 next, Token::Value then, Token::Value else_); 229 inline Token::Value Select(uc32 next, Token::Value then, Token::Value else_);
213 230
214 void Scan(); 231 void Scan();
215 Token::Value ScanToken();
216 void ScanDecimalDigits(); 232 void ScanDecimalDigits();
217 Token::Value ScanNumber(bool seen_period); 233 Token::Value ScanNumber(bool seen_period);
218 Token::Value ScanIdentifier(); 234 Token::Value ScanIdentifier();
219 uc32 ScanHexEscape(uc32 c, int length); 235 uc32 ScanHexEscape(uc32 c, int length);
220 uc32 ScanOctalEscape(uc32 c, int length); 236 uc32 ScanOctalEscape(uc32 c, int length);
221 void ScanEscape(); 237 void ScanEscape();
222 Token::Value ScanString(); 238 Token::Value ScanString();
223 239
224 // Scans a possible HTML comment -- begins with '<!'. 240 // Scans a possible HTML comment -- begins with '<!'.
225 Token::Value ScanHtmlComment(); 241 Token::Value ScanHtmlComment();
226 242
227 // Return the current source position. 243 // Return the current source position.
228 int source_pos() { 244 int source_pos() {
229 return source_.pos() - kCharacterLookaheadBufferSize + position_; 245 return source_.pos() - kCharacterLookaheadBufferSize + position_;
230 } 246 }
231 247
232 // Decodes a unicode escape-sequence which is part of an identifier. 248 // Decodes a unicode escape-sequence which is part of an identifier.
233 // If the escape sequence cannot be decoded the result is kBadRune. 249 // If the escape sequence cannot be decoded the result is kBadRune.
234 uc32 ScanIdentifierUnicodeEscape(); 250 uc32 ScanIdentifierUnicodeEscape();
235 }; 251 };
236 252
237 } } // namespace v8::internal 253 } } // namespace v8::internal
238 254
239 #endif // V8_SCANNER_H_ 255 #endif // V8_SCANNER_H_
OLDNEW
« no previous file with comments | « no previous file | src/scanner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698