| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 1f1e5bb5b10660d7c34002cff08e81bc444d9816..81a525a05b7d214a8b19e49201274d408aa8d3b0 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -4124,16 +4124,13 @@ bool JSReceiver::IsSimpleEnum() {
|
| o = JSObject::cast(o)->GetPrototype()) {
|
| if (!o->IsJSObject()) return false;
|
| JSObject* curr = JSObject::cast(o);
|
| - if (!curr->map()->instance_descriptors()->HasEnumCache()) return false;
|
| + int enum_length = curr->map()->EnumLength();
|
| + if (enum_length == Map::kInvalidEnumCache) return false;
|
| ASSERT(!curr->HasNamedInterceptor());
|
| ASSERT(!curr->HasIndexedInterceptor());
|
| ASSERT(!curr->IsAccessCheckNeeded());
|
| if (curr->NumberOfEnumElements() > 0) return false;
|
| - if (curr != this) {
|
| - FixedArray* curr_fixed_array =
|
| - FixedArray::cast(curr->map()->instance_descriptors()->GetEnumCache());
|
| - if (curr_fixed_array->length() > 0) return false;
|
| - }
|
| + if (curr != this && enum_length != 0) return false;
|
| }
|
| return true;
|
| }
|
| @@ -4816,6 +4813,7 @@ MaybeObject* Map::RawCopy(int instance_size) {
|
| result->set_bit_field2(bit_field2());
|
| result->set_bit_field3(bit_field3());
|
| result->SetLastAdded(kNoneAdded);
|
| + result->SetEnumLength(kInvalidEnumCache);
|
| return result;
|
| }
|
|
|
| @@ -5764,7 +5762,7 @@ MaybeObject* FixedArray::UnionOfKeys(FixedArray* other) {
|
| MaybeObject* maybe_result =
|
| accessor->AddElementsToFixedArray(NULL, NULL, this, other);
|
| FixedArray* result;
|
| - if (!maybe_result->To<FixedArray>(&result)) return maybe_result;
|
| + if (!maybe_result->To(&result)) return maybe_result;
|
| #ifdef DEBUG
|
| if (FLAG_enable_slow_asserts) {
|
| for (int i = 0; i < result->length(); i++) {
|
|
|