diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-11-23 15:05:51 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-11-23 15:31:48 +0000 |
commit | 9cb87fa7638e305ef35b04f54ba07ac4fa04adcb (patch) | |
tree | 2793d80883b7daab67258117755046d428f9978c /chromium/v8/src/json-stringifier.h | |
parent | 98ff39cb35ef2bd32bb1af9565628a4a4b0979b2 (diff) | |
download | qtwebengine-chromium-9cb87fa7638e305ef35b04f54ba07ac4fa04adcb.tar.gz |
BASELINE: Update Chromium to 47.0.2526.71
Also adds a few missing spellcheck sources.
Change-Id: I300864710316ff3cd3ad456dd7a3d048b45f57d5
Reviewed-by: Michal Klocek <michal.klocek@theqtcompany.com>
Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'chromium/v8/src/json-stringifier.h')
-rw-r--r-- | chromium/v8/src/json-stringifier.h | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/chromium/v8/src/json-stringifier.h b/chromium/v8/src/json-stringifier.h index 260cade1ffc..fa4946dad7d 100644 --- a/chromium/v8/src/json-stringifier.h +++ b/chromium/v8/src/json-stringifier.h @@ -82,7 +82,8 @@ class BasicJsonStringifier BASE_EMBEDDED { INLINE(Result SerializeJSArray(Handle<JSArray> object)); INLINE(Result SerializeJSObject(Handle<JSObject> object)); - Result SerializeJSArraySlow(Handle<JSArray> object, uint32_t length); + Result SerializeJSArraySlow(Handle<JSArray> object, uint32_t start, + uint32_t length); void SerializeString(Handle<String> object); @@ -436,8 +437,8 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( builder_.AppendCharacter('['); switch (object->GetElementsKind()) { case FAST_SMI_ELEMENTS: { - Handle<FixedArray> elements( - FixedArray::cast(object->elements()), isolate_); + Handle<FixedArray> elements(FixedArray::cast(object->elements()), + isolate_); for (uint32_t i = 0; i < length; i++) { if (i > 0) builder_.AppendCharacter(','); SerializeSmi(Smi::cast(elements->get(i))); @@ -456,14 +457,20 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( break; } case FAST_ELEMENTS: { - Handle<FixedArray> elements( - FixedArray::cast(object->elements()), isolate_); + Handle<Object> old_length(object->length(), isolate_); for (uint32_t i = 0; i < length; i++) { + if (object->length() != *old_length || + object->GetElementsKind() != FAST_ELEMENTS) { + Result result = SerializeJSArraySlow(object, i, length); + if (result != SUCCESS) return result; + break; + } if (i > 0) builder_.AppendCharacter(','); - Result result = - SerializeElement(isolate_, - Handle<Object>(elements->get(i), isolate_), - i); + Result result = SerializeElement( + isolate_, + Handle<Object>(FixedArray::cast(object->elements())->get(i), + isolate_), + i); if (result == SUCCESS) continue; if (result == UNCHANGED) { builder_.AppendCString("null"); @@ -473,11 +480,10 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( } break; } - // TODO(yangguo): The FAST_HOLEY_* cases could be handled in a faster way. - // They resemble the non-holey cases except that a prototype chain lookup - // is necessary for holes. + // The FAST_HOLEY_* cases could be handled in a faster way. They resemble + // the non-holey cases except that a lookup is necessary for holes. default: { - Result result = SerializeJSArraySlow(object, length); + Result result = SerializeJSArraySlow(object, 0, length); if (result != SUCCESS) return result; break; } @@ -489,8 +495,8 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow( - Handle<JSArray> object, uint32_t length) { - for (uint32_t i = 0; i < length; i++) { + Handle<JSArray> object, uint32_t start, uint32_t length) { + for (uint32_t i = start; i < length; i++) { if (i > 0) builder_.AppendCharacter(','); Handle<Object> element; ASSIGN_RETURN_ON_EXCEPTION_VALUE( |