summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2018-05-18 18:49:41 +0200
committerMyles Borins <mylesborins@google.com>2018-06-01 09:59:15 +0200
commit109ba58b5f6fe42a4a22b990eb5fb21946012727 (patch)
tree67b40ceeac8e4f43d00df4eb668ad8dd408dbb8d /deps
parent1fb0b2cb92bdfb0b73cd4d333436794775d4630d (diff)
downloadandroid-node-v8-109ba58b5f6fe42a4a22b990eb5fb21946012727.tar.gz
android-node-v8-109ba58b5f6fe42a4a22b990eb5fb21946012727.tar.bz2
android-node-v8-109ba58b5f6fe42a4a22b990eb5fb21946012727.zip
deps: cherry-pick ff0a9793334 from upstream V8
Original commit message: [api] Expose PreviewEntries as public API Turn `debug::EntriesPreview` into a public API. This is a straightforward approach to addressing nodejs/node#20409 (not relying on functionality behind `--allow-natives-syntax`) in Node.js. Refs: https://github.com/v8/v8/commit/ff0a979333408f544f081489411814b84df6e2d9 PR-URL: https://github.com/nodejs/node/pull/20719 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'deps')
-rw-r--r--deps/v8/include/v8.h11
-rw-r--r--deps/v8/src/api.cc19
-rw-r--r--deps/v8/src/debug/debug-interface.h4
-rw-r--r--deps/v8/src/inspector/v8-debugger.cc4
4 files changed, 23 insertions, 15 deletions
diff --git a/deps/v8/include/v8.h b/deps/v8/include/v8.h
index c6e9250e4e..ed1a6d4af1 100644
--- a/deps/v8/include/v8.h
+++ b/deps/v8/include/v8.h
@@ -3549,6 +3549,17 @@ class V8_EXPORT Object : public Value {
*/
Isolate* GetIsolate();
+ /**
+ * If this object is a Set, Map, WeakSet or WeakMap, this returns a
+ * representation of the elements of this object as an array.
+ * If this object is a SetIterator or MapIterator, this returns all
+ * elements of the underlying collection, starting at the iterator's current
+ * position.
+ * For other types, this will return an empty MaybeLocal<Array> (without
+ * scheduling an exception).
+ */
+ MaybeLocal<Array> PreviewEntries(bool* is_key_value);
+
static Local<Object> New(Isolate* isolate);
V8_INLINE static Object* Cast(Value* obj);
diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc
index 6dd669ee11..25506d3930 100644
--- a/deps/v8/src/api.cc
+++ b/deps/v8/src/api.cc
@@ -9635,21 +9635,20 @@ int debug::EstimatedValueSize(Isolate* v8_isolate, v8::Local<v8::Value> value) {
return i::Handle<i::HeapObject>::cast(object)->Size();
}
-v8::MaybeLocal<v8::Array> debug::EntriesPreview(Isolate* v8_isolate,
- v8::Local<v8::Value> value,
- bool* is_key_value) {
- i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
- ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
- if (value->IsMap()) {
+v8::MaybeLocal<v8::Array> v8::Object::PreviewEntries(bool* is_key_value) {
+ if (IsMap()) {
*is_key_value = true;
- return value.As<Map>()->AsArray();
+ return Map::Cast(this)->AsArray();
}
- if (value->IsSet()) {
+ if (IsSet()) {
*is_key_value = false;
- return value.As<Set>()->AsArray();
+ return Set::Cast(this)->AsArray();
}
- i::Handle<i::Object> object = Utils::OpenHandle(*value);
+ i::Handle<i::JSReceiver> object = Utils::OpenHandle(this);
+ i::Isolate* isolate = object->GetIsolate();
+ Isolate* v8_isolate = reinterpret_cast<Isolate*>(isolate);
+ ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
if (object->IsJSWeakCollection()) {
*is_key_value = object->IsJSWeakMap();
return Utils::ToLocal(i::JSWeakCollection::GetEntries(
diff --git a/deps/v8/src/debug/debug-interface.h b/deps/v8/src/debug/debug-interface.h
index b3f3ad917c..ec1a693550 100644
--- a/deps/v8/src/debug/debug-interface.h
+++ b/deps/v8/src/debug/debug-interface.h
@@ -212,10 +212,6 @@ void ResetBlackboxedStateCache(Isolate* isolate,
int EstimatedValueSize(Isolate* isolate, v8::Local<v8::Value> value);
-v8::MaybeLocal<v8::Array> EntriesPreview(Isolate* isolate,
- v8::Local<v8::Value> value,
- bool* is_key_value);
-
enum Builtin {
kObjectKeys,
kObjectGetPrototypeOf,
diff --git a/deps/v8/src/inspector/v8-debugger.cc b/deps/v8/src/inspector/v8-debugger.cc
index 1cdbce27e6..01e9acd9c9 100644
--- a/deps/v8/src/inspector/v8-debugger.cc
+++ b/deps/v8/src/inspector/v8-debugger.cc
@@ -29,8 +29,10 @@ v8::MaybeLocal<v8::Array> collectionsEntries(v8::Local<v8::Context> context,
v8::Isolate* isolate = context->GetIsolate();
v8::Local<v8::Array> entries;
bool isKeyValue = false;
- if (!v8::debug::EntriesPreview(isolate, value, &isKeyValue).ToLocal(&entries))
+ if (!value->IsObject() ||
+ !value.As<v8::Object>()->PreviewEntries(&isKeyValue).ToLocal(&entries)) {
return v8::MaybeLocal<v8::Array>();
+ }
v8::Local<v8::Array> wrappedEntries = v8::Array::New(isolate);
CHECK(!isKeyValue || wrappedEntries->Length() % 2 == 0);