diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-07-12 14:07:37 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-07-17 10:29:26 +0000 |
commit | ec02ee4181c49b61fce1c8fb99292dbb8139cc90 (patch) | |
tree | 25cde714b2b71eb639d1cd53f5a22e9ba76e14ef /chromium/v8/src/json-parser.cc | |
parent | bb09965444b5bb20b096a291445170876225268d (diff) | |
download | qtwebengine-chromium-ec02ee4181c49b61fce1c8fb99292dbb8139cc90.tar.gz |
BASELINE: Update Chromium to 59.0.3071.134
Change-Id: Id02ef6fb2204c5fd21668a1c3e6911c83b17585a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/v8/src/json-parser.cc')
-rw-r--r-- | chromium/v8/src/json-parser.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/chromium/v8/src/json-parser.cc b/chromium/v8/src/json-parser.cc index 2ec79caefcd..de404e4c629 100644 --- a/chromium/v8/src/json-parser.cc +++ b/chromium/v8/src/json-parser.cc @@ -720,6 +720,10 @@ Handle<String> JsonParser<seq_one_byte>::ScanJsonString() { // Fast path for existing internalized strings. If the the string being // parsed is not a known internalized string, contains backslashes or // unexpectedly reaches the end of string, return with an empty handle. + + // We intentionally use local variables instead of fields, compute hash + // while we are iterating a string and manually inline StringTable lookup + // here. uint32_t running_hash = isolate()->heap()->HashSeed(); int position = position_; uc32 c0 = c0_; @@ -731,11 +735,19 @@ Handle<String> JsonParser<seq_one_byte>::ScanJsonString() { return SlowScanJsonString<SeqOneByteString, uint8_t>(source_, beg_pos, position_); } - if (c0 < 0x20) return Handle<String>::null(); + if (c0 < 0x20) { + c0_ = c0; + position_ = position; + return Handle<String>::null(); + } running_hash = StringHasher::AddCharacterCore(running_hash, static_cast<uint16_t>(c0)); position++; - if (position >= source_length_) return Handle<String>::null(); + if (position >= source_length_) { + c0_ = kEndOfString; + position_ = position; + return Handle<String>::null(); + } c0 = seq_source_->SeqOneByteStringGet(position); } while (c0 != '"'); int length = position - position_; |