| Index: src/scanner.h
|
| ===================================================================
|
| --- src/scanner.h (revision 3253)
|
| +++ src/scanner.h (working copy)
|
| @@ -41,7 +41,6 @@
|
| ~UTF8Buffer();
|
|
|
| void AddChar(uc32 c) {
|
| - ASSERT_NOT_NULL(data_);
|
| if (cursor_ <= limit_ &&
|
| static_cast<unsigned>(c) <= unibrow::Utf8::kMaxOneByteChar) {
|
| *cursor_++ = static_cast<char>(c);
|
| @@ -50,29 +49,16 @@
|
| }
|
| }
|
|
|
| - void Reset() {
|
| - if (data_ == NULL) {
|
| - data_ = NewArray<char>(kInitialCapacity);
|
| - limit_ = ComputeLimit(data_, kInitialCapacity);
|
| - }
|
| - cursor_ = data_;
|
| - }
|
| -
|
| - int pos() const {
|
| - ASSERT_NOT_NULL(data_);
|
| - return cursor_ - data_;
|
| - }
|
| -
|
| + void Reset() { cursor_ = data_; }
|
| + int pos() const { return cursor_ - data_; }
|
| char* data() const { return data_; }
|
|
|
| private:
|
| - static const int kInitialCapacity = 256;
|
| char* data_;
|
| char* cursor_;
|
| char* limit_;
|
|
|
| int Capacity() const {
|
| - ASSERT_NOT_NULL(data_);
|
| return (limit_ - data_) + unibrow::Utf8::kMaxEncodedSize;
|
| }
|
|
|
| @@ -292,32 +278,28 @@
|
| // token returned by Next()). The string is 0-terminated and in
|
| // UTF-8 format; they may contain 0-characters. Literal strings are
|
| // collected for identifiers, strings, and numbers.
|
| - // These functions only give the correct result if the literal
|
| - // was scanned between calls to StartLiteral() and TerminateLiteral().
|
| const char* literal_string() const {
|
| - return current_.literal_buffer->data();
|
| + return &literals_.data()[current_.literal_pos];
|
| }
|
| int literal_length() const {
|
| - // Excluding terminal '\0' added by TerminateLiteral().
|
| - return current_.literal_buffer->pos() - 1;
|
| + return current_.literal_end - current_.literal_pos;
|
| }
|
|
|
| + Vector<const char> next_literal() const {
|
| + return Vector<const char>(next_literal_string(), next_literal_length());
|
| + }
|
| +
|
| // Returns the literal string for the next token (the token that
|
| // would be returned if Next() were called).
|
| const char* next_literal_string() const {
|
| - return next_.literal_buffer->data();
|
| + return &literals_.data()[next_.literal_pos];
|
| }
|
| // Returns the length of the next token (that would be returned if
|
| // Next() were called).
|
| int next_literal_length() const {
|
| - return next_.literal_buffer->pos() - 1;
|
| + return next_.literal_end - next_.literal_pos;
|
| }
|
|
|
| - Vector<const char> next_literal() const {
|
| - return Vector<const char>(next_literal_string(),
|
| - next_literal_length());
|
| - }
|
| -
|
| // Scans the input as a regular expression pattern, previous
|
| // character(s) must be /(=). Returns true if a pattern is scanned.
|
| bool ScanRegExpPattern(bool seen_equal);
|
| @@ -357,8 +339,7 @@
|
|
|
| // Buffer to hold literal values (identifiers, strings, numbers)
|
| // using 0-terminated UTF-8 encoding.
|
| - UTF8Buffer literal_buffer_1_;
|
| - UTF8Buffer literal_buffer_2_;
|
| + UTF8Buffer literals_;
|
|
|
| bool stack_overflow_;
|
| static StaticResource<Utf8Decoder> utf8_decoder_;
|
| @@ -370,7 +351,7 @@
|
| struct TokenDesc {
|
| Token::Value token;
|
| Location location;
|
| - UTF8Buffer* literal_buffer;
|
| + int literal_pos, literal_end;
|
| };
|
|
|
| TokenDesc current_; // desc for current token (as returned by Next())
|
|
|