summaryrefslogtreecommitdiff
path: root/chromium/v8/src/json-stringifier.h
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-11-23 15:05:51 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-11-23 15:31:48 +0000
commit9cb87fa7638e305ef35b04f54ba07ac4fa04adcb (patch)
tree2793d80883b7daab67258117755046d428f9978c /chromium/v8/src/json-stringifier.h
parent98ff39cb35ef2bd32bb1af9565628a4a4b0979b2 (diff)
downloadqtwebengine-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.h36
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(