diff options
Diffstat (limited to 'V8Binding/v8/src/scanner.h')
-rw-r--r-- | V8Binding/v8/src/scanner.h | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/V8Binding/v8/src/scanner.h b/V8Binding/v8/src/scanner.h index eea23a7..340da86 100644 --- a/V8Binding/v8/src/scanner.h +++ b/V8Binding/v8/src/scanner.h @@ -73,24 +73,53 @@ class UTF8Buffer { class UTF16Buffer { public: UTF16Buffer(); + virtual ~UTF16Buffer() {} + + virtual void PushBack(uc32 ch) = 0; + // returns a value < 0 when the buffer end is reached + virtual uc32 Advance() = 0; + virtual void SeekForward(int pos) = 0; - void Initialize(Handle<String> data, unibrow::CharacterStream* stream); - void PushBack(uc32 ch); - uc32 Advance(); // returns a value < 0 when the buffer end is reached - uint16_t CharAt(int index); int pos() const { return pos_; } int size() const { return size_; } Handle<String> SubString(int start, int end); - List<uc32>* pushback_buffer() { return &pushback_buffer_; } - void SeekForward(int pos); - private: + protected: Handle<String> data_; int pos_; int size_; +}; + + +class CharacterStreamUTF16Buffer: public UTF16Buffer { + public: + CharacterStreamUTF16Buffer(); + virtual ~CharacterStreamUTF16Buffer() {} + void Initialize(Handle<String> data, unibrow::CharacterStream* stream); + virtual void PushBack(uc32 ch); + virtual uc32 Advance(); + virtual void SeekForward(int pos); + + private: List<uc32> pushback_buffer_; uc32 last_; unibrow::CharacterStream* stream_; + + List<uc32>* pushback_buffer() { return &pushback_buffer_; } +}; + + +class TwoByteStringUTF16Buffer: public UTF16Buffer { + public: + TwoByteStringUTF16Buffer(); + virtual ~TwoByteStringUTF16Buffer() {} + void Initialize(Handle<ExternalTwoByteString> data); + virtual void PushBack(uc32 ch); + virtual uc32 Advance(); + virtual void SeekForward(int pos); + + private: + const uint16_t* raw_data_; }; @@ -184,8 +213,11 @@ class Scanner { static unibrow::Predicate<unibrow::WhiteSpace, 128> kIsWhiteSpace; private: + CharacterStreamUTF16Buffer char_stream_buffer_; + TwoByteStringUTF16Buffer two_byte_string_buffer_; + // Source. - UTF16Buffer source_; + UTF16Buffer* source_; int position_; // Buffer to hold literal values (identifiers, strings, numbers) @@ -219,8 +251,11 @@ class Scanner { void TerminateLiteral(); // Low-level scanning support. - void Advance(); - void PushBack(uc32 ch); + void Advance() { c0_ = source_->Advance(); } + void PushBack(uc32 ch) { + source_->PushBack(ch); + c0_ = ch; + } bool SkipWhiteSpace(); Token::Value SkipSingleLineComment(); @@ -243,7 +278,7 @@ class Scanner { // Return the current source position. int source_pos() { - return source_.pos() - kCharacterLookaheadBufferSize + position_; + return source_->pos() - kCharacterLookaheadBufferSize + position_; } // Decodes a unicode escape-sequence which is part of an identifier. |