| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 507d041a39ecc186147c244cec06652644984f17..770483f5d52cde2c4ec3bcf5687225aa4426da97 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -3675,22 +3675,27 @@ static bool IsFastLiteral(Handle<JSObject> boilerplate,
|
| Handle<FixedArrayBase> elements(boilerplate->elements());
|
| if (elements->length() > 0 &&
|
| elements->map() != boilerplate->GetHeap()->fixed_cow_array_map()) {
|
| - if (!boilerplate->HasFastElements()) return false;
|
| - int length = elements->length();
|
| - for (int i = 0; i < length; i++) {
|
| - if ((*max_properties)-- == 0) return false;
|
| - Handle<Object> value = JSObject::GetElement(boilerplate, i);
|
| - if (value->IsJSObject()) {
|
| - Handle<JSObject> value_object = Handle<JSObject>::cast(value);
|
| - if (!IsFastLiteral(value_object,
|
| - max_depth - 1,
|
| - max_properties,
|
| - total_size)) {
|
| - return false;
|
| + if (boilerplate->HasFastDoubleElements()) {
|
| + *total_size += FixedDoubleArray::SizeFor(elements->length());
|
| + } else if (boilerplate->HasFastElements()) {
|
| + int length = elements->length();
|
| + for (int i = 0; i < length; i++) {
|
| + if ((*max_properties)-- == 0) return false;
|
| + Handle<Object> value = JSObject::GetElement(boilerplate, i);
|
| + if (value->IsJSObject()) {
|
| + Handle<JSObject> value_object = Handle<JSObject>::cast(value);
|
| + if (!IsFastLiteral(value_object,
|
| + max_depth - 1,
|
| + max_properties,
|
| + total_size)) {
|
| + return false;
|
| + }
|
| }
|
| }
|
| + *total_size += FixedArray::SizeFor(length);
|
| + } else {
|
| + return false;
|
| }
|
| - *total_size += FixedArray::SizeFor(length);
|
| }
|
|
|
| Handle<FixedArray> properties(boilerplate->properties());
|
|
|