From 9cb87fa7638e305ef35b04f54ba07ac4fa04adcb Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 23 Nov 2015 15:05:51 +0100 Subject: BASELINE: Update Chromium to 47.0.2526.71 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also adds a few missing spellcheck sources. Change-Id: I300864710316ff3cd3ad456dd7a3d048b45f57d5 Reviewed-by: Michal Klocek Reviewed-by: Michael BrĂ¼ning --- chromium/v8/src/json-stringifier.h | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'chromium/v8/src/json-stringifier.h') 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 object)); INLINE(Result SerializeJSObject(Handle object)); - Result SerializeJSArraySlow(Handle object, uint32_t length); + Result SerializeJSArraySlow(Handle object, uint32_t start, + uint32_t length); void SerializeString(Handle object); @@ -436,8 +437,8 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( builder_.AppendCharacter('['); switch (object->GetElementsKind()) { case FAST_SMI_ELEMENTS: { - Handle elements( - FixedArray::cast(object->elements()), isolate_); + Handle 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 elements( - FixedArray::cast(object->elements()), isolate_); + Handle 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(elements->get(i), isolate_), - i); + Result result = SerializeElement( + isolate_, + Handle(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 object, uint32_t length) { - for (uint32_t i = 0; i < length; i++) { + Handle object, uint32_t start, uint32_t length) { + for (uint32_t i = start; i < length; i++) { if (i > 0) builder_.AppendCharacter(','); Handle element; ASSIGN_RETURN_ON_EXCEPTION_VALUE( -- cgit v1.2.1