summaryrefslogtreecommitdiff
path: root/deps/v8/src/parsing/scanner-character-streams.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/parsing/scanner-character-streams.h')
-rw-r--r--deps/v8/src/parsing/scanner-character-streams.h57
1 files changed, 31 insertions, 26 deletions
diff --git a/deps/v8/src/parsing/scanner-character-streams.h b/deps/v8/src/parsing/scanner-character-streams.h
index 603db93d02..94d8284f14 100644
--- a/deps/v8/src/parsing/scanner-character-streams.h
+++ b/deps/v8/src/parsing/scanner-character-streams.h
@@ -14,6 +14,7 @@ namespace internal {
// Forward declarations.
class ExternalTwoByteString;
+class ExternalOneByteString;
// A buffered character stream based on a random access character
// source (ReadBlock can be called with pos_ pointing to any position,
@@ -63,29 +64,6 @@ class GenericStringUtf16CharacterStream: public BufferedUtf16CharacterStream {
};
-// Utf16 stream based on a literal UTF-8 string.
-class Utf8ToUtf16CharacterStream: public BufferedUtf16CharacterStream {
- public:
- Utf8ToUtf16CharacterStream(const byte* data, size_t length);
- ~Utf8ToUtf16CharacterStream() override;
-
- static size_t CopyChars(uint16_t* dest, size_t length, const byte* src,
- size_t* src_pos, size_t src_length);
-
- protected:
- size_t BufferSeekForward(size_t delta) override;
- size_t FillBuffer(size_t char_position) override;
- void SetRawPosition(size_t char_position);
-
- const byte* raw_data_;
- size_t raw_data_length_; // Measured in bytes, not characters.
- size_t raw_data_pos_;
- // The character position of the character at raw_data[raw_data_pos_].
- // Not necessarily the same as pos_.
- size_t raw_character_position_;
-};
-
-
// ExternalStreamingStream is a wrapper around an ExternalSourceStream (see
// include/v8.h) subclass implemented by the embedder.
class ExternalStreamingStream : public BufferedUtf16CharacterStream {
@@ -158,14 +136,16 @@ class ExternalTwoByteStringUtf16CharacterStream: public Utf16CharacterStream {
void PushBack(uc32 character) override {
DCHECK(buffer_cursor_ > raw_data_);
- buffer_cursor_--;
pos_--;
+ if (character != kEndOfInput) {
+ buffer_cursor_--;
+ }
}
bool SetBookmark() override;
void ResetToBookmark() override;
- protected:
+ private:
size_t SlowSeekForward(size_t delta) override {
// Fast case always handles seeking.
return 0;
@@ -174,12 +154,37 @@ class ExternalTwoByteStringUtf16CharacterStream: public Utf16CharacterStream {
// Entire string is read at start.
return false;
}
- Handle<ExternalTwoByteString> source_;
const uc16* raw_data_; // Pointer to the actual array of characters.
+ static const size_t kNoBookmark = -1;
+
+ size_t bookmark_;
+};
+
+// UTF16 buffer to read characters from an external latin1 string.
+class ExternalOneByteStringUtf16CharacterStream
+ : public BufferedUtf16CharacterStream {
+ public:
+ ExternalOneByteStringUtf16CharacterStream(Handle<ExternalOneByteString> data,
+ int start_position,
+ int end_position);
+ ~ExternalOneByteStringUtf16CharacterStream() override;
+
+ // For testing:
+ explicit ExternalOneByteStringUtf16CharacterStream(const char* data);
+ ExternalOneByteStringUtf16CharacterStream(const char* data, size_t length);
+
+ bool SetBookmark() override;
+ void ResetToBookmark() override;
+
private:
static const size_t kNoBookmark = -1;
+ size_t BufferSeekForward(size_t delta) override;
+ size_t FillBuffer(size_t position) override;
+
+ const uint8_t* raw_data_; // Pointer to the actual array of characters.
+ size_t length_;
size_t bookmark_;
};