Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 47a61f627b817ca7d533aea305cfde7b90e4d110..6ce3724d45ae56cfe0bf7c223e3bbb2ba5de1923 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -14230,9 +14230,11 @@ template |
int Dictionary<NameDictionary, NameDictionaryShape, Handle<Name> >:: |
NumberOfEnumElements(); |
-template |
-int HashTable<SeededNumberDictionary, SeededNumberDictionaryShape, uint32_t>:: |
- FindEntry(uint32_t); |
+template bool Dictionary<SeededNumberDictionary, SeededNumberDictionaryShape, |
+ uint32_t>::HasComplexElements(); |
+ |
+template int HashTable<SeededNumberDictionary, SeededNumberDictionaryShape, |
+ uint32_t>::FindEntry(uint32_t); |
Handle<Object> JSObject::PrepareSlowElementsForSort( |
@@ -15270,10 +15272,26 @@ int Dictionary<Derived, Shape, Key>::NumberOfEnumElements() { |
} |
-template<typename Derived, typename Shape, typename Key> |
+template <typename Derived, typename Shape, typename Key> |
+bool Dictionary<Derived, Shape, Key>::HasComplexElements() { |
+ int capacity = DerivedHashTable::Capacity(); |
+ for (int i = 0; i < capacity; i++) { |
+ Object* k = DerivedHashTable::KeyAt(i); |
+ if (DerivedHashTable::IsKey(k) && !FilterKey(k, NONE)) { |
+ PropertyDetails details = DetailsAt(i); |
+ if (details.IsDeleted()) continue; |
+ if (details.type() == CALLBACKS) return true; |
+ PropertyAttributes attr = details.attributes(); |
+ if (attr & (READ_ONLY | DONT_DELETE)) return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+ |
+template <typename Derived, typename Shape, typename Key> |
void Dictionary<Derived, Shape, Key>::CopyKeysTo( |
- FixedArray* storage, |
- PropertyAttributes filter, |
+ FixedArray* storage, PropertyAttributes filter, |
typename Dictionary<Derived, Shape, Key>::SortMode sort_mode) { |
DCHECK(storage->length() >= NumberOfElementsFilterAttributes(filter)); |
int capacity = DerivedHashTable::Capacity(); |