Index: src/keys.cc |
diff --git a/src/keys.cc b/src/keys.cc |
index dc696cf10e578ab35b11c4038ea5c274834c2294..65776041e113efe16f5a5b45033445471ee6728b 100644 |
--- a/src/keys.cc |
+++ b/src/keys.cc |
@@ -44,6 +44,7 @@ Handle<FixedArray> KeyAccumulator::GetKeys(GetKeysConversion convert) { |
for (size_t level = 0; level < max_level; level++) { |
int num_string_properties = level_lengths_[level * 2]; |
int num_symbol_properties = level_lengths_[level * 2 + 1]; |
+ int num_elements = 0; |
if (num_string_properties < 0) { |
// If the |num_string_properties| is negative, the current level contains |
// properties from a proxy, hence we skip the integer keys in |elements_| |
@@ -52,7 +53,7 @@ Handle<FixedArray> KeyAccumulator::GetKeys(GetKeysConversion convert) { |
} else if (level < elements_.size()) { |
// Add the element indices for this prototype level. |
std::vector<uint32_t>* elements = elements_[level]; |
- int num_elements = static_cast<int>(elements->size()); |
+ num_elements = static_cast<int>(elements->size()); |
for (int i = 0; i < num_elements; i++) { |
Handle<Object> key; |
if (convert == KEEP_NUMBERS) { |
@@ -78,6 +79,13 @@ Handle<FixedArray> KeyAccumulator::GetKeys(GetKeysConversion convert) { |
insertion_index++; |
symbol_properties_index++; |
} |
+ if (FLAG_trace_for_in_enumerate) { |
+ PrintF("| strings=%d symbols=%d elements=%i ", num_string_properties, |
+ num_symbol_properties, num_elements); |
+ } |
+ } |
+ if (FLAG_trace_for_in_enumerate) { |
+ PrintF("|| prototypes=%zu ||\n", max_level); |
} |
DCHECK_EQ(insertion_index, length_); |
@@ -358,8 +366,14 @@ Handle<FixedArray> GetOwnKeysWithElements(Isolate* isolate, |
GetKeysConversion convert) { |
Handle<FixedArray> keys = JSObject::GetFastEnumPropertyKeys(isolate, object); |
ElementsAccessor* accessor = object->GetElementsAccessor(); |
- return accessor->PrependElementIndices(object, keys, convert, |
- ONLY_ENUMERABLE); |
+ Handle<FixedArray> result = |
+ accessor->PrependElementIndices(object, keys, convert, ONLY_ENUMERABLE); |
+ |
+ if (FLAG_trace_for_in_enumerate) { |
+ PrintF("| strings=%d symbols=0 elements=%u || prototypes>=1 ||\n", |
+ keys->length(), result->length() - keys->length()); |
+ } |
+ return result; |
} |
MaybeHandle<FixedArray> GetOwnKeysWithUninitializedEnumCache( |
@@ -407,6 +421,11 @@ MaybeHandle<FixedArray> FastKeyAccumulator::GetKeysFast( |
// Try initializing the enum cache and return own properties. |
if (GetOwnKeysWithUninitializedEnumCache(isolate_, object) |
.ToHandle(&keys)) { |
+ if (FLAG_trace_for_in_enumerate) { |
+ PrintF("| strings=%d symbols=0 elements=0 || prototypes>=1 ||\n", |
+ keys->length()); |
+ } |
+ |
is_receiver_simple_enum_ = |
object->map()->EnumLength() != kInvalidEnumCacheSentinel; |
return keys; |