diff options
author | Anna Henningsen <anna@addaleax.net> | 2018-05-18 18:49:41 +0200 |
---|---|---|
committer | Myles Borins <mylesborins@google.com> | 2018-06-01 09:59:15 +0200 |
commit | 109ba58b5f6fe42a4a22b990eb5fb21946012727 (patch) | |
tree | 67b40ceeac8e4f43d00df4eb668ad8dd408dbb8d /deps | |
parent | 1fb0b2cb92bdfb0b73cd4d333436794775d4630d (diff) | |
download | android-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.h | 11 | ||||
-rw-r--r-- | deps/v8/src/api.cc | 19 | ||||
-rw-r--r-- | deps/v8/src/debug/debug-interface.h | 4 | ||||
-rw-r--r-- | deps/v8/src/inspector/v8-debugger.cc | 4 |
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); |