Revert "[inspector] Report [[Prototype]] as internal property."
This reverts commit 2b94e5677f
.
Reason for revert: Speculative based on layout test failures on
win and mac which could block the roll:
https://ci.chromium.org/p/v8/builders/ci/V8%20Blink%20Win/5294
https://ci.chromium.org/p/v8/builders/ci/V8%20Blink%20Mac/4955
Original change's description:
> [inspector] Report [[Prototype]] as internal property.
>
> Previously the inspector was trying to add a special `__proto__`
> property to every JSObject, which looked and behaved like a real
> data property on the object. But this is confusing to developers
> since `__proto__` is not a real data property, but usually an
> accessor property on the `Object.prototype`.
>
> Additionally all other internal properties are reported using the
> [[Name]] notation, with the [[Prototype]] having been the strange
> outlier.
>
> Drive-by-cleanup: Use an ArrayList to collect the name/value pairs
> inside Runtime::GetInternalProperties(), which makes this function
> more readable and easier to add things.
>
> Bug: chromuium:1162229
> Fixed: chromium:1197019
> Screenshot: https://imgur.com/a/b7TZ32s.png
> Change-Id: Ic4c1e35e2e65f90619fcc12bf3a72806cadb0794
> Doc: http://doc/1Xetnc9s6r0yy4LnPbqeCwsnsOtBlvJsV4OCdXMZ1wCM
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2814565
> Auto-Submit: Benedikt Meurer <bmeurer@chromium.org>
> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
> Reviewed-by: Yang Guo <yangguo@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#73881}
Bug: chromuium:1162229
Change-Id: Ia893ad672eb370fa6fce7eddf2947bf8f6755831
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2818386
Auto-Submit: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/master@{#73886}
This commit is contained in:
parent
a958fd7852
commit
0e2d3413ed
@ -1050,57 +1050,78 @@ std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame) {
|
|||||||
return std::make_unique<DebugWasmScopeIterator>(frame);
|
return std::make_unique<DebugWasmScopeIterator>(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle<ArrayList> AddWasmInstanceObjectInternalProperties(
|
Handle<JSArray> GetWasmInstanceObjectInternalProperties(
|
||||||
Isolate* isolate, Handle<ArrayList> result,
|
|
||||||
Handle<WasmInstanceObject> instance) {
|
Handle<WasmInstanceObject> instance) {
|
||||||
result = ArrayList::Add(
|
Isolate* isolate = instance->GetIsolate();
|
||||||
isolate, result,
|
Handle<FixedArray> result = isolate->factory()->NewFixedArray(2 * 5);
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Module]]"),
|
int length = 0;
|
||||||
handle(instance->module_object(), isolate));
|
|
||||||
|
Handle<String> module_str =
|
||||||
|
isolate->factory()->NewStringFromAsciiChecked("[[Module]]");
|
||||||
|
Handle<Object> module_obj = handle(instance->module_object(), isolate);
|
||||||
|
result->set(length++, *module_str);
|
||||||
|
result->set(length++, *module_obj);
|
||||||
|
|
||||||
if (FunctionsProxy::Count(isolate, instance) != 0) {
|
if (FunctionsProxy::Count(isolate, instance) != 0) {
|
||||||
result = ArrayList::Add(
|
Handle<String> functions_str =
|
||||||
isolate, result,
|
isolate->factory()->NewStringFromAsciiChecked("[[Functions]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Functions]]"),
|
Handle<Object> functions_obj =
|
||||||
GetOrCreateInstanceProxy<FunctionsProxy>(isolate, instance));
|
GetOrCreateInstanceProxy<FunctionsProxy>(isolate, instance);
|
||||||
|
result->set(length++, *functions_str);
|
||||||
|
result->set(length++, *functions_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GlobalsProxy::Count(isolate, instance) != 0) {
|
if (GlobalsProxy::Count(isolate, instance) != 0) {
|
||||||
result = ArrayList::Add(
|
Handle<String> globals_str =
|
||||||
isolate, result,
|
isolate->factory()->NewStringFromAsciiChecked("[[Globals]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Globals]]"),
|
Handle<Object> globals_obj =
|
||||||
GetOrCreateInstanceProxy<GlobalsProxy>(isolate, instance));
|
GetOrCreateInstanceProxy<GlobalsProxy>(isolate, instance);
|
||||||
|
result->set(length++, *globals_str);
|
||||||
|
result->set(length++, *globals_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MemoriesProxy::Count(isolate, instance) != 0) {
|
if (MemoriesProxy::Count(isolate, instance) != 0) {
|
||||||
result = ArrayList::Add(
|
Handle<String> memories_str =
|
||||||
isolate, result,
|
isolate->factory()->NewStringFromAsciiChecked("[[Memories]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Memories]]"),
|
Handle<Object> memories_obj =
|
||||||
GetOrCreateInstanceProxy<MemoriesProxy>(isolate, instance));
|
GetOrCreateInstanceProxy<MemoriesProxy>(isolate, instance);
|
||||||
|
result->set(length++, *memories_str);
|
||||||
|
result->set(length++, *memories_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TablesProxy::Count(isolate, instance) != 0) {
|
if (TablesProxy::Count(isolate, instance) != 0) {
|
||||||
result = ArrayList::Add(
|
Handle<String> tables_str =
|
||||||
isolate, result,
|
isolate->factory()->NewStringFromAsciiChecked("[[Tables]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Tables]]"),
|
Handle<Object> tables_obj =
|
||||||
GetOrCreateInstanceProxy<TablesProxy>(isolate, instance));
|
GetOrCreateInstanceProxy<TablesProxy>(isolate, instance);
|
||||||
|
result->set(length++, *tables_str);
|
||||||
|
result->set(length++, *tables_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return isolate->factory()->NewJSArrayWithElements(result, PACKED_ELEMENTS,
|
||||||
|
length);
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle<ArrayList> AddWasmModuleObjectInternalProperties(
|
Handle<JSArray> GetWasmModuleObjectInternalProperties(
|
||||||
Isolate* isolate, Handle<ArrayList> result,
|
|
||||||
Handle<WasmModuleObject> module_object) {
|
Handle<WasmModuleObject> module_object) {
|
||||||
result = ArrayList::Add(
|
Isolate* isolate = module_object->GetIsolate();
|
||||||
isolate, result,
|
Handle<FixedArray> result = isolate->factory()->NewFixedArray(2 * 2);
|
||||||
isolate->factory()->NewStringFromStaticChars("[[Exports]]"),
|
int length = 0;
|
||||||
wasm::GetExports(isolate, module_object));
|
|
||||||
result = ArrayList::Add(
|
Handle<String> exports_str =
|
||||||
isolate, result,
|
isolate->factory()->NewStringFromStaticChars("[[Exports]]");
|
||||||
isolate->factory()->NewStringFromStaticChars("[[Imports]]"),
|
Handle<JSArray> exports_obj = wasm::GetExports(isolate, module_object);
|
||||||
wasm::GetImports(isolate, module_object));
|
result->set(length++, *exports_str);
|
||||||
return result;
|
result->set(length++, *exports_obj);
|
||||||
|
|
||||||
|
Handle<String> imports_str =
|
||||||
|
isolate->factory()->NewStringFromStaticChars("[[Imports]]");
|
||||||
|
Handle<JSArray> imports_obj = wasm::GetImports(isolate, module_object);
|
||||||
|
result->set(length++, *imports_str);
|
||||||
|
result->set(length++, *imports_obj);
|
||||||
|
|
||||||
|
return isolate->factory()->NewJSArrayWithElements(result, PACKED_ELEMENTS,
|
||||||
|
length);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
@ -28,7 +28,6 @@ class WasmValue;
|
|||||||
|
|
||||||
#include "torque-generated/src/debug/debug-wasm-objects-tq.inc"
|
#include "torque-generated/src/debug/debug-wasm-objects-tq.inc"
|
||||||
|
|
||||||
class ArrayList;
|
|
||||||
class WasmFrame;
|
class WasmFrame;
|
||||||
class WasmInstanceObject;
|
class WasmInstanceObject;
|
||||||
class WasmModuleObject;
|
class WasmModuleObject;
|
||||||
@ -69,11 +68,9 @@ Handle<JSObject> GetWasmDebugProxy(WasmFrame* frame);
|
|||||||
|
|
||||||
std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame);
|
std::unique_ptr<debug::ScopeIterator> GetWasmScopeIterator(WasmFrame* frame);
|
||||||
|
|
||||||
Handle<ArrayList> AddWasmInstanceObjectInternalProperties(
|
Handle<JSArray> GetWasmInstanceObjectInternalProperties(
|
||||||
Isolate* isolate, Handle<ArrayList> result,
|
|
||||||
Handle<WasmInstanceObject> instance);
|
Handle<WasmInstanceObject> instance);
|
||||||
Handle<ArrayList> AddWasmModuleObjectInternalProperties(
|
Handle<JSArray> GetWasmModuleObjectInternalProperties(
|
||||||
Isolate* isolate, Handle<ArrayList> result,
|
|
||||||
Handle<WasmModuleObject> module_object);
|
Handle<WasmModuleObject> module_object);
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
@ -1216,6 +1216,7 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool shouldSkipProto = internalType == V8InternalValueType::kScopeList;
|
||||||
|
|
||||||
bool formatAccessorsAsProperties =
|
bool formatAccessorsAsProperties =
|
||||||
clientFor(context)->formatAccessorsAsProperties(object);
|
clientFor(context)->formatAccessorsAsProperties(object);
|
||||||
@ -1303,7 +1304,8 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context,
|
|||||||
bool isSymbolDescription =
|
bool isSymbolDescription =
|
||||||
object->IsSymbol() && name == "description";
|
object->IsSymbol() && name == "description";
|
||||||
if (isSymbolDescription ||
|
if (isSymbolDescription ||
|
||||||
(getterIsNativeFunction && formatAccessorsAsProperties &&
|
(name != "__proto__" && getterIsNativeFunction &&
|
||||||
|
formatAccessorsAsProperties &&
|
||||||
!doesAttributeHaveObservableSideEffectOnGet(context, object,
|
!doesAttributeHaveObservableSideEffectOnGet(context, object,
|
||||||
v8Name))) {
|
v8Name))) {
|
||||||
v8::TryCatch tryCatch(isolate);
|
v8::TryCatch tryCatch(isolate);
|
||||||
@ -1319,6 +1321,7 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (accessorPropertiesOnly && !isAccessorProperty) continue;
|
if (accessorPropertiesOnly && !isAccessorProperty) continue;
|
||||||
|
if (name == "__proto__") shouldSkipProto = true;
|
||||||
auto mirror = PropertyMirror{name,
|
auto mirror = PropertyMirror{name,
|
||||||
writable,
|
writable,
|
||||||
configurable,
|
configurable,
|
||||||
@ -1337,6 +1340,16 @@ bool ValueMirror::getProperties(v8::Local<v8::Context> context,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!shouldSkipProto && ownProperties && !object->IsProxy() &&
|
||||||
|
!accessorPropertiesOnly) {
|
||||||
|
v8::Local<v8::Value> prototype = object->GetPrototype();
|
||||||
|
if (prototype->IsObject()) {
|
||||||
|
accumulator->Add(PropertyMirror{String16("__proto__"), true, true, false,
|
||||||
|
true, false,
|
||||||
|
ValueMirror::create(context, prototype),
|
||||||
|
nullptr, nullptr, nullptr, nullptr});
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,11 +157,11 @@ RUNTIME_FUNCTION(Runtime_ScheduleBreak) {
|
|||||||
return ReadOnlyRoots(isolate).undefined_value();
|
return ReadOnlyRoots(isolate).undefined_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
template <class IteratorType>
|
template <class IteratorType>
|
||||||
static Handle<ArrayList> AddIteratorInternalProperties(
|
static MaybeHandle<JSArray> GetIteratorInternalProperties(
|
||||||
Isolate* isolate, Handle<ArrayList> result, Handle<IteratorType> iterator) {
|
Isolate* isolate, Handle<IteratorType> object) {
|
||||||
|
Factory* factory = isolate->factory();
|
||||||
|
Handle<IteratorType> iterator = Handle<IteratorType>::cast(object);
|
||||||
const char* kind = nullptr;
|
const char* kind = nullptr;
|
||||||
switch (iterator->map().instance_type()) {
|
switch (iterator->map().instance_type()) {
|
||||||
case JS_MAP_KEY_ITERATOR_TYPE:
|
case JS_MAP_KEY_ITERATOR_TYPE:
|
||||||
@ -179,60 +179,62 @@ static Handle<ArrayList> AddIteratorInternalProperties(
|
|||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<FixedArray> result = factory->NewFixedArray(2 * 3);
|
||||||
isolate, result,
|
Handle<String> has_more =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[IteratorHasMore]]"),
|
factory->NewStringFromAsciiChecked("[[IteratorHasMore]]");
|
||||||
isolate->factory()->ToBoolean(iterator->HasMore()));
|
result->set(0, *has_more);
|
||||||
result = ArrayList::Add(
|
result->set(1, isolate->heap()->ToBoolean(iterator->HasMore()));
|
||||||
isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[IteratorIndex]]"),
|
Handle<String> index =
|
||||||
handle(iterator->index(), isolate));
|
factory->NewStringFromAsciiChecked("[[IteratorIndex]]");
|
||||||
result = ArrayList::Add(
|
result->set(2, *index);
|
||||||
isolate, result,
|
result->set(3, iterator->index());
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[IteratorKind]]"),
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked(kind));
|
Handle<String> iterator_kind =
|
||||||
return result;
|
factory->NewStringFromAsciiChecked("[[IteratorKind]]");
|
||||||
|
result->set(4, *iterator_kind);
|
||||||
|
Handle<String> kind_str = factory->NewStringFromAsciiChecked(kind);
|
||||||
|
result->set(5, *kind_str);
|
||||||
|
return factory->NewJSArrayWithElements(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
MaybeHandle<JSArray> Runtime::GetInternalProperties(Isolate* isolate,
|
MaybeHandle<JSArray> Runtime::GetInternalProperties(Isolate* isolate,
|
||||||
Handle<Object> object) {
|
Handle<Object> object) {
|
||||||
auto result = ArrayList::New(isolate, 8 * 2);
|
Factory* factory = isolate->factory();
|
||||||
if (object->IsJSObject()) {
|
|
||||||
PrototypeIterator iter(isolate, Handle<JSObject>::cast(object));
|
|
||||||
Handle<Object> prototype = PrototypeIterator::GetCurrent(iter);
|
|
||||||
if (!prototype->IsNull(isolate)) {
|
|
||||||
result = ArrayList::Add(
|
|
||||||
isolate, result,
|
|
||||||
isolate->factory()->NewStringFromStaticChars("[[Prototype]]"),
|
|
||||||
prototype);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (object->IsJSBoundFunction()) {
|
if (object->IsJSBoundFunction()) {
|
||||||
Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(object);
|
Handle<JSBoundFunction> function = Handle<JSBoundFunction>::cast(object);
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<FixedArray> result = factory->NewFixedArray(2 * 3);
|
||||||
isolate, result,
|
Handle<String> target =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[TargetFunction]]"),
|
factory->NewStringFromAsciiChecked("[[TargetFunction]]");
|
||||||
handle(function->bound_target_function(), isolate));
|
result->set(0, *target);
|
||||||
result = ArrayList::Add(
|
result->set(1, function->bound_target_function());
|
||||||
isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[BoundThis]]"),
|
Handle<String> bound_this =
|
||||||
handle(function->bound_this(), isolate));
|
factory->NewStringFromAsciiChecked("[[BoundThis]]");
|
||||||
result = ArrayList::Add(
|
result->set(2, *bound_this);
|
||||||
isolate, result,
|
result->set(3, function->bound_this());
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[BoundArgs]]"),
|
|
||||||
isolate->factory()->NewJSArrayWithElements(
|
Handle<String> bound_args =
|
||||||
isolate->factory()->CopyFixedArray(
|
factory->NewStringFromAsciiChecked("[[BoundArgs]]");
|
||||||
handle(function->bound_arguments(), isolate))));
|
result->set(4, *bound_args);
|
||||||
} else if (object->IsJSMapIterator()) {
|
Handle<FixedArray> bound_arguments =
|
||||||
|
factory->CopyFixedArray(handle(function->bound_arguments(), isolate));
|
||||||
|
Handle<JSArray> arguments_array =
|
||||||
|
factory->NewJSArrayWithElements(bound_arguments);
|
||||||
|
result->set(5, *arguments_array);
|
||||||
|
return factory->NewJSArrayWithElements(result);
|
||||||
|
}
|
||||||
|
if (object->IsJSMapIterator()) {
|
||||||
Handle<JSMapIterator> iterator = Handle<JSMapIterator>::cast(object);
|
Handle<JSMapIterator> iterator = Handle<JSMapIterator>::cast(object);
|
||||||
result = AddIteratorInternalProperties(isolate, result, iterator);
|
return GetIteratorInternalProperties(isolate, iterator);
|
||||||
} else if (object->IsJSSetIterator()) {
|
}
|
||||||
|
if (object->IsJSSetIterator()) {
|
||||||
Handle<JSSetIterator> iterator = Handle<JSSetIterator>::cast(object);
|
Handle<JSSetIterator> iterator = Handle<JSSetIterator>::cast(object);
|
||||||
result = AddIteratorInternalProperties(isolate, result, iterator);
|
return GetIteratorInternalProperties(isolate, iterator);
|
||||||
} else if (object->IsJSGeneratorObject()) {
|
}
|
||||||
|
if (object->IsJSGeneratorObject()) {
|
||||||
Handle<JSGeneratorObject> generator =
|
Handle<JSGeneratorObject> generator =
|
||||||
Handle<JSGeneratorObject>::cast(object);
|
Handle<JSGeneratorObject>::cast(object);
|
||||||
|
|
||||||
@ -245,131 +247,163 @@ MaybeHandle<JSArray> Runtime::GetInternalProperties(Isolate* isolate,
|
|||||||
DCHECK(generator->is_suspended());
|
DCHECK(generator->is_suspended());
|
||||||
}
|
}
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<FixedArray> result = factory->NewFixedArray(2 * 3);
|
||||||
isolate, result,
|
Handle<String> generator_status =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[GeneratorState]]"),
|
factory->NewStringFromAsciiChecked("[[GeneratorState]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked(status));
|
result->set(0, *generator_status);
|
||||||
result = ArrayList::Add(
|
Handle<String> status_str = factory->NewStringFromAsciiChecked(status);
|
||||||
isolate, result,
|
result->set(1, *status_str);
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[GeneratorFunction]]"),
|
|
||||||
handle(generator->function(), isolate));
|
Handle<String> function =
|
||||||
result = ArrayList::Add(
|
factory->NewStringFromAsciiChecked("[[GeneratorFunction]]");
|
||||||
isolate, result,
|
result->set(2, *function);
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[GeneratorReceiver]]"),
|
result->set(3, generator->function());
|
||||||
handle(generator->receiver(), isolate));
|
|
||||||
} else if (object->IsJSPromise()) {
|
Handle<String> receiver =
|
||||||
|
factory->NewStringFromAsciiChecked("[[GeneratorReceiver]]");
|
||||||
|
result->set(4, *receiver);
|
||||||
|
result->set(5, generator->receiver());
|
||||||
|
return factory->NewJSArrayWithElements(result);
|
||||||
|
}
|
||||||
|
if (object->IsJSPromise()) {
|
||||||
Handle<JSPromise> promise = Handle<JSPromise>::cast(object);
|
Handle<JSPromise> promise = Handle<JSPromise>::cast(object);
|
||||||
|
const char* status = JSPromise::Status(promise->status());
|
||||||
|
Handle<FixedArray> result = factory->NewFixedArray(2 * 2);
|
||||||
|
Handle<String> promise_status =
|
||||||
|
factory->NewStringFromAsciiChecked("[[PromiseState]]");
|
||||||
|
result->set(0, *promise_status);
|
||||||
|
Handle<String> status_str = factory->NewStringFromAsciiChecked(status);
|
||||||
|
result->set(1, *status_str);
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<Object> value_obj(promise->status() == Promise::kPending
|
||||||
isolate, result,
|
? ReadOnlyRoots(isolate).undefined_value()
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[PromiseState]]"),
|
: promise->result(),
|
||||||
isolate->factory()->NewStringFromAsciiChecked(
|
isolate);
|
||||||
JSPromise::Status(promise->status())));
|
Handle<String> promise_value =
|
||||||
result = ArrayList::Add(
|
factory->NewStringFromAsciiChecked("[[PromiseResult]]");
|
||||||
isolate, result,
|
result->set(2, *promise_value);
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[PromiseResult]]"),
|
result->set(3, *value_obj);
|
||||||
promise->status() == Promise::kPending
|
return factory->NewJSArrayWithElements(result);
|
||||||
? isolate->factory()->undefined_value()
|
}
|
||||||
: handle(promise->result(), isolate));
|
if (object->IsJSProxy()) {
|
||||||
} else if (object->IsJSProxy()) {
|
|
||||||
Handle<JSProxy> js_proxy = Handle<JSProxy>::cast(object);
|
Handle<JSProxy> js_proxy = Handle<JSProxy>::cast(object);
|
||||||
|
Handle<FixedArray> result = factory->NewFixedArray(3 * 2);
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<String> handler_str =
|
||||||
isolate, result,
|
factory->NewStringFromAsciiChecked("[[Handler]]");
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Handler]]"),
|
result->set(0, *handler_str);
|
||||||
handle(js_proxy->handler(), isolate));
|
result->set(1, js_proxy->handler());
|
||||||
result = ArrayList::Add(
|
|
||||||
isolate, result,
|
Handle<String> target_str =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[Target]]"),
|
factory->NewStringFromAsciiChecked("[[Target]]");
|
||||||
handle(js_proxy->target(), isolate));
|
result->set(2, *target_str);
|
||||||
result = ArrayList::Add(
|
result->set(3, js_proxy->target());
|
||||||
isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[IsRevoked]]"),
|
Handle<String> is_revoked_str =
|
||||||
isolate->factory()->ToBoolean(js_proxy->IsRevoked()));
|
factory->NewStringFromAsciiChecked("[[IsRevoked]]");
|
||||||
} else if (object->IsJSPrimitiveWrapper()) {
|
result->set(4, *is_revoked_str);
|
||||||
|
result->set(5, isolate->heap()->ToBoolean(js_proxy->IsRevoked()));
|
||||||
|
return factory->NewJSArrayWithElements(result);
|
||||||
|
}
|
||||||
|
if (object->IsJSPrimitiveWrapper()) {
|
||||||
Handle<JSPrimitiveWrapper> js_value =
|
Handle<JSPrimitiveWrapper> js_value =
|
||||||
Handle<JSPrimitiveWrapper>::cast(object);
|
Handle<JSPrimitiveWrapper>::cast(object);
|
||||||
|
|
||||||
result = ArrayList::Add(
|
Handle<FixedArray> result = factory->NewFixedArray(2);
|
||||||
isolate, result,
|
Handle<String> primitive_value =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[PrimitiveValue]]"),
|
factory->NewStringFromAsciiChecked("[[PrimitiveValue]]");
|
||||||
handle(js_value->value(), isolate));
|
result->set(0, *primitive_value);
|
||||||
} else if (object->IsJSArrayBuffer()) {
|
result->set(1, js_value->value());
|
||||||
|
return factory->NewJSArrayWithElements(result);
|
||||||
|
}
|
||||||
|
if (object->IsJSArrayBuffer()) {
|
||||||
Handle<JSArrayBuffer> js_array_buffer = Handle<JSArrayBuffer>::cast(object);
|
Handle<JSArrayBuffer> js_array_buffer = Handle<JSArrayBuffer>::cast(object);
|
||||||
if (js_array_buffer->was_detached()) {
|
if (js_array_buffer->was_detached()) {
|
||||||
// Mark a detached JSArrayBuffer and such and don't even try to
|
// Mark a detached JSArrayBuffer and such and don't even try to
|
||||||
// create views for it, since the TypedArray constructors will
|
// create views for it, since the TypedArray constructors will
|
||||||
// throw a TypeError when the underlying buffer is detached.
|
// throw a TypeError when the underlying buffer is detached.
|
||||||
result = ArrayList::Add(
|
Handle<FixedArray> result = factory->NewFixedArray(1 * 2);
|
||||||
isolate, result,
|
Handle<String> is_detached_str =
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[IsDetached]]"),
|
factory->NewStringFromAsciiChecked("[[IsDetached]]");
|
||||||
isolate->factory()->true_value());
|
result->set(0, *is_detached_str);
|
||||||
} else {
|
result->set(1, isolate->heap()->ToBoolean(true));
|
||||||
const size_t byte_length = js_array_buffer->byte_length();
|
return factory->NewJSArrayWithElements(result, PACKED_ELEMENTS);
|
||||||
static const ExternalArrayType kTypes[] = {
|
}
|
||||||
kExternalInt8Array,
|
const size_t byte_length = js_array_buffer->byte_length();
|
||||||
kExternalUint8Array,
|
static const ExternalArrayType kTypes[] = {
|
||||||
kExternalInt16Array,
|
kExternalInt8Array,
|
||||||
kExternalInt32Array,
|
kExternalUint8Array,
|
||||||
};
|
kExternalInt16Array,
|
||||||
for (auto type : kTypes) {
|
kExternalInt32Array,
|
||||||
switch (type) {
|
};
|
||||||
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \
|
Handle<FixedArray> result =
|
||||||
case kExternal##Type##Array: { \
|
factory->NewFixedArray((3 + arraysize(kTypes)) * 2);
|
||||||
if ((byte_length % sizeof(ctype)) != 0) continue; \
|
int index = 0;
|
||||||
result = ArrayList::Add( \
|
for (auto type : kTypes) {
|
||||||
isolate, result, \
|
switch (type) {
|
||||||
isolate->factory()->NewStringFromStaticChars("[[" #Type "Array]]"), \
|
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype) \
|
||||||
isolate->factory()->NewJSTypedArray(kExternal##Type##Array, \
|
case kExternal##Type##Array: { \
|
||||||
js_array_buffer, 0, \
|
if ((byte_length % sizeof(ctype)) != 0) continue; \
|
||||||
byte_length / sizeof(ctype))); \
|
Handle<String> typed_array_str = \
|
||||||
break; \
|
factory->NewStringFromStaticChars("[[" #Type "Array]]"); \
|
||||||
|
Handle<JSTypedArray> js_typed_array = \
|
||||||
|
factory->NewJSTypedArray(kExternal##Type##Array, js_array_buffer, 0, \
|
||||||
|
byte_length / sizeof(ctype)); \
|
||||||
|
result->set(index++, *typed_array_str); \
|
||||||
|
result->set(index++, *js_typed_array); \
|
||||||
|
break; \
|
||||||
}
|
}
|
||||||
TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
TYPED_ARRAYS(TYPED_ARRAY_CASE)
|
||||||
#undef TYPED_ARRAY_CASE
|
#undef TYPED_ARRAY_CASE
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
|
||||||
}
|
|
||||||
result =
|
|
||||||
ArrayList::Add(isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked(
|
|
||||||
"[[ArrayBufferByteLength]]"),
|
|
||||||
isolate->factory()->NewNumberFromSize(byte_length));
|
|
||||||
|
|
||||||
// Use the backing store pointer as a unique ID
|
|
||||||
EmbeddedVector<char, 32> buffer_data_vec;
|
|
||||||
int len =
|
|
||||||
SNPrintF(buffer_data_vec, V8PRIxPTR_FMT,
|
|
||||||
reinterpret_cast<Address>(js_array_buffer->backing_store()));
|
|
||||||
result = ArrayList::Add(
|
|
||||||
isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked("[[ArrayBufferData]]"),
|
|
||||||
isolate->factory()->InternalizeUtf8String(
|
|
||||||
buffer_data_vec.SubVector(0, len)));
|
|
||||||
|
|
||||||
Handle<Symbol> memory_symbol =
|
|
||||||
isolate->factory()->array_buffer_wasm_memory_symbol();
|
|
||||||
Handle<Object> memory_object =
|
|
||||||
JSObject::GetDataProperty(js_array_buffer, memory_symbol);
|
|
||||||
if (!memory_object->IsUndefined(isolate)) {
|
|
||||||
result = ArrayList::Add(isolate, result,
|
|
||||||
isolate->factory()->NewStringFromAsciiChecked(
|
|
||||||
"[[WebAssemblyMemory]]"),
|
|
||||||
memory_object);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Handle<String> byte_length_str =
|
||||||
|
factory->NewStringFromAsciiChecked("[[ArrayBufferByteLength]]");
|
||||||
|
Handle<Object> byte_length_obj = factory->NewNumberFromSize(byte_length);
|
||||||
|
result->set(index++, *byte_length_str);
|
||||||
|
result->set(index++, *byte_length_obj);
|
||||||
|
|
||||||
|
Handle<String> buffer_data_str =
|
||||||
|
factory->NewStringFromAsciiChecked("[[ArrayBufferData]]");
|
||||||
|
// Use the backing store pointer as a unique ID
|
||||||
|
EmbeddedVector<char, 32> buffer_data_vec;
|
||||||
|
int len =
|
||||||
|
SNPrintF(buffer_data_vec, V8PRIxPTR_FMT,
|
||||||
|
reinterpret_cast<Address>(js_array_buffer->backing_store()));
|
||||||
|
Handle<String> buffer_data_obj =
|
||||||
|
factory->InternalizeUtf8String(buffer_data_vec.SubVector(0, len));
|
||||||
|
result->set(index++, *buffer_data_str);
|
||||||
|
result->set(index++, *buffer_data_obj);
|
||||||
|
|
||||||
#if V8_ENABLE_WEBASSEMBLY
|
#if V8_ENABLE_WEBASSEMBLY
|
||||||
} else if (object->IsWasmInstanceObject()) {
|
Handle<Symbol> memory_symbol = factory->array_buffer_wasm_memory_symbol();
|
||||||
result = AddWasmInstanceObjectInternalProperties(
|
Handle<Object> memory_object =
|
||||||
isolate, result, Handle<WasmInstanceObject>::cast(object));
|
JSObject::GetDataProperty(js_array_buffer, memory_symbol);
|
||||||
} else if (object->IsWasmModuleObject()) {
|
if (!memory_object->IsUndefined(isolate)) {
|
||||||
result = AddWasmModuleObjectInternalProperties(
|
Handle<String> buffer_memory_str =
|
||||||
isolate, result, Handle<WasmModuleObject>::cast(object));
|
factory->NewStringFromAsciiChecked("[[WebAssemblyMemory]]");
|
||||||
|
Handle<WasmMemoryObject> buffer_memory_obj =
|
||||||
|
Handle<WasmMemoryObject>::cast(memory_object);
|
||||||
|
result->set(index++, *buffer_memory_str);
|
||||||
|
result->set(index++, *buffer_memory_obj);
|
||||||
|
}
|
||||||
#endif // V8_ENABLE_WEBASSEMBLY
|
#endif // V8_ENABLE_WEBASSEMBLY
|
||||||
|
|
||||||
|
return factory->NewJSArrayWithElements(result, PACKED_ELEMENTS, index);
|
||||||
}
|
}
|
||||||
return isolate->factory()->NewJSArrayWithElements(
|
#if V8_ENABLE_WEBASSEMBLY
|
||||||
ArrayList::Elements(isolate, result), PACKED_ELEMENTS);
|
if (object->IsWasmInstanceObject()) {
|
||||||
|
return GetWasmInstanceObjectInternalProperties(
|
||||||
|
Handle<WasmInstanceObject>::cast(object));
|
||||||
|
}
|
||||||
|
if (object->IsWasmModuleObject()) {
|
||||||
|
return GetWasmModuleObjectInternalProperties(
|
||||||
|
Handle<WasmModuleObject>::cast(object));
|
||||||
|
}
|
||||||
|
#endif // V8_ENABLE_WEBASSEMBLY
|
||||||
|
return factory->NewJSArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
RUNTIME_FUNCTION(Runtime_GetGeneratorScopeCount) {
|
RUNTIME_FUNCTION(Runtime_GetGeneratorScopeCount) {
|
||||||
|
@ -463,12 +463,7 @@ class DebugWrapper {
|
|||||||
"Runtime.getProperties", { objectId : objectId, ownProperties: true });
|
"Runtime.getProperties", { objectId : objectId, ownProperties: true });
|
||||||
this.sendMessage(msg);
|
this.sendMessage(msg);
|
||||||
const reply = this.takeReplyChecked(msgid);
|
const reply = this.takeReplyChecked(msgid);
|
||||||
for (const internalProperty of reply.result.internalProperties) {
|
return Object(reply.result.internalProperties[0].value.value);
|
||||||
if (internalProperty.name === '[[PrimitiveValue]]') {
|
|
||||||
return Object(internalProperty.value.value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new Error('Remote object is not a value wrapper');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reconstructRemoteObject(obj) {
|
reconstructRemoteObject(obj) {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Checks Runtime.getProperties method while debugger is paused.
|
Checks Runtime.getProperties method while debugger is paused.
|
||||||
|
|
||||||
Running test: testObject5
|
Running test: testObject5
|
||||||
|
__proto__ own object undefined
|
||||||
foo own string cat
|
foo own string cat
|
||||||
Internal properties
|
Internal properties
|
||||||
[[PrimitiveValue]] number 5
|
[[PrimitiveValue]] number 5
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testNotOwn
|
Running test: testNotOwn
|
||||||
__defineGetter__ inherited function undefined
|
__defineGetter__ inherited function undefined
|
||||||
@ -23,8 +23,6 @@ Running test: testNotOwn
|
|||||||
toLocaleString inherited function undefined
|
toLocaleString inherited function undefined
|
||||||
toString inherited function undefined
|
toString inherited function undefined
|
||||||
valueOf inherited function undefined
|
valueOf inherited function undefined
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testAccessorsOnly
|
Running test: testAccessorsOnly
|
||||||
b own no value, getter, setter
|
b own no value, getter, setter
|
||||||
@ -34,34 +32,31 @@ Running test: testArray
|
|||||||
0 own string red
|
0 own string red
|
||||||
1 own string green
|
1 own string green
|
||||||
2 own string blue
|
2 own string blue
|
||||||
|
__proto__ own object undefined
|
||||||
length own number 3
|
length own number 3
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testBound
|
Running test: testBound
|
||||||
|
__proto__ own function undefined
|
||||||
length own number 0
|
length own number 0
|
||||||
name own string bound Number
|
name own string bound Number
|
||||||
Internal properties
|
Internal properties
|
||||||
[[BoundArgs]] object undefined
|
[[BoundArgs]] object undefined
|
||||||
[[BoundThis]] object undefined
|
[[BoundThis]] object undefined
|
||||||
[[Prototype]] function undefined
|
|
||||||
[[TargetFunction]] function undefined
|
[[TargetFunction]] function undefined
|
||||||
|
|
||||||
Running test: testObjectThrowsLength
|
Running test: testObjectThrowsLength
|
||||||
|
__proto__ own object undefined
|
||||||
length own no value, getter
|
length own no value, getter
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testTypedArrayWithoutLength
|
Running test: testTypedArrayWithoutLength
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testArrayBuffer
|
Running test: testArrayBuffer
|
||||||
|
|
||||||
Running test: testArrayBufferWithBrokenUintCtor
|
Running test: testArrayBufferWithBrokenUintCtor
|
||||||
|
__proto__ own object undefined
|
||||||
Internal properties
|
Internal properties
|
||||||
[[ArrayBufferByteLength]] number 7
|
[[ArrayBufferByteLength]] number 7
|
||||||
[[ArrayBufferData]] string 0x...
|
[[ArrayBufferData]] string 0x...
|
||||||
[[Int8Array]] object undefined
|
[[Int8Array]] object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Uint8Array]] object undefined
|
[[Uint8Array]] object undefined
|
||||||
|
@ -42,6 +42,8 @@ let { Protocol } = InspectorTest.start('Checks Runtime.getProperties method whil
|
|||||||
let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer');
|
let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer');
|
||||||
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
||||||
for (let prop of props.result.result) {
|
for (let prop of props.result.result) {
|
||||||
|
if (prop.name === '__proto__')
|
||||||
|
continue;
|
||||||
InspectorTest.log(prop.name);
|
InspectorTest.log(prop.name);
|
||||||
await logGetPropertiesResult(prop.value.objectId);
|
await logGetPropertiesResult(prop.value.objectId);
|
||||||
}
|
}
|
||||||
|
@ -54,17 +54,6 @@ Running test: testSetVariableValueMain
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -78,6 +67,19 @@ Running test: testSetVariableValueMain
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[1] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,18 +98,6 @@ Running test: testSetVariableValueMain
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Array
|
|
||||||
description : Array(0)
|
|
||||||
objectId : <objectId>
|
|
||||||
subtype : array
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -154,6 +144,20 @@ Running test: testSetVariableValueMain
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[4] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Array
|
||||||
|
description : Array(0)
|
||||||
|
objectId : <objectId>
|
||||||
|
subtype : array
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,17 +175,6 @@ Running test: testSetVariableValueMain
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -195,6 +188,19 @@ Running test: testSetVariableValueMain
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[1] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -824,11 +824,6 @@ Running test: testObjInheritsGetterProperty
|
|||||||
type : number
|
type : number
|
||||||
value : NaN
|
value : NaN
|
||||||
}
|
}
|
||||||
[1] : {
|
|
||||||
name : __proto__
|
|
||||||
type : object
|
|
||||||
value : Object
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Checks Runtime.getProperties method
|
Checks Runtime.getProperties method
|
||||||
|
|
||||||
Running test: testObject5
|
Running test: testObject5
|
||||||
|
__proto__ own object undefined
|
||||||
foo own string cat
|
foo own string cat
|
||||||
Internal properties
|
Internal properties
|
||||||
[[PrimitiveValue]] number 5
|
[[PrimitiveValue]] number 5
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testNotOwn
|
Running test: testNotOwn
|
||||||
__defineGetter__ inherited function undefined
|
__defineGetter__ inherited function undefined
|
||||||
@ -23,8 +23,6 @@ Running test: testNotOwn
|
|||||||
toLocaleString inherited function undefined
|
toLocaleString inherited function undefined
|
||||||
toString inherited function undefined
|
toString inherited function undefined
|
||||||
valueOf inherited function undefined
|
valueOf inherited function undefined
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testAccessorsOnly
|
Running test: testAccessorsOnly
|
||||||
b own no value, getter, setter
|
b own no value, getter, setter
|
||||||
@ -34,38 +32,33 @@ Running test: testArray
|
|||||||
0 own string red
|
0 own string red
|
||||||
1 own string green
|
1 own string green
|
||||||
2 own string blue
|
2 own string blue
|
||||||
|
__proto__ own object undefined
|
||||||
length own number 3
|
length own number 3
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testBound
|
Running test: testBound
|
||||||
|
__proto__ own function undefined
|
||||||
length own number 0
|
length own number 0
|
||||||
name own string bound Number
|
name own string bound Number
|
||||||
Internal properties
|
Internal properties
|
||||||
[[BoundArgs]] object undefined
|
[[BoundArgs]] object undefined
|
||||||
[[BoundThis]] object undefined
|
[[BoundThis]] object undefined
|
||||||
[[Prototype]] function undefined
|
|
||||||
[[TargetFunction]] function undefined
|
[[TargetFunction]] function undefined
|
||||||
|
|
||||||
Running test: testObjectThrowsLength
|
Running test: testObjectThrowsLength
|
||||||
|
__proto__ own object undefined
|
||||||
length own no value, getter
|
length own no value, getter
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testTypedArrayWithoutLength
|
Running test: testTypedArrayWithoutLength
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testClassWithPrivateFields
|
Running test: testClassWithPrivateFields
|
||||||
|
__proto__ own object undefined
|
||||||
baz own number 4
|
baz own number 4
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
Private properties
|
Private properties
|
||||||
#bar number 3
|
#bar number 3
|
||||||
#foo number 2
|
#foo number 2
|
||||||
|
__proto__ own object undefined
|
||||||
baz own number 4
|
baz own number 4
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
Private properties
|
Private properties
|
||||||
#bar number 3
|
#bar number 3
|
||||||
#baz number 1
|
#baz number 1
|
||||||
@ -79,13 +72,6 @@ Private properties
|
|||||||
#foo number 2
|
#foo number 2
|
||||||
|
|
||||||
Running test: testArrayBuffer
|
Running test: testArrayBuffer
|
||||||
[[Prototype]]
|
|
||||||
Symbol(Symbol.toStringTag) own string ArrayBuffer
|
|
||||||
byteLength own no value, getter
|
|
||||||
constructor own function undefined
|
|
||||||
slice own function undefined
|
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Int8Array]]
|
[[Int8Array]]
|
||||||
0 own number 1
|
0 own number 1
|
||||||
1 own number 1
|
1 own number 1
|
||||||
@ -95,8 +81,7 @@ Internal properties
|
|||||||
5 own number 1
|
5 own number 1
|
||||||
6 own number 1
|
6 own number 1
|
||||||
7 own number 1
|
7 own number 1
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Uint8Array]]
|
[[Uint8Array]]
|
||||||
0 own number 1
|
0 own number 1
|
||||||
1 own number 1
|
1 own number 1
|
||||||
@ -106,31 +91,21 @@ Internal properties
|
|||||||
5 own number 1
|
5 own number 1
|
||||||
6 own number 1
|
6 own number 1
|
||||||
7 own number 1
|
7 own number 1
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Int16Array]]
|
[[Int16Array]]
|
||||||
0 own number 257
|
0 own number 257
|
||||||
1 own number 257
|
1 own number 257
|
||||||
2 own number 257
|
2 own number 257
|
||||||
3 own number 257
|
3 own number 257
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Int32Array]]
|
[[Int32Array]]
|
||||||
0 own number 16843009
|
0 own number 16843009
|
||||||
1 own number 16843009
|
1 own number 16843009
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[ArrayBufferByteLength]]
|
[[ArrayBufferByteLength]]
|
||||||
[[ArrayBufferData]]
|
[[ArrayBufferData]]
|
||||||
|
|
||||||
Running test: testArrayBufferFromWebAssemblyMemory
|
Running test: testArrayBufferFromWebAssemblyMemory
|
||||||
[[Prototype]]
|
|
||||||
Symbol(Symbol.toStringTag) own string ArrayBuffer
|
|
||||||
byteLength own no value, getter
|
|
||||||
constructor own function undefined
|
|
||||||
slice own function undefined
|
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Int8Array]]
|
[[Int8Array]]
|
||||||
[[Uint8Array]]
|
[[Uint8Array]]
|
||||||
[[Int16Array]]
|
[[Int16Array]]
|
||||||
@ -138,22 +113,18 @@ Internal properties
|
|||||||
[[ArrayBufferByteLength]]
|
[[ArrayBufferByteLength]]
|
||||||
[[ArrayBufferData]]
|
[[ArrayBufferData]]
|
||||||
[[WebAssemblyMemory]]
|
[[WebAssemblyMemory]]
|
||||||
Internal properties
|
__proto__ own object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
|
||||||
Running test: testDetachedArrayBuffer
|
Running test: testDetachedArrayBuffer
|
||||||
[[Prototype]] undefined
|
|
||||||
[[IsDetached]] true
|
[[IsDetached]] true
|
||||||
|
|
||||||
Running test: testArrayBufferWithBrokenUintCtor
|
Running test: testArrayBufferWithBrokenUintCtor
|
||||||
|
__proto__ own object undefined
|
||||||
Internal properties
|
Internal properties
|
||||||
[[ArrayBufferByteLength]] number 7
|
[[ArrayBufferByteLength]] number 7
|
||||||
[[ArrayBufferData]] string 0x...
|
[[ArrayBufferData]] string 0x...
|
||||||
[[Int8Array]] object undefined
|
[[Int8Array]] object undefined
|
||||||
[[Prototype]] object undefined
|
|
||||||
[[Uint8Array]] object undefined
|
[[Uint8Array]] object undefined
|
||||||
|
|
||||||
Running test: testObjectWithProtoProperty
|
Running test: testObjectWithProtoProperty
|
||||||
__proto__ own object undefined
|
__proto__ own object undefined
|
||||||
Internal properties
|
|
||||||
[[Prototype]] object undefined
|
|
||||||
|
@ -45,6 +45,8 @@ InspectorTest.runAsyncTestSuite([
|
|||||||
let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer');
|
let objectId = await evaluateToObjectId('new Uint8Array([1, 1, 1, 1, 1, 1, 1, 1]).buffer');
|
||||||
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
||||||
for (let prop of props.result.result) {
|
for (let prop of props.result.result) {
|
||||||
|
if (prop.name === '__proto__')
|
||||||
|
continue;
|
||||||
InspectorTest.log(prop.name);
|
InspectorTest.log(prop.name);
|
||||||
await logGetPropertiesResult(prop.value.objectId);
|
await logGetPropertiesResult(prop.value.objectId);
|
||||||
}
|
}
|
||||||
@ -59,6 +61,8 @@ InspectorTest.runAsyncTestSuite([
|
|||||||
let objectId = await evaluateToObjectId('new WebAssembly.Memory({initial: 1}).buffer');
|
let objectId = await evaluateToObjectId('new WebAssembly.Memory({initial: 1}).buffer');
|
||||||
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
||||||
for (let prop of props.result.result) {
|
for (let prop of props.result.result) {
|
||||||
|
if (prop.name === '__proto__')
|
||||||
|
continue;
|
||||||
InspectorTest.log(prop.name);
|
InspectorTest.log(prop.name);
|
||||||
await logGetPropertiesResult(prop.value.objectId);
|
await logGetPropertiesResult(prop.value.objectId);
|
||||||
}
|
}
|
||||||
@ -80,6 +84,8 @@ InspectorTest.runAsyncTestSuite([
|
|||||||
await Protocol.Runtime.evaluate({ expression: 'b', generatePreview: true })
|
await Protocol.Runtime.evaluate({ expression: 'b', generatePreview: true })
|
||||||
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
let props = await Protocol.Runtime.getProperties({ objectId, ownProperties: true });
|
||||||
for (let prop of props.result.result) {
|
for (let prop of props.result.result) {
|
||||||
|
if (prop.name === '__proto__')
|
||||||
|
continue;
|
||||||
InspectorTest.log(prop.name);
|
InspectorTest.log(prop.name);
|
||||||
await logGetPropertiesResult(prop.value.objectId);
|
await logGetPropertiesResult(prop.value.objectId);
|
||||||
}
|
}
|
||||||
|
@ -27,15 +27,6 @@ expression: (function* foo() { yield 1 })
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[2] : {
|
[2] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : GeneratorFunction
|
|
||||||
description : GeneratorFunction
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[3] : {
|
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -69,15 +60,6 @@ expression: (function foo() {})
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Function
|
|
||||||
description : function () { [native code] }
|
|
||||||
objectId : <objectId>
|
|
||||||
type : function
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -98,15 +80,6 @@ expression: new Number(239)
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Number
|
|
||||||
description : Number
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PrimitiveValue]]
|
name : [[PrimitiveValue]]
|
||||||
value : {
|
value : {
|
||||||
description : 239
|
description : 239
|
||||||
@ -123,15 +96,6 @@ expression: new Boolean(false)
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Boolean
|
|
||||||
description : Boolean
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PrimitiveValue]]
|
name : [[PrimitiveValue]]
|
||||||
value : {
|
value : {
|
||||||
type : boolean
|
type : boolean
|
||||||
@ -147,15 +111,6 @@ expression: new String('abc')
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : String
|
|
||||||
description : String
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PrimitiveValue]]
|
name : [[PrimitiveValue]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
@ -171,15 +126,6 @@ expression: Object(Symbol(42))
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Symbol
|
|
||||||
description : Symbol
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PrimitiveValue]]
|
name : [[PrimitiveValue]]
|
||||||
value : {
|
value : {
|
||||||
description : Symbol(42)
|
description : Symbol(42)
|
||||||
@ -196,15 +142,6 @@ expression: Object(BigInt(2))
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : BigInt
|
|
||||||
description : BigInt
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PrimitiveValue]]
|
name : [[PrimitiveValue]]
|
||||||
value : {
|
value : {
|
||||||
description : 2n
|
description : 2n
|
||||||
@ -223,22 +160,13 @@ expression: Promise.resolve(42)
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Promise
|
|
||||||
description : Promise
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PromiseState]]
|
name : [[PromiseState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : fulfilled
|
value : fulfilled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[2] : {
|
[1] : {
|
||||||
name : [[PromiseResult]]
|
name : [[PromiseResult]]
|
||||||
value : {
|
value : {
|
||||||
description : 42
|
description : 42
|
||||||
@ -255,22 +183,13 @@ expression: new Promise(() => undefined)
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Promise
|
|
||||||
description : Promise
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[PromiseState]]
|
name : [[PromiseState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : pending
|
value : pending
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[2] : {
|
[1] : {
|
||||||
name : [[PromiseResult]]
|
name : [[PromiseResult]]
|
||||||
value : {
|
value : {
|
||||||
type : undefined
|
type : undefined
|
||||||
@ -300,22 +219,13 @@ expression: gen1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : suspended
|
value : suspended
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -324,7 +234,7 @@ expression: gen1
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -333,7 +243,7 @@ expression: gen1
|
|||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[5] : {
|
[4] : {
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -365,22 +275,13 @@ expression: gen1.next();gen1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : suspended
|
value : suspended
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -389,7 +290,7 @@ expression: gen1.next();gen1
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -398,7 +299,7 @@ expression: gen1.next();gen1
|
|||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[5] : {
|
[4] : {
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -430,22 +331,13 @@ expression: gen1.next();gen1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : closed
|
value : closed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -454,7 +346,7 @@ expression: gen1.next();gen1
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -487,22 +379,13 @@ expression: gen2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : suspended
|
value : suspended
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -511,7 +394,7 @@ expression: gen2
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -520,7 +403,7 @@ expression: gen2
|
|||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[5] : {
|
[4] : {
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -552,22 +435,13 @@ expression: gen2.next();gen2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : suspended
|
value : suspended
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -576,7 +450,7 @@ expression: gen2.next();gen2
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -585,7 +459,7 @@ expression: gen2.next();gen2
|
|||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[5] : {
|
[4] : {
|
||||||
name : [[Scopes]]
|
name : [[Scopes]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -617,22 +491,13 @@ expression: gen2.next();gen2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[1] : {
|
[1] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Generator
|
|
||||||
description : Generator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[2] : {
|
|
||||||
name : [[GeneratorState]]
|
name : [[GeneratorState]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : closed
|
value : closed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[GeneratorFunction]]
|
name : [[GeneratorFunction]]
|
||||||
value : {
|
value : {
|
||||||
className : GeneratorFunction
|
className : GeneratorFunction
|
||||||
@ -641,7 +506,7 @@ expression: gen2.next();gen2
|
|||||||
type : function
|
type : function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[GeneratorReceiver]]
|
name : [[GeneratorReceiver]]
|
||||||
value : {
|
value : {
|
||||||
className : global
|
className : global
|
||||||
@ -661,22 +526,13 @@ expression: (new Map([[1,2]])).entries()
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Map Iterator
|
|
||||||
description : Map Iterator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[IteratorHasMore]]
|
name : [[IteratorHasMore]]
|
||||||
value : {
|
value : {
|
||||||
type : boolean
|
type : boolean
|
||||||
value : true
|
value : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[2] : {
|
[1] : {
|
||||||
name : [[IteratorIndex]]
|
name : [[IteratorIndex]]
|
||||||
value : {
|
value : {
|
||||||
description : 0
|
description : 0
|
||||||
@ -684,14 +540,14 @@ expression: (new Map([[1,2]])).entries()
|
|||||||
value : 0
|
value : 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[IteratorKind]]
|
name : [[IteratorKind]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : entries
|
value : entries
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[Entries]]
|
name : [[Entries]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
@ -710,22 +566,13 @@ expression: (new Set([[1,2]])).entries()
|
|||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
internalProperties : [
|
||||||
[0] : {
|
[0] : {
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Set Iterator
|
|
||||||
description : Set Iterator
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[1] : {
|
|
||||||
name : [[IteratorHasMore]]
|
name : [[IteratorHasMore]]
|
||||||
value : {
|
value : {
|
||||||
type : boolean
|
type : boolean
|
||||||
value : true
|
value : true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[2] : {
|
[1] : {
|
||||||
name : [[IteratorIndex]]
|
name : [[IteratorIndex]]
|
||||||
value : {
|
value : {
|
||||||
description : 0
|
description : 0
|
||||||
@ -733,14 +580,14 @@ expression: (new Set([[1,2]])).entries()
|
|||||||
value : 0
|
value : 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[3] : {
|
[2] : {
|
||||||
name : [[IteratorKind]]
|
name : [[IteratorKind]]
|
||||||
value : {
|
value : {
|
||||||
type : string
|
type : string
|
||||||
value : entries
|
value : entries
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[4] : {
|
[3] : {
|
||||||
name : [[Entries]]
|
name : [[Entries]]
|
||||||
value : {
|
value : {
|
||||||
className : Array
|
className : Array
|
||||||
|
@ -4,17 +4,6 @@ Running test: testObject
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -28,23 +17,25 @@ Running test: testObject
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
]
|
[1] : {
|
||||||
}
|
configurable : true
|
||||||
}
|
enumerable : false
|
||||||
{
|
isOwn : true
|
||||||
id : <messageId>
|
name : __proto__
|
||||||
result : {
|
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
value : {
|
||||||
className : Object
|
className : Object
|
||||||
description : Object
|
description : Object
|
||||||
objectId : <objectId>
|
objectId : <objectId>
|
||||||
type : object
|
type : object
|
||||||
}
|
}
|
||||||
|
writable : true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id : <messageId>
|
||||||
|
result : {
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : false
|
configurable : false
|
||||||
@ -129,6 +120,19 @@ Running test: testObject
|
|||||||
}
|
}
|
||||||
writable : false
|
writable : false
|
||||||
}
|
}
|
||||||
|
[6] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,6 @@ Retrieving properties in 2
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -29,6 +18,19 @@ Retrieving properties in 2
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[1] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -36,17 +38,6 @@ Retrieving properties in 1
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -60,6 +51,19 @@ Retrieving properties in 1
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[1] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,17 +72,6 @@ Retrieving properties in 1
|
|||||||
{
|
{
|
||||||
id : <messageId>
|
id : <messageId>
|
||||||
result : {
|
result : {
|
||||||
internalProperties : [
|
|
||||||
[0] : {
|
|
||||||
name : [[Prototype]]
|
|
||||||
value : {
|
|
||||||
className : Object
|
|
||||||
description : Object
|
|
||||||
objectId : <objectId>
|
|
||||||
type : object
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
result : [
|
result : [
|
||||||
[0] : {
|
[0] : {
|
||||||
configurable : true
|
configurable : true
|
||||||
@ -92,6 +85,19 @@ Retrieving properties in 1
|
|||||||
}
|
}
|
||||||
writable : true
|
writable : true
|
||||||
}
|
}
|
||||||
|
[1] : {
|
||||||
|
configurable : true
|
||||||
|
enumerable : false
|
||||||
|
isOwn : true
|
||||||
|
name : __proto__
|
||||||
|
value : {
|
||||||
|
className : Object
|
||||||
|
description : Object
|
||||||
|
objectId : <objectId>
|
||||||
|
type : object
|
||||||
|
}
|
||||||
|
writable : true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user