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

Side by Side Diff: src/scanner-character-streams.cc

Issue 1154773004: Fix DCHECK on SetBookmark. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: De-nit-ification. Created 5 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
« no previous file with comments | « src/scanner-character-streams.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/scanner-character-streams.h" 7 #include "src/scanner-character-streams.h"
8 8
9 #include "include/v8.h" 9 #include "include/v8.h"
10 #include "src/handles.h" 10 #include "src/handles.h"
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 // Did we use all the data in the data chunk? 381 // Did we use all the data in the data chunk?
382 if (current_data_offset_ == current_data_length_) { 382 if (current_data_offset_ == current_data_length_) {
383 FlushCurrent(); 383 FlushCurrent();
384 } 384 }
385 } 385 }
386 return data_in_buffer; 386 return data_in_buffer;
387 } 387 }
388 388
389 389
390 bool ExternalStreamingStream::SetBookmark() { 390 bool ExternalStreamingStream::SetBookmark() {
391 DCHECK(utf8_split_char_buffer_length_ == 0); // We can't be within a char.
392
393 // Bookmarking for this stream is a bit more complex than expected, since 391 // Bookmarking for this stream is a bit more complex than expected, since
394 // the stream state is distributed over several places: 392 // the stream state is distributed over several places:
395 // - pos_ (inherited from Utf16CharacterStream) 393 // - pos_ (inherited from Utf16CharacterStream)
396 // - buffer_cursor_ and buffer_end_ (also from Utf16CharacterStream) 394 // - buffer_cursor_ and buffer_end_ (also from Utf16CharacterStream)
397 // - buffer_ (from BufferedUtf16CharacterStream) 395 // - buffer_ (from BufferedUtf16CharacterStream)
398 // - current_data_ (+ .._offset_ and .._length) (this class) 396 // - current_data_ (+ .._offset_ and .._length) (this class)
397 // - utf8_split_char_buffer_* (a partial utf8 symbol at the block boundary)
399 // 398 //
400 // The underlying source_stream_ instance likely could re-construct this 399 // The underlying source_stream_ instance likely could re-construct this
401 // local data for us, but with the given interfaces we have no way of 400 // local data for us, but with the given interfaces we have no way of
402 // accomplishing this. Thus, we'll have to save all data locally. 401 // accomplishing this. Thus, we'll have to save all data locally.
403 // 402 //
404 // What gets saved where: 403 // What gets saved where:
405 // - pos_ => bookmark_ 404 // - pos_ => bookmark_
406 // - buffer_[buffer_cursor_ .. buffer_end_] => bookmark_buffer_ 405 // - buffer_[buffer_cursor_ .. buffer_end_] => bookmark_buffer_
407 // - current_data_[.._offset_ .. .._length_] => bookmark_data_ 406 // - current_data_[.._offset_ .. .._length_] => bookmark_data_
407 // - utf8_split_char_buffer_* => bookmark_utf8_split...
408 408
409 bookmark_ = pos_; 409 bookmark_ = pos_;
410 410
411 size_t buffer_length = buffer_end_ - buffer_cursor_; 411 size_t buffer_length = buffer_end_ - buffer_cursor_;
412 bookmark_buffer_.Dispose(); 412 bookmark_buffer_.Dispose();
413 bookmark_buffer_ = Vector<uint16_t>::New(static_cast<int>(buffer_length)); 413 bookmark_buffer_ = Vector<uint16_t>::New(static_cast<int>(buffer_length));
414 CopyCharsUnsigned(bookmark_buffer_.start(), buffer_cursor_, buffer_length); 414 CopyCharsUnsigned(bookmark_buffer_.start(), buffer_cursor_, buffer_length);
415 415
416 size_t data_length = current_data_length_ - current_data_offset_; 416 size_t data_length = current_data_length_ - current_data_offset_;
417 bookmark_data_.Dispose(); 417 bookmark_data_.Dispose();
418 bookmark_data_ = Vector<uint8_t>::New(static_cast<int>(data_length)); 418 bookmark_data_ = Vector<uint8_t>::New(static_cast<int>(data_length));
419 CopyBytes(bookmark_data_.start(), current_data_ + current_data_offset_, 419 CopyBytes(bookmark_data_.start(), current_data_ + current_data_offset_,
420 data_length); 420 data_length);
421 421
422 bookmark_utf8_split_char_buffer_length_ = utf8_split_char_buffer_length_;
423 for (size_t i = 0; i < utf8_split_char_buffer_length_; i++) {
424 bookmark_utf8_split_char_buffer_[i] = utf8_split_char_buffer_[i];
425 }
426
422 return source_stream_->SetBookmark(); 427 return source_stream_->SetBookmark();
423 } 428 }
424 429
425 430
426 void ExternalStreamingStream::ResetToBookmark() { 431 void ExternalStreamingStream::ResetToBookmark() {
427 source_stream_->ResetToBookmark(); 432 source_stream_->ResetToBookmark();
428 FlushCurrent(); 433 FlushCurrent();
429 434
430 pos_ = bookmark_; 435 pos_ = bookmark_;
431 436
432 // current_data_ can point to bookmark_data_'s buffer. 437 // current_data_ can point to bookmark_data_'s buffer.
433 current_data_ = bookmark_data_.start(); 438 current_data_ = bookmark_data_.start();
434 current_data_offset_ = 0; 439 current_data_offset_ = 0;
435 current_data_length_ = bookmark_data_.length(); 440 current_data_length_ = bookmark_data_.length();
436 441
437 // bookmark_buffer_ needs to be copied to buffer_. 442 // bookmark_buffer_ needs to be copied to buffer_.
438 CopyCharsUnsigned(buffer_, bookmark_buffer_.begin(), 443 CopyCharsUnsigned(buffer_, bookmark_buffer_.begin(),
439 bookmark_buffer_.length()); 444 bookmark_buffer_.length());
440 buffer_cursor_ = buffer_; 445 buffer_cursor_ = buffer_;
441 buffer_end_ = buffer_ + bookmark_buffer_.length(); 446 buffer_end_ = buffer_ + bookmark_buffer_.length();
447
448 // utf8 split char buffer
449 utf8_split_char_buffer_length_ = bookmark_utf8_split_char_buffer_length_;
450 for (size_t i = 0; i < bookmark_utf8_split_char_buffer_length_; i++) {
451 utf8_split_char_buffer_[i] = bookmark_utf8_split_char_buffer_[i];
452 }
442 } 453 }
443 454
444 455
445 void ExternalStreamingStream::FlushCurrent() { 456 void ExternalStreamingStream::FlushCurrent() {
446 delete[] current_data_; 457 delete[] current_data_;
447 current_data_ = NULL; 458 current_data_ = NULL;
448 current_data_length_ = 0; 459 current_data_length_ = 0;
449 current_data_offset_ = 0; 460 current_data_offset_ = 0;
450 } 461 }
451 462
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 return true; 549 return true;
539 } 550 }
540 551
541 552
542 void ExternalTwoByteStringUtf16CharacterStream::ResetToBookmark() { 553 void ExternalTwoByteStringUtf16CharacterStream::ResetToBookmark() {
543 DCHECK(bookmark_ != kNoBookmark); 554 DCHECK(bookmark_ != kNoBookmark);
544 pos_ = bookmark_; 555 pos_ = bookmark_;
545 buffer_cursor_ = raw_data_ + bookmark_; 556 buffer_cursor_ = raw_data_ + bookmark_;
546 } 557 }
547 } } // namespace v8::internal 558 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/scanner-character-streams.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698