summaryrefslogtreecommitdiff
path: root/chromium/v8/src/json-parser.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-12 14:07:37 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-17 10:29:26 +0000
commitec02ee4181c49b61fce1c8fb99292dbb8139cc90 (patch)
tree25cde714b2b71eb639d1cd53f5a22e9ba76e14ef /chromium/v8/src/json-parser.cc
parentbb09965444b5bb20b096a291445170876225268d (diff)
downloadqtwebengine-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.cc16
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_;