Merge V8 5.2.361.47 DO NOT MERGE
https://chromium.googlesource.com/v8/v8/+/5.2.361.47
FPIIM-449
Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/keys.h b/src/keys.h
index 1fd3fc0..c73f109 100644
--- a/src/keys.h
+++ b/src/keys.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef V8_KEY_ACCUMULATOR_H_
-#define V8_KEY_ACCUMULATOR_H_
+#ifndef V8_KEYS_H_
+#define V8_KEYS_H_
#include "src/isolate.h"
#include "src/objects.h"
@@ -36,25 +36,48 @@
: isolate_(isolate), type_(type), filter_(filter) {}
~KeyAccumulator();
+ static MaybeHandle<FixedArray> GetKeys(Handle<JSReceiver> object,
+ KeyCollectionType type,
+ PropertyFilter filter,
+ GetKeysConversion keys_conversion,
+ bool filter_proxy_keys);
+ Handle<FixedArray> GetKeys(GetKeysConversion convert = KEEP_NUMBERS);
+ Maybe<bool> CollectKeys(Handle<JSReceiver> receiver,
+ Handle<JSReceiver> object);
+ void CollectOwnElementIndices(Handle<JSObject> object);
+ void CollectOwnPropertyNames(Handle<JSObject> object);
+
+ static Handle<FixedArray> GetEnumPropertyKeys(Isolate* isolate,
+ Handle<JSObject> object);
+
bool AddKey(uint32_t key);
bool AddKey(Object* key, AddKeyConversion convert);
bool AddKey(Handle<Object> key, AddKeyConversion convert);
void AddKeys(Handle<FixedArray> array, AddKeyConversion convert);
void AddKeys(Handle<JSObject> array, AddKeyConversion convert);
- void AddKeysFromProxy(Handle<JSObject> array);
- Maybe<bool> AddKeysFromProxy(Handle<JSProxy> proxy, Handle<FixedArray> keys);
void AddElementKeysFromInterceptor(Handle<JSObject> array);
+
// Jump to the next level, pushing the current |levelLength_| to
// |levelLengths_| and adding a new list to |elements_|.
void NextPrototype();
// Sort the integer indices in the last list in |elements_|
void SortCurrentElementsList();
- Handle<FixedArray> GetKeys(GetKeysConversion convert = KEEP_NUMBERS);
int length() { return length_; }
Isolate* isolate() { return isolate_; }
+ PropertyFilter filter() { return filter_; }
void set_filter_proxy_keys(bool filter) { filter_proxy_keys_ = filter; }
private:
+ Maybe<bool> CollectOwnKeys(Handle<JSReceiver> receiver,
+ Handle<JSObject> object);
+ Maybe<bool> CollectOwnJSProxyKeys(Handle<JSReceiver> receiver,
+ Handle<JSProxy> proxy);
+ Maybe<bool> CollectOwnJSProxyTargetKeys(Handle<JSProxy> proxy,
+ Handle<JSReceiver> target);
+
+ Maybe<bool> AddKeysFromJSProxy(Handle<JSProxy> proxy,
+ Handle<FixedArray> keys);
+
bool AddIntegerKey(uint32_t key);
bool AddStringKey(Handle<Object> key, AddKeyConversion convert);
bool AddSymbolKey(Handle<Object> array);
@@ -97,8 +120,6 @@
KeyCollectionType type, PropertyFilter filter)
: isolate_(isolate), receiver_(receiver), type_(type), filter_(filter) {
Prepare();
- // TODO(cbruni): pass filter_ directly to the KeyAccumulator.
- USE(filter_);
}
bool is_receiver_simple_enum() { return is_receiver_simple_enum_; }
@@ -116,9 +137,9 @@
Handle<JSReceiver> receiver_;
KeyCollectionType type_;
PropertyFilter filter_;
+ bool filter_proxy_keys_ = true;
bool is_receiver_simple_enum_ = false;
bool has_empty_prototype_ = false;
- bool filter_proxy_keys_ = true;
DISALLOW_COPY_AND_ASSIGN(FastKeyAccumulator);
};
@@ -126,4 +147,4 @@
} // namespace internal
} // namespace v8
-#endif // V8_KEY_ACCUMULATOR_H_
+#endif // V8_KEYS_H_