Skip to content

Commit

Permalink
deps: update V8 to 4.6.85.20
Browse files Browse the repository at this point in the history
  • Loading branch information
targos committed Sep 22, 2015
1 parent 2731e00 commit 3921284
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 8 deletions.
2 changes: 1 addition & 1 deletion deps/v8/include/v8-version.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 4
#define V8_MINOR_VERSION 6
#define V8_BUILD_NUMBER 85
#define V8_PATCH_LEVEL 19
#define V8_PATCH_LEVEL 20

// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
Expand Down
38 changes: 31 additions & 7 deletions deps/v8/src/scanner-character-streams.cc
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,7 @@ size_t ExternalStreamingStream::FillBuffer(size_t position) {
current_data_length_ = source_stream_->GetMoreData(&current_data_);
current_data_offset_ = 0;
bool data_ends = current_data_length_ == 0;
bookmark_data_is_from_current_data_ = false;

// A caveat: a data chunk might end with bytes from an incomplete UTF-8
// character (the rest of the bytes will be in the next chunk).
Expand Down Expand Up @@ -405,6 +406,15 @@ bool ExternalStreamingStream::SetBookmark() {
// - buffer_[buffer_cursor_ .. buffer_end_] => bookmark_buffer_
// - current_data_[.._offset_ .. .._length_] => bookmark_data_
// - utf8_split_char_buffer_* => bookmark_utf8_split...
//
// To make sure we don't unnecessarily copy data, we also maintain
// whether bookmark_data_ contains a copy of the current current_data_
// block. This is done with:
// - bookmark_data_is_from_current_data_
// - bookmark_data_offset_: offset into bookmark_data_
//
// Note that bookmark_data_is_from_current_data_ must be maintained
// whenever current_data_ is updated.

bookmark_ = pos_;

Expand All @@ -414,10 +424,21 @@ bool ExternalStreamingStream::SetBookmark() {
CopyCharsUnsigned(bookmark_buffer_.start(), buffer_cursor_, buffer_length);

size_t data_length = current_data_length_ - current_data_offset_;
bookmark_data_.Dispose();
bookmark_data_ = Vector<uint8_t>::New(static_cast<int>(data_length));
CopyBytes(bookmark_data_.start(), current_data_ + current_data_offset_,
data_length);
size_t bookmark_data_length = static_cast<size_t>(bookmark_data_.length());
if (bookmark_data_is_from_current_data_ &&
data_length < bookmark_data_length) {
// Fast case: bookmark_data_ was previously copied from the current
// data block, and we have enough data for this bookmark.
bookmark_data_offset_ = bookmark_data_length - data_length;
} else {
// Slow case: We need to copy current_data_.
bookmark_data_.Dispose();
bookmark_data_ = Vector<uint8_t>::New(static_cast<int>(data_length));
CopyBytes(bookmark_data_.start(), current_data_ + current_data_offset_,
data_length);
bookmark_data_is_from_current_data_ = true;
bookmark_data_offset_ = 0;
}

bookmark_utf8_split_char_buffer_length_ = utf8_split_char_buffer_length_;
for (size_t i = 0; i < utf8_split_char_buffer_length_; i++) {
Expand All @@ -436,12 +457,14 @@ void ExternalStreamingStream::ResetToBookmark() {

// bookmark_data_* => current_data_*
// (current_data_ assumes ownership of its memory.)
uint8_t* data = new uint8_t[bookmark_data_.length()];
current_data_offset_ = 0;
current_data_length_ = bookmark_data_.length();
CopyCharsUnsigned(data, bookmark_data_.begin(), bookmark_data_.length());
current_data_length_ = bookmark_data_.length() - bookmark_data_offset_;
uint8_t* data = new uint8_t[current_data_length_];
CopyCharsUnsigned(data, bookmark_data_.begin() + bookmark_data_offset_,
current_data_length_);
delete[] current_data_;
current_data_ = data;
bookmark_data_is_from_current_data_ = true;

// bookmark_buffer_ needs to be copied to buffer_.
CopyCharsUnsigned(buffer_, bookmark_buffer_.begin(),
Expand All @@ -462,6 +485,7 @@ void ExternalStreamingStream::FlushCurrent() {
current_data_ = NULL;
current_data_length_ = 0;
current_data_offset_ = 0;
bookmark_data_is_from_current_data_ = false;
}


Expand Down
4 changes: 4 additions & 0 deletions deps/v8/src/scanner-character-streams.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ class ExternalStreamingStream : public BufferedUtf16CharacterStream {
current_data_length_(0),
utf8_split_char_buffer_length_(0),
bookmark_(0),
bookmark_data_is_from_current_data_(false),
bookmark_data_offset_(0),
bookmark_utf8_split_char_buffer_length_(0) {}

virtual ~ExternalStreamingStream() {
Expand Down Expand Up @@ -134,6 +136,8 @@ class ExternalStreamingStream : public BufferedUtf16CharacterStream {
size_t bookmark_;
Vector<uint16_t> bookmark_buffer_;
Vector<uint8_t> bookmark_data_;
bool bookmark_data_is_from_current_data_;
size_t bookmark_data_offset_;
uint8_t bookmark_utf8_split_char_buffer_[4];
size_t bookmark_utf8_split_char_buffer_length_;
};
Expand Down

0 comments on commit 3921284

Please sign in to comment.