| OLD | NEW |
| 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 "src/handles.h" | 9 #include "src/handles.h" |
| 10 #include "src/unicode-inl.h" | 10 #include "src/unicode-inl.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 buffer_cursor_ = buffer_; | 71 buffer_cursor_ = buffer_; |
| 72 if (pushback_limit_ != NULL) { | 72 if (pushback_limit_ != NULL) { |
| 73 // Leave pushback mode. | 73 // Leave pushback mode. |
| 74 buffer_end_ = pushback_limit_; | 74 buffer_end_ = pushback_limit_; |
| 75 pushback_limit_ = NULL; | 75 pushback_limit_ = NULL; |
| 76 // If there were any valid characters left at the | 76 // If there were any valid characters left at the |
| 77 // start of the buffer, use those. | 77 // start of the buffer, use those. |
| 78 if (buffer_cursor_ < buffer_end_) return true; | 78 if (buffer_cursor_ < buffer_end_) return true; |
| 79 // Otherwise read a new block. | 79 // Otherwise read a new block. |
| 80 } | 80 } |
| 81 unsigned length = FillBuffer(pos_, kBufferSize); | 81 unsigned length = FillBuffer(pos_); |
| 82 buffer_end_ = buffer_ + length; | 82 buffer_end_ = buffer_ + length; |
| 83 return length > 0; | 83 return length > 0; |
| 84 } | 84 } |
| 85 | 85 |
| 86 | 86 |
| 87 unsigned BufferedUtf16CharacterStream::SlowSeekForward(unsigned delta) { | 87 unsigned BufferedUtf16CharacterStream::SlowSeekForward(unsigned delta) { |
| 88 // Leave pushback mode (i.e., ignore that there might be valid data | 88 // Leave pushback mode (i.e., ignore that there might be valid data |
| 89 // in the buffer before the pushback_limit_ point). | 89 // in the buffer before the pushback_limit_ point). |
| 90 pushback_limit_ = NULL; | 90 pushback_limit_ = NULL; |
| 91 return BufferSeekForward(delta); | 91 return BufferSeekForward(delta); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 111 | 111 |
| 112 | 112 |
| 113 unsigned GenericStringUtf16CharacterStream::BufferSeekForward(unsigned delta) { | 113 unsigned GenericStringUtf16CharacterStream::BufferSeekForward(unsigned delta) { |
| 114 unsigned old_pos = pos_; | 114 unsigned old_pos = pos_; |
| 115 pos_ = Min(pos_ + delta, length_); | 115 pos_ = Min(pos_ + delta, length_); |
| 116 ReadBlock(); | 116 ReadBlock(); |
| 117 return pos_ - old_pos; | 117 return pos_ - old_pos; |
| 118 } | 118 } |
| 119 | 119 |
| 120 | 120 |
| 121 unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos, | 121 unsigned GenericStringUtf16CharacterStream::FillBuffer(unsigned from_pos) { |
| 122 unsigned length) { | |
| 123 if (from_pos >= length_) return 0; | 122 if (from_pos >= length_) return 0; |
| 123 unsigned length = kBufferSize; |
| 124 if (from_pos + length > length_) { | 124 if (from_pos + length > length_) { |
| 125 length = length_ - from_pos; | 125 length = length_ - from_pos; |
| 126 } | 126 } |
| 127 String::WriteToFlat<uc16>(*string_, buffer_, from_pos, from_pos + length); | 127 String::WriteToFlat<uc16>(*string_, buffer_, from_pos, from_pos + length); |
| 128 return length; | 128 return length; |
| 129 } | 129 } |
| 130 | 130 |
| 131 | 131 |
| 132 // ---------------------------------------------------------------------------- | 132 // ---------------------------------------------------------------------------- |
| 133 // Utf8ToUtf16CharacterStream | 133 // Utf8ToUtf16CharacterStream |
| (...skipping 14 matching lines...) Expand all Loading... |
| 148 unsigned Utf8ToUtf16CharacterStream::BufferSeekForward(unsigned delta) { | 148 unsigned Utf8ToUtf16CharacterStream::BufferSeekForward(unsigned delta) { |
| 149 unsigned old_pos = pos_; | 149 unsigned old_pos = pos_; |
| 150 unsigned target_pos = pos_ + delta; | 150 unsigned target_pos = pos_ + delta; |
| 151 SetRawPosition(target_pos); | 151 SetRawPosition(target_pos); |
| 152 pos_ = raw_character_position_; | 152 pos_ = raw_character_position_; |
| 153 ReadBlock(); | 153 ReadBlock(); |
| 154 return pos_ - old_pos; | 154 return pos_ - old_pos; |
| 155 } | 155 } |
| 156 | 156 |
| 157 | 157 |
| 158 unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position, | 158 unsigned Utf8ToUtf16CharacterStream::FillBuffer(unsigned char_position) { |
| 159 unsigned length) { | |
| 160 static const unibrow::uchar kMaxUtf16Character = 0xffff; | 159 static const unibrow::uchar kMaxUtf16Character = 0xffff; |
| 161 SetRawPosition(char_position); | 160 SetRawPosition(char_position); |
| 162 if (raw_character_position_ != char_position) { | 161 if (raw_character_position_ != char_position) { |
| 163 // char_position was not a valid position in the stream (hit the end | 162 // char_position was not a valid position in the stream (hit the end |
| 164 // while spooling to it). | 163 // while spooling to it). |
| 165 return 0u; | 164 return 0u; |
| 166 } | 165 } |
| 167 unsigned i = 0; | 166 unsigned i = 0; |
| 168 while (i < length - 1) { | 167 while (i < kBufferSize - 1) { |
| 169 if (raw_data_pos_ == raw_data_length_) break; | 168 if (raw_data_pos_ == raw_data_length_) break; |
| 170 unibrow::uchar c = raw_data_[raw_data_pos_]; | 169 unibrow::uchar c = raw_data_[raw_data_pos_]; |
| 171 if (c <= unibrow::Utf8::kMaxOneByteChar) { | 170 if (c <= unibrow::Utf8::kMaxOneByteChar) { |
| 172 raw_data_pos_++; | 171 raw_data_pos_++; |
| 173 } else { | 172 } else { |
| 174 c = unibrow::Utf8::CalculateValue(raw_data_ + raw_data_pos_, | 173 c = unibrow::Utf8::CalculateValue(raw_data_ + raw_data_pos_, |
| 175 raw_data_length_ - raw_data_pos_, | 174 raw_data_length_ - raw_data_pos_, |
| 176 &raw_data_pos_); | 175 &raw_data_pos_); |
| 177 } | 176 } |
| 178 if (c > kMaxUtf16Character) { | 177 if (c > kMaxUtf16Character) { |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 int end_position) | 290 int end_position) |
| 292 : Utf16CharacterStream(), | 291 : Utf16CharacterStream(), |
| 293 source_(data), | 292 source_(data), |
| 294 raw_data_(data->GetTwoByteData(start_position)) { | 293 raw_data_(data->GetTwoByteData(start_position)) { |
| 295 buffer_cursor_ = raw_data_, | 294 buffer_cursor_ = raw_data_, |
| 296 buffer_end_ = raw_data_ + (end_position - start_position); | 295 buffer_end_ = raw_data_ + (end_position - start_position); |
| 297 pos_ = start_position; | 296 pos_ = start_position; |
| 298 } | 297 } |
| 299 | 298 |
| 300 } } // namespace v8::internal | 299 } } // namespace v8::internal |
| OLD | NEW |