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; |
} |