| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index ad5b0e3e5a87dcf0a9e1e28e2d348cc7d44ecd34..c5631b14e7750aa089eba7d59dc1234d9ea2f002 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -1865,14 +1865,15 @@ bool JSObject::HasFastProperties() {
|
| }
|
|
|
|
|
| -bool JSObject::TooManyFastProperties(int properties,
|
| - JSObject::StoreFromKeyed store_mode) {
|
| +bool JSObject::TooManyFastProperties(StoreFromKeyed store_mode) {
|
| // Allow extra fast properties if the object has more than
|
| - // kFastPropertiesSoftLimit in-object properties. When this is the case,
|
| - // it is very unlikely that the object is being used as a dictionary
|
| - // and there is a good chance that allowing more map transitions
|
| - // will be worth it.
|
| - int inobject = map()->inobject_properties();
|
| + // kFastPropertiesSoftLimit in-object properties. When this is the case, it is
|
| + // very unlikely that the object is being used as a dictionary and there is a
|
| + // good chance that allowing more map transitions will be worth it.
|
| + Map* map = this->map();
|
| + if (map->unused_property_fields() != 0) return false;
|
| +
|
| + int inobject = map->inobject_properties();
|
|
|
| int limit;
|
| if (store_mode == CERTAINLY_NOT_STORE_FROM_KEYED) {
|
| @@ -1880,7 +1881,7 @@ bool JSObject::TooManyFastProperties(int properties,
|
| } else {
|
| limit = Max(inobject, kFastPropertiesSoftLimit);
|
| }
|
| - return properties > limit;
|
| + return properties()->length() > limit;
|
| }
|
|
|
|
|
|
|