Web Inspector: REGRESSION(r250087): inspector/model/remote-object.html is timing out
authordrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Nov 2019 20:36:51 +0000 (20:36 +0000)
committerdrousso@apple.com <drousso@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 7 Nov 2019 20:36:51 +0000 (20:36 +0000)
https://bugs.webkit.org/show_bug.cgi?id=202934
<rdar://problem/56270900>

Reviewed by Timothy Hatcher.

Source/JavaScriptCore:

In r250087, the inspector injected script was changed so that remote objects actually
iterate the keys of an array and generate a property descriptor for each. While this worked
fine (and was performant) for fetching remote objects, this was not efficient when creating
object previews, as that path wouldn't be limited by any sort of `fetchCount`, meaning that
a descriptor for every index would be created even though only the first 10 would be used.

Refactor the inspector injected script code so that both the fetch and preview paths only
examine exactly the number of properties desired instead of considering all of them and then
slicing to fit.

* inspector/InjectedScriptSource.js:
(InjectedScript.prototype._getProperties):
(InjectedScript.prototype._forEachPropertyDescriptor): Added.
(InjectedScript.prototype._forEachPropertyDescriptor.createFakeValueDescriptor): Added.
(InjectedScript.prototype._forEachPropertyDescriptor.processDescriptor): Added.
(InjectedScript.prototype._forEachPropertyDescriptor.processProperty): Added.
(RemoteObject.prototype._generatePreview):
(RemoteObject.prototype._appendPropertyPreview): Added.
(RemoteObject.prototype._appendPropertyPreview.appendPreview): Added.
(InjectedScript.prototype._propertyDescriptors): Deleted.
(InjectedScript.prototype._propertyDescriptors.processProperties): Deleted.
(InjectedScript.prototype._propertyDescriptors.arrayIndexPropertyNames): Deleted.
(RemoteObject.prototype._appendPropertyPreviews): Deleted.

Source/WebInspectorUI:

* UserInterface/Views/ObjectTreeView.js:
(WI.ObjectTreeView.addShowMoreIfNeeded):
Drive-by: ensure that the indeterminate progress spinner is added after the last button.
LayoutTests:

Split inspector/model/remote-object.html into separate tests for each type of object being
tested, as well as specialized tests for extremely large values. This allows us to better
know which specific expression can cause a timeout.

* inspector/model/remote-object.html: Removed.
* inspector/model/remote-object-expected.txt: Removed.
* platform/mac-wk1/inspector/model/remote-object-expected.txt: Removed.

* inspector/model/remote-object/array.html: Added.
* inspector/model/remote-object/array-expected.txt: Added.
* inspector/model/remote-object/array-large.html: Added.
* inspector/model/remote-object/array-large-expected.txt: Added.
* inspector/model/remote-object/boolean.html: Added.
* inspector/model/remote-object/boolean-expected.txt: Added.
* inspector/model/remote-object/class.html: Added.
* inspector/model/remote-object/class-expected.txt: Added.
* inspector/model/remote-object/date.html: Added.
* inspector/model/remote-object/date-expected.txt: Added.
* inspector/model/remote-object/error.html: Added.
* inspector/model/remote-object/error-expected.txt: Added.
* inspector/model/remote-object/function.html: Added.
* inspector/model/remote-object/function-expected.txt: Added.
* inspector/model/remote-object/immutable.html: Added.
* inspector/model/remote-object/immutable-expected.txt: Added.
* inspector/model/remote-object/iterator.html: Added.
* inspector/model/remote-object/iterator-expected.txt:  Added.
* inspector/model/remote-object/iterator-large.html: Added.
* inspector/model/remote-object/iterator-large-expected.txt: Added.
* inspector/model/remote-object/map.html: Added.
* inspector/model/remote-object/map-expected.txt: Added.
* inspector/model/remote-object/map-large.html: Added.
* inspector/model/remote-object/map-large-expected.txt: Added.
* inspector/model/remote-object/null.html: Added.
* inspector/model/remote-object/null-expected.txt: Added.
* inspector/model/remote-object/number.html: Added.
* inspector/model/remote-object/number-expected.txt: Added.
* platform/mac-wk1/inspector/number-expected.txt: Added.
* inspector/model/remote-object/object.html: Added.
* inspector/model/remote-object/object-expected.txt: Added.
* inspector/model/remote-object/object-large.html: Added.
* inspector/model/remote-object/object-large-expected.txt: Added.
* inspector/model/remote-object/promise.html: Added.
* inspector/model/remote-object/promise-expected.txt: Added.
* inspector/model/remote-object/regexp.html: Added.
* inspector/model/remote-object/regexp-expected.txt: Added.
* inspector/model/remote-object/set.html: Added.
* inspector/model/remote-object/set-expected.txt: Added.
* inspector/model/remote-object/set-large.html: Added.
* inspector/model/remote-object/set-large-expected.txt: Added.
* inspector/model/remote-object/string.html: Added.
* inspector/model/remote-object/string-expected.txt: Added.
* inspector/model/remote-object/string-large.html: Added.
* inspector/model/remote-object/string-large-expected.txt: Added.
* inspector/model/remote-object/undefined.html: Added.
* inspector/model/remote-object/undefined-expected.txt: Added.

* inspector/model/remote-object/dom.html: Renamed from LayoutTests/inspector/model/remote-object-dom.html.
* inspector/model/remote-object/dom-expected.txt: Renamed from LayoutTests/inspector/model/remote-object-dom-expected.txt.
* inspector/model/remote-object/iterators-mutated.html: Renamed from LayoutTests/inspector/model/remote-object-mutated-iterators.html.
* inspector/model/remote-object/iterators-mutated-expected.txt: Renamed from LayoutTests/inspector/model/remote-object-mutated-iterators-expected.txt.

* inspector/model/remote-object/resources/remote-object-utilities.js: Renamed from LayoutTests/inspector/model/resources/remote-object-utilities.js.

* inspector/runtime/getDisplayableProperties.html:
* inspector/runtime/getDisplayableProperties-expected.txt:
* inspector/runtime/getProperties.html:
* inspector/runtime/getProperties-expected.txt:
Drive-by: fix assertion for when the `__proto__` is included if `fetchStart` is 0.
* TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252202 268f45cc-cd09-0410-ab3c-d52691b4dbfc

65 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/inspector/model/remote-object-expected.txt [deleted file]
LayoutTests/inspector/model/remote-object.html [deleted file]
LayoutTests/inspector/model/remote-object/array-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/array-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/array-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/array.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/boolean-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/boolean.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/class-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/class.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/date-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/date.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/dom-expected.txt [moved from LayoutTests/inspector/model/remote-object-dom-expected.txt with 100% similarity]
LayoutTests/inspector/model/remote-object/dom.html [moved from LayoutTests/inspector/model/remote-object-dom.html with 95% similarity]
LayoutTests/inspector/model/remote-object/error-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/error.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/function-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/function.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/immutable-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/immutable.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/iterator-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/iterator-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/iterator-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/iterator.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/iterators-mutated-expected.txt [moved from LayoutTests/inspector/model/remote-object-mutated-iterators-expected.txt with 100% similarity]
LayoutTests/inspector/model/remote-object/iterators-mutated.html [moved from LayoutTests/inspector/model/remote-object-mutated-iterators.html with 85% similarity]
LayoutTests/inspector/model/remote-object/map-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/map-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/map-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/map.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/null-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/null.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/number-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/number.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/object-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/object-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/object-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/object.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/promise-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/promise.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/regexp-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/regexp.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/resources/remote-object-utilities.js [moved from LayoutTests/inspector/model/resources/remote-object-utilities.js with 82% similarity]
LayoutTests/inspector/model/remote-object/set-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/set-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/set-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/set.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/string-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/string-large-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/string-large.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/string.html [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/undefined-expected.txt [new file with mode: 0644]
LayoutTests/inspector/model/remote-object/undefined.html [new file with mode: 0644]
LayoutTests/inspector/runtime/getDisplayableProperties-expected.txt
LayoutTests/inspector/runtime/getDisplayableProperties.html
LayoutTests/inspector/runtime/getProperties-expected.txt
LayoutTests/inspector/runtime/getProperties.html
LayoutTests/platform/mac-wk1/inspector/model/remote-object-expected.txt [deleted file]
LayoutTests/platform/mac-wk1/inspector/model/remote-object/number-expected.txt [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/inspector/InjectedScriptSource.js
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/UserInterface/Views/ObjectTreeView.js

index b22e4e3..28632ca 100644 (file)
@@ -1,3 +1,82 @@
+2019-11-07  Devin Rousso  <drousso@apple.com>
+
+        Web Inspector: REGRESSION(r250087): inspector/model/remote-object.html is timing out
+        https://bugs.webkit.org/show_bug.cgi?id=202934
+        <rdar://problem/56270900>
+
+        Reviewed by Timothy Hatcher.
+
+        Split inspector/model/remote-object.html into separate tests for each type of object being
+        tested, as well as specialized tests for extremely large values. This allows us to better
+        know which specific expression can cause a timeout.
+
+        * inspector/model/remote-object.html: Removed.
+        * inspector/model/remote-object-expected.txt: Removed.
+        * platform/mac-wk1/inspector/model/remote-object-expected.txt: Removed.
+
+        * inspector/model/remote-object/array.html: Added.
+        * inspector/model/remote-object/array-expected.txt: Added.
+        * inspector/model/remote-object/array-large.html: Added.
+        * inspector/model/remote-object/array-large-expected.txt: Added.
+        * inspector/model/remote-object/boolean.html: Added.
+        * inspector/model/remote-object/boolean-expected.txt: Added.
+        * inspector/model/remote-object/class.html: Added.
+        * inspector/model/remote-object/class-expected.txt: Added.
+        * inspector/model/remote-object/date.html: Added.
+        * inspector/model/remote-object/date-expected.txt: Added.
+        * inspector/model/remote-object/error.html: Added.
+        * inspector/model/remote-object/error-expected.txt: Added.
+        * inspector/model/remote-object/function.html: Added.
+        * inspector/model/remote-object/function-expected.txt: Added.
+        * inspector/model/remote-object/immutable.html: Added.
+        * inspector/model/remote-object/immutable-expected.txt: Added.
+        * inspector/model/remote-object/iterator.html: Added.
+        * inspector/model/remote-object/iterator-expected.txt:  Added.
+        * inspector/model/remote-object/iterator-large.html: Added.
+        * inspector/model/remote-object/iterator-large-expected.txt: Added.
+        * inspector/model/remote-object/map.html: Added.
+        * inspector/model/remote-object/map-expected.txt: Added.
+        * inspector/model/remote-object/map-large.html: Added.
+        * inspector/model/remote-object/map-large-expected.txt: Added.
+        * inspector/model/remote-object/null.html: Added.
+        * inspector/model/remote-object/null-expected.txt: Added.
+        * inspector/model/remote-object/number.html: Added.
+        * inspector/model/remote-object/number-expected.txt: Added.
+        * platform/mac-wk1/inspector/number-expected.txt: Added.
+        * inspector/model/remote-object/object.html: Added.
+        * inspector/model/remote-object/object-expected.txt: Added.
+        * inspector/model/remote-object/object-large.html: Added.
+        * inspector/model/remote-object/object-large-expected.txt: Added.
+        * inspector/model/remote-object/promise.html: Added.
+        * inspector/model/remote-object/promise-expected.txt: Added.
+        * inspector/model/remote-object/regexp.html: Added.
+        * inspector/model/remote-object/regexp-expected.txt: Added.
+        * inspector/model/remote-object/set.html: Added.
+        * inspector/model/remote-object/set-expected.txt: Added.
+        * inspector/model/remote-object/set-large.html: Added.
+        * inspector/model/remote-object/set-large-expected.txt: Added.
+        * inspector/model/remote-object/string.html: Added.
+        * inspector/model/remote-object/string-expected.txt: Added.
+        * inspector/model/remote-object/string-large.html: Added.
+        * inspector/model/remote-object/string-large-expected.txt: Added.
+        * inspector/model/remote-object/undefined.html: Added.
+        * inspector/model/remote-object/undefined-expected.txt: Added.
+
+        * inspector/model/remote-object/dom.html: Renamed from LayoutTests/inspector/model/remote-object-dom.html.
+        * inspector/model/remote-object/dom-expected.txt: Renamed from LayoutTests/inspector/model/remote-object-dom-expected.txt.
+        * inspector/model/remote-object/iterators-mutated.html: Renamed from LayoutTests/inspector/model/remote-object-mutated-iterators.html.
+        * inspector/model/remote-object/iterators-mutated-expected.txt: Renamed from LayoutTests/inspector/model/remote-object-mutated-iterators-expected.txt.
+
+        * inspector/model/remote-object/resources/remote-object-utilities.js: Renamed from LayoutTests/inspector/model/resources/remote-object-utilities.js.
+
+        * inspector/runtime/getDisplayableProperties.html:
+        * inspector/runtime/getDisplayableProperties-expected.txt:
+        * inspector/runtime/getProperties.html:
+        * inspector/runtime/getProperties-expected.txt:
+        Drive-by: fix assertion for when the `__proto__` is included if `fetchStart` is 0.
+
+        * TestExpectations:
+
 2019-11-07  Tuomas Karkkainen  <tuomas.webkit@apple.com>
 
         didPassSomeTestsSilenty and didFaileSomeTests are misspelled in standalone-pre.js
index e4f5db6..54a909a 100644 (file)
@@ -925,9 +925,6 @@ webkit.org/b/129639 inspector/dom/dom-search-crash.html [ Skip ]
 
 webkit.org/b/134982 inspector/debugger/setBreakpoint-dfg-and-modify-local.html [ Failure Pass ]
 
-webkit.org/b/202932 inspector/model/remote-object-weak-collection.html [ Pass Timeout Failure ]
-webkit.org/b/202934 inspector/model/remote-object.html [ Pass Timeout ]
-
 # These tests are fast enough in release but quite slow in debug builds.
 [ Debug ] inspector/console/queryHolders.html [ Skip ]
 [ Debug ] inspector/debugger/debugger-stack-overflow.html [ Skip ]
diff --git a/LayoutTests/inspector/model/remote-object-expected.txt b/LayoutTests/inspector/model/remote-object-expected.txt
deleted file mode 100644 (file)
index cc33bf0..0000000
+++ /dev/null
@@ -1,3809 +0,0 @@
-CONSOLE MESSAGE: line 1: Unhandled Promise Rejection: undefined
-CONSOLE MESSAGE: line 1: Unhandled Promise Rejection: result
-
------------------------------------------------------
-EXPRESSION: null
-{
-  "_type": "object",
-  "_subtype": "null",
-  "_description": "null",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: undefined
-{
-  "_type": "undefined",
-  "_description": "undefined"
-}
-
------------------------------------------------------
-EXPRESSION: Symbol()
-{
-  "_type": "symbol",
-  "_objectId": "<filtered>",
-  "_description": "Symbol()"
-}
-
------------------------------------------------------
-EXPRESSION: Symbol("test")
-{
-  "_type": "symbol",
-  "_objectId": "<filtered>",
-  "_description": "Symbol(test)"
-}
-
------------------------------------------------------
-EXPRESSION: true
-{
-  "_type": "boolean",
-  "_description": "true",
-  "_value": true
-}
-
------------------------------------------------------
-EXPRESSION: false
-{
-  "_type": "boolean",
-  "_description": "false",
-  "_value": false
-}
-
------------------------------------------------------
-EXPRESSION: 0
-{
-  "_type": "number",
-  "_description": "0",
-  "_value": 0
-}
-
------------------------------------------------------
-EXPRESSION: -0
-{
-  "_type": "number",
-  "_description": "-0",
-  "_value": 0
-}
-
------------------------------------------------------
-EXPRESSION: 1
-{
-  "_type": "number",
-  "_description": "1",
-  "_value": 1
-}
-
------------------------------------------------------
-EXPRESSION: -1
-{
-  "_type": "number",
-  "_description": "-1",
-  "_value": -1
-}
-
------------------------------------------------------
-EXPRESSION: 1.234
-{
-  "_type": "number",
-  "_description": "1.234",
-  "_value": 1.234
-}
-
------------------------------------------------------
-EXPRESSION: -1.234
-{
-  "_type": "number",
-  "_description": "-1.234",
-  "_value": -1.234
-}
-
------------------------------------------------------
-EXPRESSION: 1e3
-{
-  "_type": "number",
-  "_description": "1000",
-  "_value": 1000
-}
-
------------------------------------------------------
-EXPRESSION: Number.MAX_VALUE
-{
-  "_type": "number",
-  "_description": "1.7976931348623157e+308",
-  "_value": 1.7976931348623157e+308
-}
-
------------------------------------------------------
-EXPRESSION: Number.MIN_VALUE
-{
-  "_type": "number",
-  "_description": "5e-324",
-  "_value": 5e-324
-}
-
------------------------------------------------------
-EXPRESSION: NaN
-{
-  "_type": "number",
-  "_description": "NaN",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: Infinity
-{
-  "_type": "number",
-  "_description": "Infinity",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: -Infinity
-{
-  "_type": "number",
-  "_description": "-Infinity",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: 123n
-{
-  "_type": "bigint",
-  "_description": "123n",
-  "_value": "123n [BigInt Not Enabled in Web Inspector]"
-}
-
------------------------------------------------------
-EXPRESSION: ''
-{
-  "_type": "string",
-  "_description": "",
-  "_value": ""
-}
-
------------------------------------------------------
-EXPRESSION: '"'
-{
-  "_type": "string",
-  "_description": "\"",
-  "_value": "\""
-}
-
------------------------------------------------------
-EXPRESSION: "'"
-{
-  "_type": "string",
-  "_description": "'",
-  "_value": "'"
-}
-
------------------------------------------------------
-EXPRESSION: `template`
-{
-  "_type": "string",
-  "_description": "template",
-  "_value": "template"
-}
-
------------------------------------------------------
-EXPRESSION: "string"
-{
-  "_type": "string",
-  "_description": "string",
-  "_value": "string"
-}
-
------------------------------------------------------
-EXPRESSION: "Unicode…"
-{
-  "_type": "string",
-  "_description": "Unicode…",
-  "_value": "Unicode…"
-}
-
------------------------------------------------------
-EXPRESSION: "I wish I had something to put here."
-{
-  "_type": "string",
-  "_description": "I wish I had something to put here.",
-  "_value": "I wish I had something to put here."
-}
-
------------------------------------------------------
-EXPRESSION: (function(){})
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function (){}"
-}
-
------------------------------------------------------
-EXPRESSION: function foo(){}; foo
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function foo(){}"
-}
-
------------------------------------------------------
-EXPRESSION: function myFunction(a, b) { console.log(a, b); }; myFunction
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function myFunction(a, b) { console.log(a, b); }"
-}
-
------------------------------------------------------
-EXPRESSION: function myTarget(a, b) { console.log(a, b); }; myTarget.bind(null)
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function myTarget() {\n    [native code]\n}"
-}
-
------------------------------------------------------
-EXPRESSION: Array.prototype.push
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function push() {\n    [native code]\n}"
-}
-
------------------------------------------------------
-EXPRESSION: window.setTimeout
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function setTimeout() {\n    [native code]\n}"
-}
-
------------------------------------------------------
-EXPRESSION: Object.getOwnPropertyDescriptor({ get getter() { return 1 } }, "getter").get
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function () { return 1 }"
-}
-
------------------------------------------------------
-EXPRESSION: Object.getOwnPropertyDescriptor({ set setter(v) { console.log(v); } }, "setter").set
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function (v) { console.log(v); }"
-}
-
------------------------------------------------------
-EXPRESSION: / /
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/ /",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/ /",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: /(?:)/
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/(?:)/",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/(?:)/",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: /^r(e)g[e]{1,}x+/
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/^r(e)g[e]{1,}x+/",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/^r(e)g[e]{1,}x+/",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: /^r(e)g[e]{1,}x+/ig
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/^r(e)g[e]{1,}x+/gi",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/^r(e)g[e]{1,}x+/gi",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new RegExp("")
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/(?:)/",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/(?:)/",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new RegExp("test", "i")
-{
-  "_type": "object",
-  "_subtype": "regexp",
-  "_objectId": "<filtered>",
-  "_description": "/test/i",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "regexp",
-    "_description": "/test/i",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "lastIndex",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: []
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 0,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 0,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [0, -0, 1, 2]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 4,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 4,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "-0"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "2"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [[1],[2],[3]]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 3,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 3,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_name": "1",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_name": "2",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "3"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [true, 1, 1.234, "string", /regex/]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 5,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 5,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "boolean",
-        "_value": "true"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "1.234"
-      },
-      {
-        "_name": "3",
-        "_type": "string",
-        "_value": "string"
-      },
-      {
-        "_name": "4",
-        "_type": "object",
-        "_subtype": "regexp",
-        "_value": "/regex/"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [[null]]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "object",
-              "_subtype": "null",
-              "_value": "null"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [[undefined]]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "undefined",
-              "_value": "undefined"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [{a:1}, {b:2}, {c:2}]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 3,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 3,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_valuePreview": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "a",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_name": "1",
-        "_type": "object",
-        "_valuePreview": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "b",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_name": "2",
-        "_type": "object",
-        "_valuePreview": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "c",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 3,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "object",
-              "_valuePreview": {
-                "_type": "object",
-                "_description": "Object",
-                "_lossless": true,
-                "_overflow": false,
-                "_properties": [
-                  {
-                    "_name": "a",
-                    "_type": "number",
-                    "_value": "1"
-                  }
-                ],
-                "_entries": null
-              }
-            },
-            {
-              "_name": "1",
-              "_type": "object",
-              "_valuePreview": {
-                "_type": "object",
-                "_description": "Object",
-                "_lossless": true,
-                "_overflow": false,
-                "_properties": [
-                  {
-                    "_name": "b",
-                    "_type": "number",
-                    "_value": "2"
-                  }
-                ],
-                "_entries": null
-              }
-            },
-            {
-              "_name": "2",
-              "_type": "object",
-              "_valuePreview": {
-                "_type": "object",
-                "_description": "Object",
-                "_lossless": true,
-                "_overflow": false,
-                "_properties": [
-                  {
-                    "_name": "c",
-                    "_type": "number",
-                    "_value": "2"
-                  }
-                ],
-                "_entries": null
-              }
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: arr = []; arr[0] = arr; arr
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "object",
-        "_subtype": "array",
-        "_value": "Array"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: arr = []; arr.length = 100; arr
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 100,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 100,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 100,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": false,
-    "_overflow": true,
-    "_size": 100,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "4",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "5",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "6",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "7",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "8",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "9",
-        "_type": "number",
-        "_value": "1"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 100,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 100,
-    "_properties": [
-      {
-        "_name": "10",
-        "_type": "number",
-        "_value": "1"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: a = null; (function() { a = arguments; })(1, "2", /3/); a
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Arguments",
-  "_size": 3,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Arguments",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 3,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "1",
-        "_type": "string",
-        "_value": "2"
-      },
-      {
-        "_name": "2",
-        "_type": "object",
-        "_subtype": "regexp",
-        "_value": "/3/"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Int32Array(new ArrayBuffer(16))
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Int32Array",
-  "_size": 4,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Int32Array",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 4,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Uint8ClampedArray(12)
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Uint8ClampedArray",
-  "_size": 12,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Uint8ClampedArray",
-    "_lossless": false,
-    "_overflow": true,
-    "_size": 12,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "4",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "5",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "6",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "7",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "8",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "9",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0; i < intArray.length; ++i) intArray[i] = i; intArray
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Int32Array",
-  "_size": 4,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Int32Array",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 4,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "2"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "3"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array(buffer); int8View
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Int8Array",
-  "_size": 10000000,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Int8Array",
-    "_lossless": false,
-    "_overflow": true,
-    "_size": 10000000,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "1",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "2",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "3",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "4",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "5",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "6",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "7",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "8",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "9",
-        "_type": "number",
-        "_value": "0"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: ({})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: ({a: 1})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "a",
-        "_type": "number",
-        "_value": "1"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: ({a: 1, b: 0, c: -0, d: 456n})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "a",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "b",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "c",
-        "_type": "number",
-        "_value": "-0"
-      },
-      {
-        "_name": "d",
-        "_type": "bigint",
-        "_value": "456n"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: ({a: 1, b: "string", c: /regex/, d: Symbol("sym")})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "a",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "b",
-        "_type": "string",
-        "_value": "string"
-      },
-      {
-        "_name": "c",
-        "_type": "object",
-        "_subtype": "regexp",
-        "_value": "/regex/"
-      },
-      {
-        "_name": "d",
-        "_type": "symbol",
-        "_value": "Symbol(sym)"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: o = {a:1}; o.b = o; o
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "a",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "b",
-        "_type": "object",
-        "_value": "Object"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: ({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){}})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "a",
-        "_type": "function",
-        "_value": ""
-      },
-      {
-        "_name": "b",
-        "_type": "function",
-        "_value": ""
-      },
-      {
-        "_name": "getter",
-        "_type": "accessor"
-      },
-      {
-        "_name": "setter",
-        "_type": "accessor"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: function Foo() {}; new Foo
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Foo",
-  "_preview": {
-    "_type": "object",
-    "_description": "Foo",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: var Foo2 = function() {}; new Foo2
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Foo2",
-  "_preview": {
-    "_type": "object",
-    "_description": "Foo2",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: var namespace = {}; namespace.Foo3 = function() {}; new namespace.Foo3
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, get x() {return this._x;}}; new Bar
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Bar",
-  "_preview": {
-    "_type": "object",
-    "_description": "Bar",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "_x",
-        "_type": "number",
-        "_value": "5"
-      },
-      {
-        "_name": "constructor",
-        "_type": "function",
-        "_value": ""
-      },
-      {
-        "_name": "x",
-        "_type": "accessor"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return this._x;}}; new Bar2
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Bar2",
-  "_preview": {
-    "_type": "object",
-    "_description": "Bar2",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "_x",
-        "_type": "number",
-        "_value": "5"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new ArrayBuffer(16)
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "ArrayBuffer",
-  "_preview": {
-    "_type": "object",
-    "_description": "ArrayBuffer",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "byteLength",
-        "_type": "number",
-        "_value": "16"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new DataView(new ArrayBuffer(16))
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "DataView",
-  "_preview": {
-    "_type": "object",
-    "_description": "DataView",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "byteOffset",
-        "_type": "number",
-        "_value": "0"
-      },
-      {
-        "_name": "byteLength",
-        "_type": "number",
-        "_value": "16"
-      },
-      {
-        "_name": "buffer",
-        "_type": "object",
-        "_value": "ArrayBuffer"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: obj = {}; obj["prop"] = 1; obj[Symbol()] = 2; obj[Symbol("sym")] = 3; obj[Symbol("sym")] = 4; obj[Symbol.iterator] = Symbol(); obj
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "prop",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "Symbol()",
-        "_type": "number",
-        "_value": "2"
-      },
-      {
-        "_name": "Symbol(sym)",
-        "_type": "number",
-        "_value": "3"
-      },
-      {
-        "_name": "Symbol(sym)",
-        "_type": "number",
-        "_value": "4"
-      },
-      {
-        "_name": "Symbol(Symbol.iterator)",
-        "_type": "symbol",
-        "_value": "Symbol()"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
-{
-  "_type": "object",
-  "_subtype": "error",
-  "_objectId": "<filtered>",
-  "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "error",
-    "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "message",
-        "_type": "string",
-        "_value": "undefined is not an object (evaluating '[].x.x')"
-      },
-      {
-        "_name": "line",
-        "_type": "number",
-        "_value": "3"
-      },
-      {
-        "_name": "column",
-        "_type": "number",
-        "_value": "25"
-      },
-      {
-        "_name": "stack",
-        "_type": "string",
-        "_value": "global code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: error = null; try { eval("if()"); } catch (e) { error = e; }; error
-{
-  "_type": "object",
-  "_subtype": "error",
-  "_objectId": "<filtered>",
-  "_description": "SyntaxError: Unexpected token ')'",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "error",
-    "_description": "SyntaxError: Unexpected token ')'",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "message",
-        "_type": "string",
-        "_value": "Unexpected token ')'"
-      },
-      {
-        "_name": "line",
-        "_type": "number",
-        "_value": "3"
-      },
-      {
-        "_name": "column",
-        "_type": "number",
-        "_value": "25"
-      },
-      {
-        "_name": "stack",
-        "_type": "string",
-        "_value": "eval@[native code]\nglobal code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: error = null; try { document.createTextNode("").splitText(100); } catch (e) { error = e; }; error
-{
-  "_type": "object",
-  "_subtype": "error",
-  "_objectId": "<filtered>",
-  "_description": "IndexSizeError: The index is not in the allowed range.",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "error",
-    "_description": "IndexSizeError: The index is not in the allowed range.",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "line",
-        "_type": "number",
-        "_value": "3"
-      },
-      {
-        "_name": "column",
-        "_type": "number",
-        "_value": "58"
-      },
-      {
-        "_name": "stack",
-        "_type": "string",
-        "_value": "splitText@[native code]\nglobal code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
-      },
-      {
-        "_name": "code",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "name",
-        "_type": "string",
-        "_value": "IndexSizeError"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Map
-{
-  "_type": "object",
-  "_subtype": "map",
-  "_objectId": "<filtered>",
-  "_description": "Map",
-  "_size": 0,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "map",
-    "_description": "Map",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 0,
-    "_properties": [],
-    "_entries": []
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new Map; map.set(1, 2); map.set("key", "value"); map
-{
-  "_type": "object",
-  "_subtype": "map",
-  "_objectId": "<filtered>",
-  "_description": "Map",
-  "_size": 2,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "map",
-    "_description": "Map",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 2,
-    "_properties": [],
-    "_entries": [
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "string",
-          "_description": "key",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "string",
-          "_description": "value",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]); map
-{
-  "_type": "object",
-  "_subtype": "map",
-  "_objectId": "<filtered>",
-  "_description": "Map",
-  "_size": 2,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "map",
-    "_description": "Map",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 2,
-    "_properties": [],
-    "_entries": [
-      {
-        "_key": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "a",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        },
-        "_value": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "b",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "object",
-          "_subtype": "node",
-          "_description": "<body>",
-          "_lossless": false,
-          "_overflow": true,
-          "_properties": [
-            {
-              "_name": "aLink",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "background",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "bgColor",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "link",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "text",
-              "_type": "string",
-              "_value": ""
-            }
-          ],
-          "_entries": null
-        },
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
-{
-  "_type": "object",
-  "_subtype": "map",
-  "_objectId": "<filtered>",
-  "_description": "Map",
-  "_size": 101,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "map",
-    "_description": "Map",
-    "_lossless": false,
-    "_overflow": true,
-    "_size": 101,
-    "_properties": [],
-    "_entries": [
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "0",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "0",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_key": {
-          "_type": "number",
-          "_description": "4",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        },
-        "_value": {
-          "_type": "number",
-          "_description": "4",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new Map; map.set(map, map); map
-{
-  "_type": "object",
-  "_subtype": "map",
-  "_objectId": "<filtered>",
-  "_description": "Map",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "map",
-    "_description": "Map",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [],
-    "_entries": [
-      {
-        "_key": {
-          "_type": "object",
-          "_subtype": "map",
-          "_description": "Map",
-          "_lossless": false,
-          "_overflow": true,
-          "_size": 1,
-          "_properties": [],
-          "_entries": []
-        },
-        "_value": {
-          "_type": "object",
-          "_subtype": "map",
-          "_description": "Map",
-          "_lossless": false,
-          "_overflow": true,
-          "_size": 1,
-          "_properties": [],
-          "_entries": []
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); map
-{
-  "_type": "object",
-  "_subtype": "weakmap",
-  "_objectId": "<filtered>",
-  "_description": "WeakMap",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "weakmap",
-    "_description": "WeakMap",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [],
-    "_entries": [
-      {
-        "_key": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "id",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        },
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Set
-{
-  "_type": "object",
-  "_subtype": "set",
-  "_objectId": "<filtered>",
-  "_description": "Set",
-  "_size": 0,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "set",
-    "_description": "Set",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 0,
-    "_properties": [],
-    "_entries": []
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new Set; set.add(1); set.add(2); set.add("key"); set
-{
-  "_type": "object",
-  "_subtype": "set",
-  "_objectId": "<filtered>",
-  "_description": "Set",
-  "_size": 3,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "set",
-    "_description": "Set",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 3,
-    "_properties": [],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "key",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]); set
-{
-  "_type": "object",
-  "_subtype": "set",
-  "_objectId": "<filtered>",
-  "_description": "Set",
-  "_size": 3,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "set",
-    "_description": "Set",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 3,
-    "_properties": [],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "a",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "node",
-          "_description": "<body>",
-          "_lossless": false,
-          "_overflow": true,
-          "_properties": [
-            {
-              "_name": "aLink",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "background",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "bgColor",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "link",
-              "_type": "string",
-              "_value": ""
-            },
-            {
-              "_name": "text",
-              "_type": "string",
-              "_value": ""
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
-{
-  "_type": "object",
-  "_subtype": "set",
-  "_objectId": "<filtered>",
-  "_description": "Set",
-  "_size": 101,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "set",
-    "_description": "Set",
-    "_lossless": false,
-    "_overflow": true,
-    "_size": 101,
-    "_properties": [],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "0",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "4",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new Set; set.add(set); set
-{
-  "_type": "object",
-  "_subtype": "set",
-  "_objectId": "<filtered>",
-  "_description": "Set",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "set",
-    "_description": "Set",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "set",
-          "_description": "Set",
-          "_lossless": false,
-          "_overflow": true,
-          "_size": 1,
-          "_properties": [],
-          "_entries": []
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set
-{
-  "_type": "object",
-  "_subtype": "weakset",
-  "_objectId": "<filtered>",
-  "_description": "WeakSet",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "weakset",
-    "_description": "WeakSet",
-    "_lossless": true,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "id",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: "a"[Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "String Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "String Iterator",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "string",
-        "_type": "string",
-        "_value": "a",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "a",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: "long string"[Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "String Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "String Iterator",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "string",
-        "_type": "string",
-        "_value": "long string",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "l",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "o",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "n",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "g",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": " ",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [][Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 0,
-          "_properties": [],
-          "_entries": null
-        },
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": []
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [1][Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 1,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        },
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [1, "two", 3, "four", 5, "size"][Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_value": "Array",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "two",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "four",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "5",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [1, "two", 3, "four", 5, "size"].keys()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_value": "Array",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "key",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "0",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "4",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: [1, "two", 3, "four", 5, "size"].entries()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_value": "Array",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "key+value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "0"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "string",
-              "_value": "two"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "2"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "3"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "3"
-            },
-            {
-              "_name": "1",
-              "_type": "string",
-              "_value": "four"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "4"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "5"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map = new Map; map.set(1, 2); map.set("key", "value"); map.values()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Map Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Map Iterator",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "map",
-        "_type": "object",
-        "_subtype": "map",
-        "_value": "Map",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "value",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map.keys()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Map Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Map Iterator",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "map",
-        "_type": "object",
-        "_subtype": "map",
-        "_value": "Map",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "key",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "key",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map.entries()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Map Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Map Iterator",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "map",
-        "_type": "object",
-        "_subtype": "map",
-        "_value": "Map",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "key+value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "string",
-              "_value": "key"
-            },
-            {
-              "_name": "1",
-              "_type": "string",
-              "_value": "value"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Set Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Set Iterator",
-    "_lossless": false,
-    "_overflow": true,
-    "_properties": [
-      {
-        "_name": "set",
-        "_type": "object",
-        "_subtype": "set",
-        "_value": "Set",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "0",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "3",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "4",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: map.entries()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Map Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Map Iterator",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "map",
-        "_type": "object",
-        "_subtype": "map",
-        "_value": "Map",
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "key+value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "string",
-              "_value": "key"
-            },
-            {
-              "_name": "1",
-              "_type": "string",
-              "_value": "value"
-            }
-          ],
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: x = undefined; (function() { x = arguments; })(1, "two"); x[Symbol.iterator]()
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Arguments",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "string",
-              "_value": "two"
-            }
-          ],
-          "_entries": null
-        },
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "string",
-          "_description": "two",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: iter = [1, 2][Symbol.iterator](); iter["return"] = function(){}; iter
-{
-  "_type": "object",
-  "_subtype": "iterator",
-  "_objectId": "<filtered>",
-  "_description": "Array Iterator",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "iterator",
-    "_description": "Array Iterator",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "array",
-        "_type": "object",
-        "_subtype": "array",
-        "_valuePreview": {
-          "_type": "object",
-          "_subtype": "array",
-          "_description": "Array",
-          "_lossless": true,
-          "_overflow": false,
-          "_size": 2,
-          "_properties": [
-            {
-              "_name": "0",
-              "_type": "number",
-              "_value": "1"
-            },
-            {
-              "_name": "1",
-              "_type": "number",
-              "_value": "2"
-            }
-          ],
-          "_entries": null
-        },
-        "_internal": true
-      },
-      {
-        "_name": "kind",
-        "_type": "string",
-        "_value": "value",
-        "_internal": true
-      }
-    ],
-    "_entries": [
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "1",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      },
-      {
-        "_value": {
-          "_type": "number",
-          "_description": "2",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": null,
-          "_entries": null
-        }
-      }
-    ]
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Promise(function(){})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Promise",
-  "_preview": {
-    "_type": "object",
-    "_description": "Promise",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "status",
-        "_type": "string",
-        "_value": "pending",
-        "_internal": true
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Promise.reject()
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Promise",
-  "_preview": {
-    "_type": "object",
-    "_description": "Promise",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "status",
-        "_type": "string",
-        "_value": "rejected",
-        "_internal": true
-      },
-      {
-        "_name": "result",
-        "_type": "undefined",
-        "_value": "undefined",
-        "_internal": true
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Promise.reject("result")
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Promise",
-  "_preview": {
-    "_type": "object",
-    "_description": "Promise",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "status",
-        "_type": "string",
-        "_value": "rejected",
-        "_internal": true
-      },
-      {
-        "_name": "result",
-        "_type": "string",
-        "_value": "result",
-        "_internal": true
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Promise.resolve()
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Promise",
-  "_preview": {
-    "_type": "object",
-    "_description": "Promise",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "status",
-        "_type": "string",
-        "_value": "resolved",
-        "_internal": true
-      },
-      {
-        "_name": "result",
-        "_type": "undefined",
-        "_value": "undefined",
-        "_internal": true
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Promise.resolve({result:1})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Promise",
-  "_preview": {
-    "_type": "object",
-    "_description": "Promise",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "status",
-        "_type": "string",
-        "_value": "resolved",
-        "_internal": true
-      },
-      {
-        "_name": "result",
-        "_type": "object",
-        "_valuePreview": {
-          "_type": "object",
-          "_description": "Object",
-          "_lossless": true,
-          "_overflow": false,
-          "_properties": [
-            {
-              "_name": "result",
-              "_type": "number",
-              "_value": "1"
-            }
-          ],
-          "_entries": null
-        },
-        "_internal": true
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Proxy({x:1, y:1}, {handler: true})
-{
-  "_type": "object",
-  "_subtype": "proxy",
-  "_objectId": "<filtered>",
-  "_description": "Proxy",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "proxy",
-    "_description": "Proxy",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "x",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "y",
-        "_type": "number",
-        "_value": "1"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: new Proxy(new Proxy({foo:1, bar:1}, {}), {})
-{
-  "_type": "object",
-  "_subtype": "proxy",
-  "_objectId": "<filtered>",
-  "_description": "Proxy",
-  "_preview": {
-    "_type": "object",
-    "_subtype": "proxy",
-    "_description": "Proxy",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [
-      {
-        "_name": "foo",
-        "_type": "number",
-        "_value": "1"
-      },
-      {
-        "_name": "bar",
-        "_type": "number",
-        "_value": "1"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Person = class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }; Person
-{
-  "_type": "function",
-  "_subtype": "class",
-  "_objectId": "<filtered>",
-  "_description": "class Person",
-  "_classPrototype": {
-    "_type": "object",
-    "_objectId": "<filtered>",
-    "_description": "Person"
-  },
-  "_functionDescription": "class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }"
-}
-
------------------------------------------------------
-EXPRESSION: Person.prototype.methodName
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function methodName(p1, p2){}"
-}
-
------------------------------------------------------
-EXPRESSION: new Person
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Person",
-  "_preview": {
-    "_type": "object",
-    "_description": "Person",
-    "_lossless": false,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Alpha = class A { methodA(){} }; Beta = class B extends Alpha { methodB(){} }; Beta
-{
-  "_type": "function",
-  "_subtype": "class",
-  "_objectId": "<filtered>",
-  "_description": "class B",
-  "_classPrototype": {
-    "_type": "object",
-    "_objectId": "<filtered>",
-    "_description": "B"
-  },
-  "_functionDescription": "class B extends Alpha { methodB(){} }"
-}
-
------------------------------------------------------
-EXPRESSION: [Beta]
-{
-  "_type": "object",
-  "_subtype": "array",
-  "_objectId": "<filtered>",
-  "_description": "Array",
-  "_size": 1,
-  "_preview": {
-    "_type": "object",
-    "_subtype": "array",
-    "_description": "Array",
-    "_lossless": false,
-    "_overflow": false,
-    "_size": 1,
-    "_properties": [
-      {
-        "_name": "0",
-        "_type": "function",
-        "_subtype": "class",
-        "_value": "class B"
-      }
-    ],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Object.seal({})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
------------------------------------------------------
-EXPRESSION: Object.freeze({})
-{
-  "_type": "object",
-  "_objectId": "<filtered>",
-  "_description": "Object",
-  "_preview": {
-    "_type": "object",
-    "_description": "Object",
-    "_lossless": true,
-    "_overflow": false,
-    "_properties": [],
-    "_entries": null
-  }
-}
-
diff --git a/LayoutTests/inspector/model/remote-object.html b/LayoutTests/inspector/model/remote-object.html
deleted file mode 100644 (file)
index 70a0958..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE html><!-- webkit-test-runner [ jscOptions=--useBigInt=true ] -->
-<html>
-<head>
-<meta charset="utf-8">
-<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
-<script src="resources/remote-object-utilities.js"></script>
-<script>
-function test()
-{
-    let steps = [
-    // Special:
-
-        // Null / undefined
-        {expression: `null`},
-        {expression: `undefined`},
-
-        // Symbol
-        {expression: `Symbol()`},
-        {expression: `Symbol("test")`},
-
-    // Primatives:
-
-        // Boolean
-        {expression: `true`},
-        {expression: `false`},
-
-        // Number
-        {expression: `0`},
-        {expression: `-0`},
-        {expression: `1`},
-        {expression: `-1`},
-        {expression: `1.234`},
-        {expression: `-1.234`},
-        {expression: `1e3`},
-        {expression: `Number.MAX_VALUE`},
-        {expression: `Number.MIN_VALUE`},
-        {expression: `NaN`},
-        {expression: `Infinity`},
-        {expression: `-Infinity`},
-
-        // BigInt
-        {expression: `123n`},
-
-        // Strings
-        {expression: `''`},
-        {expression: `'"'`}, // a single quoted string
-        {expression: `"'"`}, // a double quoted string
-        {expression: "`template`"}, // a template string
-        {expression: `"string"`},
-        {expression: `"Unicode…"`},
-        {expression: `"I wish I had something to put here."`},
-
-        // Function
-        {expression: `(function(){})`},
-        {expression: `function foo(){}; foo`},
-        {expression: `function myFunction(a, b) { console.log(a, b); }; myFunction`},
-        {expression: `function myTarget(a, b) { console.log(a, b); }; myTarget.bind(null)`}, // bound function
-        {expression: `Array.prototype.push`}, // native (ECMAScript)
-        {expression: `window.setTimeout`}, // native (DOM)
-        {expression: `Object.getOwnPropertyDescriptor({ get getter() { return 1 } }, "getter").get`}, // getter
-        {expression: `Object.getOwnPropertyDescriptor({ set setter(v) { console.log(v); } }, "setter").set`}, // setter
-
-    // Objects:
-
-        // Date
-        {expression: `new Date(99)`, browserOnly: true},
-        {expression: `new Date(1421903245871)`, browserOnly: true},
-
-        // Regexp
-        {expression: `/ /`},
-        {expression: `/(?:)/`},
-        {expression: `/^r(e)g[e]{1,}x+/`},
-        {expression: `/^r(e)g[e]{1,}x+/ig`},
-        {expression: `new RegExp("")`},
-        {expression: `new RegExp("test", "i")`},
-
-        // Array
-        {expression: `[]`},
-        {expression: `[0, -0, 1, 2]`},
-        {expression: `[[1],[2],[3]]`},
-        {expression: `[true, 1, 1.234, "string", /regex/]`},
-        {expression: `[[null]]`},
-        {expression: `[[undefined]]`},
-        {expression: `[{a:1}, {b:2}, {c:2}]`},
-        {expression: `[[{a:1}, {b:2}, {c:2}]]`},
-        {expression: `arr = []; arr[0] = arr; arr`}, // cyclic
-        {expression: `arr = []; arr.length = 100; arr`}, // 100 empty elements
-        {expression: `arr = []; arr.length = 100; arr.fill(1)`}, // 100 full elements
-        {expression: `arr = []; arr.length = 100; arr[10] = 1; arr`}, // sparse
-
-        // Array-like (Arguments, TypedArrays)
-        {expression: `a = null; (function() { a = arguments; })(1, "2", /3/); a`},
-        {expression: `new Int32Array(new ArrayBuffer(16))`},
-        {expression: `new Uint8ClampedArray(12)`},
-        {expression: `var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0; i < intArray.length; ++i) intArray[i] = i; intArray`},
-        {expression: `var buffer = new ArrayBuffer(10000000); var int8View = new Int8Array(buffer); int8View`}, // 10000000 elements.
-
-        // Object
-        {expression: `({})`},
-        {expression: `({a: 1})`},
-        {expression: `({a: 1, b: 0, c: -0, d: 456n})`},
-        {expression: `({a: 1, b: \"string\", c: /regex/, d: Symbol("sym")})`},
-        {expression: `o = {a:1}; o.b = o; o`}, // cyclic
-        {expression: `({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){}})`},
-        {expression: `function Foo() {}; new Foo`},
-        {expression: `var Foo2 = function() {}; new Foo2`},
-        {expression: `var namespace = {}; namespace.Foo3 = function() {}; new namespace.Foo3`},
-        {expression: `function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, get x() {return this._x;}}; new Bar`},
-        {expression: `function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return this._x;}}; new Bar2`},
-        {expression: `new ArrayBuffer(16)`},
-        {expression: `new DataView(new ArrayBuffer(16))`},
-        {expression: `obj = {}; obj["prop"] = 1; obj[Symbol()] = 2; obj[Symbol("sym")] = 3; obj[Symbol("sym")] = 4; obj[Symbol.iterator] = Symbol(); obj`}, // Symbol properties
-
-        // Error
-        {expression: `error = null; try { [].x.x; } catch (e) { error = e; }; error`},
-        {expression: `error = null; try { eval("if()"); } catch (e) { error = e; }; error`},
-        {expression: `error = null; try { document.createTextNode("").splitText(100); } catch (e) { error = e; }; error`},
-
-        // Map / WeakMap
-        {expression: `new Map`},
-        {expression: `map = new Map; map.set(1, 2); map.set("key", "value"); map`},
-        {expression: `map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]); map`},
-        {expression: `map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map`},
-        {expression: `map = new Map; map.set(map, map); map`},
-        {expression: `map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); map`},
-
-        // Set / WeakSet
-        {expression: `new Set`},
-        {expression: `set = new Set; set.add(1); set.add(2); set.add("key"); set`},
-        {expression: `set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]); set`},
-        {expression: `set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set`},
-        {expression: `set = new Set; set.add(set); set`},
-        {expression: `set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set`},
-
-        // Iterators
-        {expression: `"a"[Symbol.iterator]()`},
-        {expression: `"long string"[Symbol.iterator]()`},
-        {expression: `[][Symbol.iterator]()`},
-        {expression: `[1][Symbol.iterator]()`},
-        {expression: `[1, "two", 3, "four", 5, "size"][Symbol.iterator]()`},
-        {expression: `[1, "two", 3, "four", 5, "size"].keys()`},
-        {expression: `[1, "two", 3, "four", 5, "size"].entries()`},
-        {expression: `map = new Map; map.set(1, 2); map.set("key", "value"); map.values()`},
-        {expression: `map.keys()`},
-        {expression: `map.entries()`},
-        {expression: `set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values()`},
-        {expression: `map.entries()`},
-        {expression: `x = undefined; (function() { x = arguments; })(1, "two"); x[Symbol.iterator]()`},
-        {expression: `iter = [1, 2][Symbol.iterator](); iter["return"] = function(){}; iter`},
-
-        // Promise
-        {expression: `new Promise(function(){})`},
-        {expression: `Promise.reject()`},
-        {expression: `Promise.reject("result")`},
-        {expression: `Promise.resolve()`},
-        {expression: `Promise.resolve({result:1})`},
-
-        // Proxy
-        {expression: `new Proxy({x:1, y:1}, {handler: true})`},
-        {expression: `new Proxy(new Proxy({foo:1, bar:1}, {}), {})`},
-
-    // Classes
-
-        {expression: `Person = class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }; Person`}, // Constructor => class type
-        {expression: `Person.prototype.methodName`}, // Method => just a function type
-        {expression: `new Person`}, // Instance, not lossless, it's prototype may have interesting methods to show
-        {expression: `Alpha = class A { methodA(){} }; Beta = class B extends Alpha { methodB(){} }; Beta`},
-        {expression: `[Beta]`},
-
-    // Improveable:
-
-        // Sealed / Frozen objects.
-        {expression: `Object.seal({})`},
-        {expression: `Object.freeze({})`},
-    ];
-
-    if (!window.WI) {
-        window.steps = steps;
-        return;
-    }
-
-    runSteps(steps);
-}
-</script>
-</head>
-<body onload="runTest(); runInBrowserTest();"></body>
-</html>
diff --git a/LayoutTests/inspector/model/remote-object/array-expected.txt b/LayoutTests/inspector/model/remote-object/array-expected.txt
new file mode 100644 (file)
index 0000000..80cc438
--- /dev/null
@@ -0,0 +1,778 @@
+
+-----------------------------------------------------
+EXPRESSION: []
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 0,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 0,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [0, -0, 1, 2]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 4,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 4,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "-0"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "2"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [[1],[2],[3]]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 3,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 3,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_name": "1",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_name": "2",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "3"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [true, 1, 1.234, "string", /regex/]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 5,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 5,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "boolean",
+        "_value": "true"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "1.234"
+      },
+      {
+        "_name": "3",
+        "_type": "string",
+        "_value": "string"
+      },
+      {
+        "_name": "4",
+        "_type": "object",
+        "_subtype": "regexp",
+        "_value": "/regex/"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [[null]]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "object",
+              "_subtype": "null",
+              "_value": "null"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [[undefined]]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "undefined",
+              "_value": "undefined"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [{a:1}, {b:2}, {c:2}]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 3,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 3,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_valuePreview": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "a",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_name": "1",
+        "_type": "object",
+        "_valuePreview": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "b",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_name": "2",
+        "_type": "object",
+        "_valuePreview": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "c",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [[{a:1}, {b:2}, {c:2}]]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 3,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "object",
+              "_valuePreview": {
+                "_type": "object",
+                "_description": "Object",
+                "_lossless": true,
+                "_overflow": false,
+                "_properties": [
+                  {
+                    "_name": "a",
+                    "_type": "number",
+                    "_value": "1"
+                  }
+                ],
+                "_entries": null
+              }
+            },
+            {
+              "_name": "1",
+              "_type": "object",
+              "_valuePreview": {
+                "_type": "object",
+                "_description": "Object",
+                "_lossless": true,
+                "_overflow": false,
+                "_properties": [
+                  {
+                    "_name": "b",
+                    "_type": "number",
+                    "_value": "2"
+                  }
+                ],
+                "_entries": null
+              }
+            },
+            {
+              "_name": "2",
+              "_type": "object",
+              "_valuePreview": {
+                "_type": "object",
+                "_description": "Object",
+                "_lossless": true,
+                "_overflow": false,
+                "_properties": [
+                  {
+                    "_name": "c",
+                    "_type": "number",
+                    "_value": "2"
+                  }
+                ],
+                "_entries": null
+              }
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: arr = []; arr[0] = arr; arr
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "object",
+        "_subtype": "array",
+        "_value": "Array"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: arr = []; arr.length = 100; arr
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 100,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 100,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: arr = []; arr.length = 100; arr.fill(1)
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 100,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 100,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "4",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "5",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "6",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "7",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "8",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "9",
+        "_type": "number",
+        "_value": "1"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: arr = []; arr.length = 100; arr[10] = 1; arr
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 100,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 100,
+    "_properties": [
+      {
+        "_name": "10",
+        "_type": "number",
+        "_value": "1"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: a = null; (function() { a = arguments; })(1, "2", /3/); a
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Arguments",
+  "_size": 3,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Arguments",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 3,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "1",
+        "_type": "string",
+        "_value": "2"
+      },
+      {
+        "_name": "2",
+        "_type": "object",
+        "_subtype": "regexp",
+        "_value": "/3/"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new Int32Array(new ArrayBuffer(16))
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Int32Array",
+  "_size": 4,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Int32Array",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 4,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new Uint8ClampedArray(12)
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Uint8ClampedArray",
+  "_size": 12,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Uint8ClampedArray",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 12,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "4",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "5",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "6",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "7",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "8",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "9",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0; i < intArray.length; ++i) intArray[i] = i; intArray
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Int32Array",
+  "_size": 4,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Int32Array",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 4,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "2"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "3"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/array-large-expected.txt b/LayoutTests/inspector/model/remote-object/array-large-expected.txt
new file mode 100644 (file)
index 0000000..75e7e36
--- /dev/null
@@ -0,0 +1,72 @@
+
+-----------------------------------------------------
+EXPRESSION: new Int8Array(new ArrayBuffer(1000000))
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Int8Array",
+  "_size": 1000000,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Int8Array",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 1000000,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "4",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "5",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "6",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "7",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "8",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "9",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/array-large.html b/LayoutTests/inspector/model/remote-object/array-large.html
new file mode 100644 (file)
index 0000000..2999d6c
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `new Int8Array(new ArrayBuffer(1000000))`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/array.html b/LayoutTests/inspector/model/remote-object/array.html
new file mode 100644 (file)
index 0000000..e76c734
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `[]`},
+        {expression: `[0, -0, 1, 2]`},
+        {expression: `[[1],[2],[3]]`},
+        {expression: `[true, 1, 1.234, "string", /regex/]`},
+        {expression: `[[null]]`},
+        {expression: `[[undefined]]`},
+        {expression: `[{a:1}, {b:2}, {c:2}]`},
+        {expression: `[[{a:1}, {b:2}, {c:2}]]`},
+        {expression: `arr = []; arr[0] = arr; arr`}, // cyclic
+        {expression: `arr = []; arr.length = 100; arr`}, // 100 empty elements
+        {expression: `arr = []; arr.length = 100; arr.fill(1)`}, // 100 full elements
+        {expression: `arr = []; arr.length = 100; arr[10] = 1; arr`}, // sparse
+        {expression: `a = null; (function() { a = arguments; })(1, "2", /3/); a`}, // arguments
+        {expression: `new Int32Array(new ArrayBuffer(16))`},
+        {expression: `new Uint8ClampedArray(12)`},
+        {expression: `var intArray = new Int32Array(new ArrayBuffer(16)); for (var i = 0; i < intArray.length; ++i) intArray[i] = i; intArray`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/boolean-expected.txt b/LayoutTests/inspector/model/remote-object/boolean-expected.txt
new file mode 100644 (file)
index 0000000..1e10e60
--- /dev/null
@@ -0,0 +1,17 @@
+
+-----------------------------------------------------
+EXPRESSION: true
+{
+  "_type": "boolean",
+  "_description": "true",
+  "_value": true
+}
+
+-----------------------------------------------------
+EXPRESSION: false
+{
+  "_type": "boolean",
+  "_description": "false",
+  "_value": false
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/boolean.html b/LayoutTests/inspector/model/remote-object/boolean.html
new file mode 100644 (file)
index 0000000..1bf2b5c
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `true`},
+        {expression: `false`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/class-expected.txt b/LayoutTests/inspector/model/remote-object/class-expected.txt
new file mode 100644 (file)
index 0000000..5cbc6eb
--- /dev/null
@@ -0,0 +1,82 @@
+
+-----------------------------------------------------
+EXPRESSION: Person = class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }; Person
+{
+  "_type": "function",
+  "_subtype": "class",
+  "_objectId": "<filtered>",
+  "_description": "class Person",
+  "_classPrototype": {
+    "_type": "object",
+    "_objectId": "<filtered>",
+    "_description": "Person"
+  },
+  "_functionDescription": "class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }"
+}
+
+-----------------------------------------------------
+EXPRESSION: Person.prototype.methodName
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function methodName(p1, p2){}"
+}
+
+-----------------------------------------------------
+EXPRESSION: new Person
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Person",
+  "_preview": {
+    "_type": "object",
+    "_description": "Person",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Alpha = class A { methodA(){} }; Beta = class B extends Alpha { methodB(){} }; Beta
+{
+  "_type": "function",
+  "_subtype": "class",
+  "_objectId": "<filtered>",
+  "_description": "class B",
+  "_classPrototype": {
+    "_type": "object",
+    "_objectId": "<filtered>",
+    "_description": "B"
+  },
+  "_functionDescription": "class B extends Alpha { methodB(){} }"
+}
+
+-----------------------------------------------------
+EXPRESSION: [Beta]
+{
+  "_type": "object",
+  "_subtype": "array",
+  "_objectId": "<filtered>",
+  "_description": "Array",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "array",
+    "_description": "Array",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "function",
+        "_subtype": "class",
+        "_value": "class B"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/class.html b/LayoutTests/inspector/model/remote-object/class.html
new file mode 100644 (file)
index 0000000..3d8adba
--- /dev/null
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `Person = class Person { constructor(name){} get fullName(){} methodName(p1, p2){} }; Person`}, // Constructor => class type
+        {expression: `Person.prototype.methodName`}, // Method => just a function type
+        {expression: `new Person`}, // Instance, not lossless, it's prototype may have interesting methods to show
+        {expression: `Alpha = class A { methodA(){} }; Beta = class B extends Alpha { methodB(){} }; Beta`},
+        {expression: `[Beta]`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/date-expected.txt b/LayoutTests/inspector/model/remote-object/date-expected.txt
new file mode 100644 (file)
index 0000000..f83db7e
--- /dev/null
@@ -0,0 +1,37 @@
+
+-----------------------------------------------------
+EXPRESSION: new Date(99)
+{
+  "_type": "object",
+  "_subtype": "date",
+  "_objectId": "<filtered>",
+  "_description": "Wed Dec 31 1969 16:00:00 GMT-0800 (PST)",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "date",
+    "_description": "Wed Dec 31 1969 16:00:00 GMT-0800 (PST)",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new Date(1421903245871)
+{
+  "_type": "object",
+  "_subtype": "date",
+  "_objectId": "<filtered>",
+  "_description": "Wed Jan 21 2015 21:07:25 GMT-0800 (PST)",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "date",
+    "_description": "Wed Jan 21 2015 21:07:25 GMT-0800 (PST)",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/date.html b/LayoutTests/inspector/model/remote-object/date.html
new file mode 100644 (file)
index 0000000..bde8505
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `new Date(99)`},
+        {expression: `new Date(1421903245871)`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
@@ -2,7 +2,7 @@
 <html>
 <head>
 <meta charset="utf-8">
-<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
 <script src="resources/remote-object-utilities.js"></script>
 <script>
 function test()
diff --git a/LayoutTests/inspector/model/remote-object/error-expected.txt b/LayoutTests/inspector/model/remote-object/error-expected.txt
new file mode 100644 (file)
index 0000000..0cff535
--- /dev/null
@@ -0,0 +1,123 @@
+
+-----------------------------------------------------
+EXPRESSION: error = null; try { [].x.x; } catch (e) { error = e; }; error
+{
+  "_type": "object",
+  "_subtype": "error",
+  "_objectId": "<filtered>",
+  "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "error",
+    "_description": "TypeError: undefined is not an object (evaluating '[].x.x')",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "message",
+        "_type": "string",
+        "_value": "undefined is not an object (evaluating '[].x.x')"
+      },
+      {
+        "_name": "line",
+        "_type": "number",
+        "_value": "3"
+      },
+      {
+        "_name": "column",
+        "_type": "number",
+        "_value": "25"
+      },
+      {
+        "_name": "stack",
+        "_type": "string",
+        "_value": "global code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: error = null; try { eval("if()"); } catch (e) { error = e; }; error
+{
+  "_type": "object",
+  "_subtype": "error",
+  "_objectId": "<filtered>",
+  "_description": "SyntaxError: Unexpected token ')'",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "error",
+    "_description": "SyntaxError: Unexpected token ')'",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "message",
+        "_type": "string",
+        "_value": "Unexpected token ')'"
+      },
+      {
+        "_name": "line",
+        "_type": "number",
+        "_value": "3"
+      },
+      {
+        "_name": "column",
+        "_type": "number",
+        "_value": "25"
+      },
+      {
+        "_name": "stack",
+        "_type": "string",
+        "_value": "eval@[native code]\nglobal code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: error = null; try { document.createTextNode("").splitText(100); } catch (e) { error = e; }; error
+{
+  "_type": "object",
+  "_subtype": "error",
+  "_objectId": "<filtered>",
+  "_description": "IndexSizeError: The index is not in the allowed range.",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "error",
+    "_description": "IndexSizeError: The index is not in the allowed range.",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "line",
+        "_type": "number",
+        "_value": "3"
+      },
+      {
+        "_name": "column",
+        "_type": "number",
+        "_value": "58"
+      },
+      {
+        "_name": "stack",
+        "_type": "string",
+        "_value": "splitText@[native code]\nglobal code\nevaluateWithScopeExtension@[native code]\n\n_wrapCall"
+      },
+      {
+        "_name": "code",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "name",
+        "_type": "string",
+        "_value": "IndexSizeError"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/error.html b/LayoutTests/inspector/model/remote-object/error.html
new file mode 100644 (file)
index 0000000..fa84050
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `error = null; try { [].x.x; } catch (e) { error = e; }; error`},
+        {expression: `error = null; try { eval("if()"); } catch (e) { error = e; }; error`},
+        {expression: `error = null; try { document.createTextNode("").splitText(100); } catch (e) { error = e; }; error`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/function-expected.txt b/LayoutTests/inspector/model/remote-object/function-expected.txt
new file mode 100644 (file)
index 0000000..400773a
--- /dev/null
@@ -0,0 +1,65 @@
+
+-----------------------------------------------------
+EXPRESSION: (function(){})
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function (){}"
+}
+
+-----------------------------------------------------
+EXPRESSION: function foo(){}; foo
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function foo(){}"
+}
+
+-----------------------------------------------------
+EXPRESSION: function myFunction(a, b) { console.log(a, b); }; myFunction
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function myFunction(a, b) { console.log(a, b); }"
+}
+
+-----------------------------------------------------
+EXPRESSION: function myTarget(a, b) { console.log(a, b); }; myTarget.bind(null)
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function myTarget() {\n    [native code]\n}"
+}
+
+-----------------------------------------------------
+EXPRESSION: Array.prototype.push
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function push() {\n    [native code]\n}"
+}
+
+-----------------------------------------------------
+EXPRESSION: window.setTimeout
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function setTimeout() {\n    [native code]\n}"
+}
+
+-----------------------------------------------------
+EXPRESSION: Object.getOwnPropertyDescriptor({ get getter() { return 1 } }, "getter").get
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function () { return 1 }"
+}
+
+-----------------------------------------------------
+EXPRESSION: Object.getOwnPropertyDescriptor({ set setter(v) { console.log(v); } }, "setter").set
+{
+  "_type": "function",
+  "_objectId": "<filtered>",
+  "_description": "function (v) { console.log(v); }"
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/function.html b/LayoutTests/inspector/model/remote-object/function.html
new file mode 100644 (file)
index 0000000..37c6206
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `(function(){})`},
+        {expression: `function foo(){}; foo`},
+        {expression: `function myFunction(a, b) { console.log(a, b); }; myFunction`},
+        {expression: `function myTarget(a, b) { console.log(a, b); }; myTarget.bind(null)`}, // bound function
+        {expression: `Array.prototype.push`}, // native (ECMAScript)
+        {expression: `window.setTimeout`}, // native (DOM)
+        {expression: `Object.getOwnPropertyDescriptor({ get getter() { return 1 } }, "getter").get`}, // getter
+        {expression: `Object.getOwnPropertyDescriptor({ set setter(v) { console.log(v); } }, "setter").set`}, // setter
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/immutable-expected.txt b/LayoutTests/inspector/model/remote-object/immutable-expected.txt
new file mode 100644 (file)
index 0000000..3aaed45
--- /dev/null
@@ -0,0 +1,33 @@
+
+-----------------------------------------------------
+EXPRESSION: Object.seal({})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Object.freeze({})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/immutable.html b/LayoutTests/inspector/model/remote-object/immutable.html
new file mode 100644 (file)
index 0000000..6119112
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `Object.seal({})`},
+        {expression: `Object.freeze({})`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/iterator-expected.txt b/LayoutTests/inspector/model/remote-object/iterator-expected.txt
new file mode 100644 (file)
index 0000000..dff4673
--- /dev/null
@@ -0,0 +1,1019 @@
+
+-----------------------------------------------------
+EXPRESSION: "a"[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "String Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "String Iterator",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "string",
+        "_type": "string",
+        "_value": "a",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "a",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: "long string"[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "String Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "String Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "string",
+        "_type": "string",
+        "_value": "long string",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "l",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "o",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "n",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "g",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": " ",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [][Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 0,
+          "_properties": [],
+          "_entries": null
+        },
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": []
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [1][Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 1,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        },
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [1, "two", 3, "four", 5, "size"][Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_value": "Array",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "two",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "four",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "5",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [1, "two", 3, "four", 5, "size"].keys()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_value": "Array",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: [1, "two", 3, "four", 5, "size"].entries()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_value": "Array",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key+value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "0"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "string",
+              "_value": "two"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "2"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "3"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "3"
+            },
+            {
+              "_name": "1",
+              "_type": "string",
+              "_value": "four"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "4"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "5"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; map.set(1, 2); map.set("key", "value"); map.values()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Map Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Map Iterator",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "map",
+        "_type": "object",
+        "_subtype": "map",
+        "_value": "Map",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "value",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map.keys()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Map Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Map Iterator",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "map",
+        "_type": "object",
+        "_subtype": "map",
+        "_value": "Map",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "key",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map.entries()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Map Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Map Iterator",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "map",
+        "_type": "object",
+        "_subtype": "map",
+        "_value": "Map",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key+value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "string",
+              "_value": "key"
+            },
+            {
+              "_name": "1",
+              "_type": "string",
+              "_value": "value"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Set Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Set Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "set",
+        "_type": "object",
+        "_subtype": "set",
+        "_value": "Set",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map.entries()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Map Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Map Iterator",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "map",
+        "_type": "object",
+        "_subtype": "map",
+        "_value": "Map",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key+value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "string",
+              "_value": "key"
+            },
+            {
+              "_name": "1",
+              "_type": "string",
+              "_value": "value"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: x = undefined; (function() { x = arguments; })(1, "two"); x[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Arguments",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "string",
+              "_value": "two"
+            }
+          ],
+          "_entries": null
+        },
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "two",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: iter = [1, 2][Symbol.iterator](); iter["return"] = function(){}; iter
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_valuePreview": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        },
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/iterator-large-expected.txt b/LayoutTests/inspector/model/remote-object/iterator-large-expected.txt
new file mode 100644 (file)
index 0000000..6dee12e
--- /dev/null
@@ -0,0 +1,340 @@
+
+-----------------------------------------------------
+EXPRESSION: "0123456789".repeat(1000000 / 10)[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "String Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "String Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "string",
+        "_type": "string",
+        "_value": "01234567890123456789012345678901234567890123456789…1234567890123456789012345678901234567890123456789",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: arr = new Int8Array(new ArrayBuffer(1000000)); arr[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Array Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Array Iterator",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "array",
+        "_type": "object",
+        "_subtype": "array",
+        "_value": "Int8Array",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; for (var i = 0; i < 1000000; i++) map.set(i, i); map[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Map Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Map Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "map",
+        "_type": "object",
+        "_subtype": "map",
+        "_value": "Map",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "key+value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "0"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "0"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "2"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "3"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "3"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "4"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "4"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; for (var i = 0; i < 1000000; i++) set.add(i); set[Symbol.iterator]()
+{
+  "_type": "object",
+  "_subtype": "iterator",
+  "_objectId": "<filtered>",
+  "_description": "Set Iterator",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "iterator",
+    "_description": "Set Iterator",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "set",
+        "_type": "object",
+        "_subtype": "set",
+        "_value": "Set",
+        "_internal": true
+      },
+      {
+        "_name": "kind",
+        "_type": "string",
+        "_value": "value",
+        "_internal": true
+      }
+    ],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/iterator-large.html b/LayoutTests/inspector/model/remote-object/iterator-large.html
new file mode 100644 (file)
index 0000000..6e79778
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `"0123456789".repeat(1000000 / 10)[Symbol.iterator]()`},
+        {expression: `arr = new Int8Array(new ArrayBuffer(1000000)); arr[Symbol.iterator]()`},
+        {expression: `map = new Map; for (var i = 0; i < 1000000; i++) map.set(i, i); map[Symbol.iterator]()`},
+        {expression: `set = new Set; for (var i = 0; i < 1000000; i++) set.add(i); set[Symbol.iterator]()`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/iterator.html b/LayoutTests/inspector/model/remote-object/iterator.html
new file mode 100644 (file)
index 0000000..b8c0af5
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `"a"[Symbol.iterator]()`},
+        {expression: `"long string"[Symbol.iterator]()`},
+        {expression: `[][Symbol.iterator]()`},
+        {expression: `[1][Symbol.iterator]()`},
+        {expression: `[1, "two", 3, "four", 5, "size"][Symbol.iterator]()`},
+        {expression: `[1, "two", 3, "four", 5, "size"].keys()`},
+        {expression: `[1, "two", 3, "four", 5, "size"].entries()`},
+        {expression: `map = new Map; map.set(1, 2); map.set("key", "value"); map.values()`},
+        {expression: `map.keys()`},
+        {expression: `map.entries()`},
+        {expression: `set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set.values()`},
+        {expression: `map.entries()`},
+        {expression: `x = undefined; (function() { x = arguments; })(1, "two"); x[Symbol.iterator]()`},
+        {expression: `iter = [1, 2][Symbol.iterator](); iter["return"] = function(){}; iter`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
@@ -2,25 +2,25 @@
 <html>
 <head>
 <meta charset="utf-8">
-<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
 <script src="resources/remote-object-utilities.js"></script>
 <script>
 function test()
 {
     let steps = [
-        // String Iterator
+        // String
         {expression: `iter = 'alpha'[Symbol.iterator]()`},
         {expression: `iter.__proto__.next = function(){}; iter`},
 
-        // Map Iterator
+        // Map
         {expression: `map = new Map; map.set(1, 2); map.set('key', 'value'); iter = map[Symbol.iterator]()`},
         {expression: `iter.__proto__.next = function(){}; iter`},
 
-        // Set Iterator
+        // Set
         {expression: `set = new Set; for (var i = 0; i <= 100; i++) set.add(i); iter = set[Symbol.iterator]()`},
         {expression: `iter.__proto__.next = function(){}; iter`},
 
-        // Array Iterator (array and arguments)
+        // Array (array and arguments)
         {expression: `arrayIter = [1,2,3][Symbol.iterator]()`},
         {expression: `x = undefined; (function() { x = arguments; })(3, 'arg'); argumentsIter = x[Symbol.iterator]()`},
         {expression: `arrayIter.__proto__.next = function(){}; arrayIter`},
diff --git a/LayoutTests/inspector/model/remote-object/map-expected.txt b/LayoutTests/inspector/model/remote-object/map-expected.txt
new file mode 100644 (file)
index 0000000..3c029e6
--- /dev/null
@@ -0,0 +1,399 @@
+
+-----------------------------------------------------
+EXPRESSION: new Map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 0,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 0,
+    "_properties": [],
+    "_entries": []
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; map.set(1, 2); map.set("key", "value"); map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 2,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 2,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "string",
+          "_description": "key",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "string",
+          "_description": "value",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]); map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 2,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 2,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "a",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        },
+        "_value": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "b",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "object",
+          "_subtype": "node",
+          "_description": "<body>",
+          "_lossless": false,
+          "_overflow": true,
+          "_properties": [
+            {
+              "_name": "aLink",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "background",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "bgColor",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "link",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "text",
+              "_type": "string",
+              "_value": ""
+            }
+          ],
+          "_entries": null
+        },
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 101,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 101,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; map.set(map, map); map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "object",
+          "_subtype": "map",
+          "_description": "Map",
+          "_lossless": false,
+          "_overflow": true,
+          "_size": 1,
+          "_properties": [],
+          "_entries": []
+        },
+        "_value": {
+          "_type": "object",
+          "_subtype": "map",
+          "_description": "Map",
+          "_lossless": false,
+          "_overflow": true,
+          "_size": 1,
+          "_properties": [],
+          "_entries": []
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); map
+{
+  "_type": "object",
+  "_subtype": "weakmap",
+  "_objectId": "<filtered>",
+  "_description": "WeakMap",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "weakmap",
+    "_description": "WeakMap",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "id",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        },
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/map-large-expected.txt b/LayoutTests/inspector/model/remote-object/map-large-expected.txt
new file mode 100644 (file)
index 0000000..576b2e1
--- /dev/null
@@ -0,0 +1,112 @@
+
+-----------------------------------------------------
+EXPRESSION: map = new Map; for (var i = 0; i < 1000000; i++) map.set(i, i); map
+{
+  "_type": "object",
+  "_subtype": "map",
+  "_objectId": "<filtered>",
+  "_description": "Map",
+  "_size": 1000000,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "map",
+    "_description": "Map",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 1000000,
+    "_properties": [],
+    "_entries": [
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_key": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        },
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/map-large.html b/LayoutTests/inspector/model/remote-object/map-large.html
new file mode 100644 (file)
index 0000000..693bc8e
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `map = new Map; for (var i = 0; i < 1000000; i++) map.set(i, i); map`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/map.html b/LayoutTests/inspector/model/remote-object/map.html
new file mode 100644 (file)
index 0000000..bc1248f
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `new Map`},
+        {expression: `map = new Map; map.set(1, 2); map.set("key", "value"); map`},
+        {expression: `map = new Map; map.set({a:1}, {b:2}); map.set(document.body, [1,2]); map`},
+        {expression: `map = new Map; for (var i = 0; i <= 100; i++) map.set(i, i); map`},
+        {expression: `map = new Map; map.set(map, map); map`},
+        {expression: `map = new WeakMap; strongKey = {id:1}; map.set(strongKey, [1,2]); map`},
+];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/null-expected.txt b/LayoutTests/inspector/model/remote-object/null-expected.txt
new file mode 100644 (file)
index 0000000..aa60cee
--- /dev/null
@@ -0,0 +1,10 @@
+
+-----------------------------------------------------
+EXPRESSION: null
+{
+  "_type": "object",
+  "_subtype": "null",
+  "_description": "null",
+  "_value": null
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/null.html b/LayoutTests/inspector/model/remote-object/null.html
new file mode 100644 (file)
index 0000000..94d541d
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `null`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/number-expected.txt b/LayoutTests/inspector/model/remote-object/number-expected.txt
new file mode 100644 (file)
index 0000000..ab6fa65
--- /dev/null
@@ -0,0 +1,105 @@
+
+-----------------------------------------------------
+EXPRESSION: 0
+{
+  "_type": "number",
+  "_description": "0",
+  "_value": 0
+}
+
+-----------------------------------------------------
+EXPRESSION: -0
+{
+  "_type": "number",
+  "_description": "-0",
+  "_value": 0
+}
+
+-----------------------------------------------------
+EXPRESSION: 1
+{
+  "_type": "number",
+  "_description": "1",
+  "_value": 1
+}
+
+-----------------------------------------------------
+EXPRESSION: -1
+{
+  "_type": "number",
+  "_description": "-1",
+  "_value": -1
+}
+
+-----------------------------------------------------
+EXPRESSION: 1.234
+{
+  "_type": "number",
+  "_description": "1.234",
+  "_value": 1.234
+}
+
+-----------------------------------------------------
+EXPRESSION: -1.234
+{
+  "_type": "number",
+  "_description": "-1.234",
+  "_value": -1.234
+}
+
+-----------------------------------------------------
+EXPRESSION: 1e3
+{
+  "_type": "number",
+  "_description": "1000",
+  "_value": 1000
+}
+
+-----------------------------------------------------
+EXPRESSION: Number.MAX_VALUE
+{
+  "_type": "number",
+  "_description": "1.7976931348623157e+308",
+  "_value": 1.7976931348623157e+308
+}
+
+-----------------------------------------------------
+EXPRESSION: Number.MIN_VALUE
+{
+  "_type": "number",
+  "_description": "5e-324",
+  "_value": 5e-324
+}
+
+-----------------------------------------------------
+EXPRESSION: NaN
+{
+  "_type": "number",
+  "_description": "NaN",
+  "_value": null
+}
+
+-----------------------------------------------------
+EXPRESSION: Infinity
+{
+  "_type": "number",
+  "_description": "Infinity",
+  "_value": null
+}
+
+-----------------------------------------------------
+EXPRESSION: -Infinity
+{
+  "_type": "number",
+  "_description": "-Infinity",
+  "_value": null
+}
+
+-----------------------------------------------------
+EXPRESSION: 123n
+{
+  "_type": "bigint",
+  "_description": "123n",
+  "_value": "123n [BigInt Not Enabled in Web Inspector]"
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/number.html b/LayoutTests/inspector/model/remote-object/number.html
new file mode 100644 (file)
index 0000000..4902345
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE html><!-- webkit-test-runner [ jscOptions=--useBigInt=true ] -->
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `0`},
+        {expression: `-0`},
+        {expression: `1`},
+        {expression: `-1`},
+        {expression: `1.234`},
+        {expression: `-1.234`},
+        {expression: `1e3`},
+        {expression: `Number.MAX_VALUE`},
+        {expression: `Number.MIN_VALUE`},
+        {expression: `NaN`},
+        {expression: `Infinity`},
+        {expression: `-Infinity`},
+        {expression: `123n`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/object-expected.txt b/LayoutTests/inspector/model/remote-object/object-expected.txt
new file mode 100644 (file)
index 0000000..80770c0
--- /dev/null
@@ -0,0 +1,345 @@
+
+-----------------------------------------------------
+EXPRESSION: ({})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: ({a: 1})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "a",
+        "_type": "number",
+        "_value": "1"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: ({a: 1, b: 0, c: -0, d: 456n})
+{
+  "_type": "object",
+  "_subtype": "error",
+  "_objectId": "<filtered>",
+  "_description": "SyntaxError: No identifiers allowed directly after numeric literal"
+}
+
+-----------------------------------------------------
+EXPRESSION: ({a: 1, b: "string", c: /regex/, d: Symbol("sym")})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "a",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "b",
+        "_type": "string",
+        "_value": "string"
+      },
+      {
+        "_name": "c",
+        "_type": "object",
+        "_subtype": "regexp",
+        "_value": "/regex/"
+      },
+      {
+        "_name": "d",
+        "_type": "symbol",
+        "_value": "Symbol(sym)"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: o = {a:1}; o.b = o; o
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "a",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "b",
+        "_type": "object",
+        "_value": "Object"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: ({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){}})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "a",
+        "_type": "function",
+        "_value": ""
+      },
+      {
+        "_name": "b",
+        "_type": "function",
+        "_value": ""
+      },
+      {
+        "_name": "getter",
+        "_type": "accessor"
+      },
+      {
+        "_name": "setter",
+        "_type": "accessor"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: function Foo() {}; new Foo
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Foo",
+  "_preview": {
+    "_type": "object",
+    "_description": "Foo",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: var Foo2 = function() {}; new Foo2
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Foo2",
+  "_preview": {
+    "_type": "object",
+    "_description": "Foo2",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: var namespace = {}; namespace.Foo3 = function() {}; new namespace.Foo3
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, get x() {return this._x;}}; new Bar
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Bar",
+  "_preview": {
+    "_type": "object",
+    "_description": "Bar",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "_x",
+        "_type": "number",
+        "_value": "5"
+      },
+      {
+        "_name": "constructor",
+        "_type": "function",
+        "_value": ""
+      },
+      {
+        "_name": "x",
+        "_type": "accessor"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return this._x;}}; new Bar2
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Bar2",
+  "_preview": {
+    "_type": "object",
+    "_description": "Bar2",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "_x",
+        "_type": "number",
+        "_value": "5"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new ArrayBuffer(16)
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "ArrayBuffer",
+  "_preview": {
+    "_type": "object",
+    "_description": "ArrayBuffer",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "byteLength",
+        "_type": "number",
+        "_value": "16"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new DataView(new ArrayBuffer(16))
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "DataView",
+  "_preview": {
+    "_type": "object",
+    "_description": "DataView",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "byteOffset",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "byteLength",
+        "_type": "number",
+        "_value": "16"
+      },
+      {
+        "_name": "buffer",
+        "_type": "object",
+        "_value": "ArrayBuffer"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: obj = {}; obj["prop"] = 1; obj[Symbol()] = 2; obj[Symbol("sym")] = 3; obj[Symbol("sym")] = 4; obj[Symbol.iterator] = Symbol(); obj
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "prop",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "Symbol()",
+        "_type": "number",
+        "_value": "2"
+      },
+      {
+        "_name": "Symbol(sym)",
+        "_type": "number",
+        "_value": "3"
+      },
+      {
+        "_name": "Symbol(sym)",
+        "_type": "number",
+        "_value": "4"
+      },
+      {
+        "_name": "Symbol(Symbol.iterator)",
+        "_type": "symbol",
+        "_value": "Symbol()"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/object-large-expected.txt b/LayoutTests/inspector/model/remote-object/object-large-expected.txt
new file mode 100644 (file)
index 0000000..049f9eb
--- /dev/null
@@ -0,0 +1,68 @@
+
+-----------------------------------------------------
+EXPRESSION: obj = {}; for (var i = 0; i < 1000; i++) obj[i] = i; obj
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Object",
+  "_preview": {
+    "_type": "object",
+    "_description": "Object",
+    "_lossless": false,
+    "_overflow": true,
+    "_properties": [
+      {
+        "_name": "0",
+        "_type": "number",
+        "_value": "0"
+      },
+      {
+        "_name": "1",
+        "_type": "number",
+        "_value": "1"
+      },
+      {
+        "_name": "2",
+        "_type": "number",
+        "_value": "2"
+      },
+      {
+        "_name": "3",
+        "_type": "number",
+        "_value": "3"
+      },
+      {
+        "_name": "4",
+        "_type": "number",
+        "_value": "4"
+      },
+      {
+        "_name": "5",
+        "_type": "number",
+        "_value": "5"
+      },
+      {
+        "_name": "6",
+        "_type": "number",
+        "_value": "6"
+      },
+      {
+        "_name": "7",
+        "_type": "number",
+        "_value": "7"
+      },
+      {
+        "_name": "8",
+        "_type": "number",
+        "_value": "8"
+      },
+      {
+        "_name": "9",
+        "_type": "number",
+        "_value": "9"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/object-large.html b/LayoutTests/inspector/model/remote-object/object-large.html
new file mode 100644 (file)
index 0000000..c4accda
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `obj = {}; for (var i = 0; i < 1000; i++) obj[i] = i; obj`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/object.html b/LayoutTests/inspector/model/remote-object/object.html
new file mode 100644 (file)
index 0000000..664be40
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `({})`},
+        {expression: `({a: 1})`},
+        {expression: `({a: 1, b: 0, c: -0, d: 456n})`},
+        {expression: `({a: 1, b: \"string\", c: /regex/, d: Symbol("sym")})`},
+        {expression: `o = {a:1}; o.b = o; o`}, // cyclic
+        {expression: `({a:function a(){}, b:function b(){}, get getter(){}, set setter(v){}})`},
+        {expression: `function Foo() {}; new Foo`},
+        {expression: `var Foo2 = function() {}; new Foo2`},
+        {expression: `var namespace = {}; namespace.Foo3 = function() {}; new namespace.Foo3`},
+        {expression: `function Bar() { this._x = 5 }; Bar.prototype = {constructor: Bar, get x() {return this._x;}}; new Bar`},
+        {expression: `function Bar2() { this._x = 5 }; Bar.prototype = {get x() {return this._x;}}; new Bar2`},
+        {expression: `new ArrayBuffer(16)`},
+        {expression: `new DataView(new ArrayBuffer(16))`},
+        {expression: `obj = {}; obj["prop"] = 1; obj[Symbol()] = 2; obj[Symbol("sym")] = 3; obj[Symbol("sym")] = 4; obj[Symbol.iterator] = Symbol(); obj`}, // Symbol properties
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/promise-expected.txt b/LayoutTests/inspector/model/remote-object/promise-expected.txt
new file mode 100644 (file)
index 0000000..c0ac38a
--- /dev/null
@@ -0,0 +1,153 @@
+
+-----------------------------------------------------
+EXPRESSION: new Promise(function(){})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Promise",
+  "_preview": {
+    "_type": "object",
+    "_description": "Promise",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "status",
+        "_type": "string",
+        "_value": "pending",
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Promise.reject()
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Promise",
+  "_preview": {
+    "_type": "object",
+    "_description": "Promise",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "status",
+        "_type": "string",
+        "_value": "rejected",
+        "_internal": true
+      },
+      {
+        "_name": "result",
+        "_type": "undefined",
+        "_value": "undefined",
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Promise.reject("result")
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Promise",
+  "_preview": {
+    "_type": "object",
+    "_description": "Promise",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "status",
+        "_type": "string",
+        "_value": "rejected",
+        "_internal": true
+      },
+      {
+        "_name": "result",
+        "_type": "string",
+        "_value": "result",
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Promise.resolve()
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Promise",
+  "_preview": {
+    "_type": "object",
+    "_description": "Promise",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "status",
+        "_type": "string",
+        "_value": "resolved",
+        "_internal": true
+      },
+      {
+        "_name": "result",
+        "_type": "undefined",
+        "_value": "undefined",
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: Promise.resolve({result:1})
+{
+  "_type": "object",
+  "_objectId": "<filtered>",
+  "_description": "Promise",
+  "_preview": {
+    "_type": "object",
+    "_description": "Promise",
+    "_lossless": false,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "status",
+        "_type": "string",
+        "_value": "resolved",
+        "_internal": true
+      },
+      {
+        "_name": "result",
+        "_type": "object",
+        "_valuePreview": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "result",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        },
+        "_internal": true
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/promise.html b/LayoutTests/inspector/model/remote-object/promise.html
new file mode 100644 (file)
index 0000000..3dca99d
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+if (window.internals)
+    window.internals.settings.setUnhandledPromiseRejectionToConsoleEnabled(false);
+
+function test()
+{
+    let steps = [
+        // Promise
+        {expression: `new Promise(function(){})`},
+        {expression: `Promise.reject()`},
+        {expression: `Promise.reject("result")`},
+        {expression: `Promise.resolve()`},
+        {expression: `Promise.resolve({result:1})`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/regexp-expected.txt b/LayoutTests/inspector/model/remote-object/regexp-expected.txt
new file mode 100644 (file)
index 0000000..ef23e1f
--- /dev/null
@@ -0,0 +1,145 @@
+
+-----------------------------------------------------
+EXPRESSION: / /
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/ /",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/ /",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: /(?:)/
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/(?:)/",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/(?:)/",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: /^r(e)g[e]{1,}x+/
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/^r(e)g[e]{1,}x+/",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/^r(e)g[e]{1,}x+/",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: /^r(e)g[e]{1,}x+/ig
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/^r(e)g[e]{1,}x+/gi",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/^r(e)g[e]{1,}x+/gi",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new RegExp("")
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/(?:)/",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/(?:)/",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: new RegExp("test", "i")
+{
+  "_type": "object",
+  "_subtype": "regexp",
+  "_objectId": "<filtered>",
+  "_description": "/test/i",
+  "_preview": {
+    "_type": "object",
+    "_subtype": "regexp",
+    "_description": "/test/i",
+    "_lossless": true,
+    "_overflow": false,
+    "_properties": [
+      {
+        "_name": "lastIndex",
+        "_type": "number",
+        "_value": "0"
+      }
+    ],
+    "_entries": null
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/regexp.html b/LayoutTests/inspector/model/remote-object/regexp.html
new file mode 100644 (file)
index 0000000..d38d547
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        // Regexp
+        {expression: `/ /`},
+        {expression: `/(?:)/`},
+        {expression: `/^r(e)g[e]{1,}x+/`},
+        {expression: `/^r(e)g[e]{1,}x+/ig`},
+        {expression: `new RegExp("")`},
+        {expression: `new RegExp("test", "i")`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
@@ -15,13 +15,15 @@ function runInBrowserTest() {
 }
 
 TestPage.registerInitializer(() => {
-    function remoteObjectJSONFilter(key, value) {
+    function remoteObjectJSONFilter(filter, key, value) {
         if (key === "_target" || key === "_hasChildren" || key === "_listeners")
             return undefined;
         if (key === "_objectId" || key === "_stackTrace")
             return "<filtered>";
         if (typeof value === "bigint")
             return "<filtered " + String(value) + "n>";
+        if (filter && filter(key, value))
+            return "<filtered>";
         return value;
     }
 
@@ -33,18 +35,20 @@ TestPage.registerInitializer(() => {
                 InspectorTest.completeTest();
         }
 
-        for (let {expression, browserOnly} of steps) {
+        for (let {expression, browserOnly, filter} of steps) {
             if (browserOnly) {
                 checkComplete();
                 continue;
             }
 
+            filter = remoteObjectJSONFilter.bind(null, filter);
+
             WI.runtimeManager.evaluateInInspectedWindow(expression, {objectGroup: "test", doNotPauseOnExceptionsAndMuteConsole: true, generatePreview: true}, (remoteObject, wasThrown) => {
                 InspectorTest.log("");
                 InspectorTest.log("-----------------------------------------------------");
                 InspectorTest.log("EXPRESSION: " + expression);
                 InspectorTest.assert(remoteObject instanceof WI.RemoteObject);
-                InspectorTest.log(JSON.stringify(remoteObject, remoteObjectJSONFilter, 2));
+                InspectorTest.log(JSON.stringify(remoteObject, filter, 2));
                 checkComplete();
             });
         }
diff --git a/LayoutTests/inspector/model/remote-object/set-expected.txt b/LayoutTests/inspector/model/remote-object/set-expected.txt
new file mode 100644 (file)
index 0000000..05b9af6
--- /dev/null
@@ -0,0 +1,310 @@
+
+-----------------------------------------------------
+EXPRESSION: new Set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 0,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 0,
+    "_properties": [],
+    "_entries": []
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; set.add(1); set.add(2); set.add("key"); set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 3,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 3,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "string",
+          "_description": "key",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]); set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 3,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 3,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "a",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "node",
+          "_description": "<body>",
+          "_lossless": false,
+          "_overflow": true,
+          "_properties": [
+            {
+              "_name": "aLink",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "background",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "bgColor",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "link",
+              "_type": "string",
+              "_value": ""
+            },
+            {
+              "_name": "text",
+              "_type": "string",
+              "_value": ""
+            }
+          ],
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "array",
+          "_description": "Array",
+          "_lossless": true,
+          "_overflow": false,
+          "_size": 2,
+          "_properties": [
+            {
+              "_name": "0",
+              "_type": "number",
+              "_value": "1"
+            },
+            {
+              "_name": "1",
+              "_type": "number",
+              "_value": "2"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 101,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 101,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; set.add(set); set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": false,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_subtype": "set",
+          "_description": "Set",
+          "_lossless": false,
+          "_overflow": true,
+          "_size": 1,
+          "_properties": [],
+          "_entries": []
+        }
+      }
+    ]
+  }
+}
+
+-----------------------------------------------------
+EXPRESSION: set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set
+{
+  "_type": "object",
+  "_subtype": "weakset",
+  "_objectId": "<filtered>",
+  "_description": "WeakSet",
+  "_size": 1,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "weakset",
+    "_description": "WeakSet",
+    "_lossless": true,
+    "_overflow": false,
+    "_size": 1,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "object",
+          "_description": "Object",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": [
+            {
+              "_name": "id",
+              "_type": "number",
+              "_value": "1"
+            }
+          ],
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/set-large-expected.txt b/LayoutTests/inspector/model/remote-object/set-large-expected.txt
new file mode 100644 (file)
index 0000000..61404ce
--- /dev/null
@@ -0,0 +1,72 @@
+
+-----------------------------------------------------
+EXPRESSION: set = new Set; for (var i = 0; i < 1000000; i++) set.add(i); set
+{
+  "_type": "object",
+  "_subtype": "set",
+  "_objectId": "<filtered>",
+  "_description": "Set",
+  "_size": 1000000,
+  "_preview": {
+    "_type": "object",
+    "_subtype": "set",
+    "_description": "Set",
+    "_lossless": false,
+    "_overflow": true,
+    "_size": 1000000,
+    "_properties": [],
+    "_entries": [
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "0",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "1",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "2",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "3",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      },
+      {
+        "_value": {
+          "_type": "number",
+          "_description": "4",
+          "_lossless": true,
+          "_overflow": false,
+          "_properties": null,
+          "_entries": null
+        }
+      }
+    ]
+  }
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/set-large.html b/LayoutTests/inspector/model/remote-object/set-large.html
new file mode 100644 (file)
index 0000000..c374911
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `set = new Set; for (var i = 0; i < 1000000; i++) set.add(i); set`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/set.html b/LayoutTests/inspector/model/remote-object/set.html
new file mode 100644 (file)
index 0000000..c91f3dd
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `new Set`},
+        {expression: `set = new Set; set.add(1); set.add(2); set.add("key"); set`},
+        {expression: `set = new Set; set.add({a:1}); set.add(document.body); set.add([1,2]); set`},
+        {expression: `set = new Set; for (var i = 0; i <= 100; i++) set.add(i); set`},
+        {expression: `set = new Set; set.add(set); set`},
+        {expression: `set = new WeakSet; strongKey = {id:1}; set.add(strongKey); set`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/string-expected.txt b/LayoutTests/inspector/model/remote-object/string-expected.txt
new file mode 100644 (file)
index 0000000..2394896
--- /dev/null
@@ -0,0 +1,57 @@
+
+-----------------------------------------------------
+EXPRESSION: ''
+{
+  "_type": "string",
+  "_description": "",
+  "_value": ""
+}
+
+-----------------------------------------------------
+EXPRESSION: '"'
+{
+  "_type": "string",
+  "_description": "\"",
+  "_value": "\""
+}
+
+-----------------------------------------------------
+EXPRESSION: "'"
+{
+  "_type": "string",
+  "_description": "'",
+  "_value": "'"
+}
+
+-----------------------------------------------------
+EXPRESSION: `template`
+{
+  "_type": "string",
+  "_description": "template",
+  "_value": "template"
+}
+
+-----------------------------------------------------
+EXPRESSION: "string"
+{
+  "_type": "string",
+  "_description": "string",
+  "_value": "string"
+}
+
+-----------------------------------------------------
+EXPRESSION: "Unicode…"
+{
+  "_type": "string",
+  "_description": "Unicode…",
+  "_value": "Unicode…"
+}
+
+-----------------------------------------------------
+EXPRESSION: "I wish I had something to put here."
+{
+  "_type": "string",
+  "_description": "I wish I had something to put here.",
+  "_value": "I wish I had something to put here."
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/string-large-expected.txt b/LayoutTests/inspector/model/remote-object/string-large-expected.txt
new file mode 100644 (file)
index 0000000..c97519e
--- /dev/null
@@ -0,0 +1,9 @@
+
+-----------------------------------------------------
+EXPRESSION: "0123456789".repeat(1000000 / 10)
+{
+  "_type": "string",
+  "_description": "<filtered>",
+  "_value": "<filtered>"
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/string-large.html b/LayoutTests/inspector/model/remote-object/string-large.html
new file mode 100644 (file)
index 0000000..0f713d4
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {
+            expression: `"0123456789".repeat(1000000 / 10)`,
+            filter(key, value) {
+                if (key === "_description" || key === "_value") {
+                    InspectorTest.assert(value === "0123456789".repeat(1000000 / 10));
+                    return true;
+                }
+                return false;
+            },
+        },
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/string.html b/LayoutTests/inspector/model/remote-object/string.html
new file mode 100644 (file)
index 0000000..e102fed
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `''`},
+        {expression: `'"'`}, // a single quoted string
+        {expression: `"'"`}, // a double quoted string
+        {expression: "`template`"}, // a template string
+        {expression: `"string"`},
+        {expression: `"Unicode…"`},
+        {expression: `"I wish I had something to put here."`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
diff --git a/LayoutTests/inspector/model/remote-object/undefined-expected.txt b/LayoutTests/inspector/model/remote-object/undefined-expected.txt
new file mode 100644 (file)
index 0000000..517d018
--- /dev/null
@@ -0,0 +1,8 @@
+
+-----------------------------------------------------
+EXPRESSION: undefined
+{
+  "_type": "undefined",
+  "_description": "undefined"
+}
+
diff --git a/LayoutTests/inspector/model/remote-object/undefined.html b/LayoutTests/inspector/model/remote-object/undefined.html
new file mode 100644 (file)
index 0000000..b9533e2
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/remote-object-utilities.js"></script>
+<script>
+function test()
+{
+    let steps = [
+        {expression: `undefined`},
+    ];
+
+    if (!window.WI) {
+        window.steps = steps;
+        return;
+    }
+
+    runSteps(steps);
+}
+</script>
+</head>
+<body onload="runTest(); runInBrowserTest();"></body>
+</html>
index c50fad6..d93a5c4 100644 (file)
@@ -163,7 +163,6 @@ Properties:
 -- Running test case: Runtime.getDisplayableProperties.fetchCount.Object
 Evaluating expression...
 Getting displayable properties with fetchCount 5...
-ASSERT: Should only get 5 properties.
 Properties:
     "A"          =>  0 (number)  [writable | enumerable | configurable | isOwn]
     "Y"          =>  1 (number)  [writable | enumerable | configurable | isOwn]
@@ -194,7 +193,6 @@ Properties:
 -- Running test case: Runtime.getDisplayableProperties.fetchCount.Array
 Evaluating expression...
 Getting displayable properties with fetchCount 5...
-ASSERT: Should only get 5 properties.
 Properties:
     "0"          =>  "A" (string)  [writable | enumerable | configurable | isOwn]
     "1"          =>  "Y" (string)  [writable | enumerable | configurable | isOwn]
index d933dda..8dc19d7 100644 (file)
@@ -39,7 +39,7 @@ function test()
 
                 let properties = getDisplayablePropertiesResponse.properties;
                 if (properties) {
-                    ProtocolTest.assert(!fetchCount || properties.length <= fetchCount, `Should only get ${fetchCount} properties.`);
+                    ProtocolTest.assert(!fetchCount || properties.length <= fetchCount + (fetchStart ? 0 : 1), `Should only get ${fetchCount} properties.`);
 
                     ProtocolTest.log("Properties:");
                     properties.forEach(ProtocolTest.PropertyDescriptorUtilities.logForEach);
index 0ab61b1..2180bd3 100644 (file)
@@ -149,7 +149,6 @@ Properties:
 -- Running test case: Runtime.getProperties.fetchCount.Object
 Evaluating expression...
 Getting own properties with fetchCount 5...
-ASSERT: Should only get 5 properties.
 Properties:
     "A"          =>  0 (number)  [writable | enumerable | configurable | isOwn]
     "Y"          =>  1 (number)  [writable | enumerable | configurable | isOwn]
@@ -180,7 +179,6 @@ Properties:
 -- Running test case: Runtime.getProperties.fetchCount.Array
 Evaluating expression...
 Getting own properties with fetchCount 5...
-ASSERT: Should only get 5 properties.
 Properties:
     "0"          =>  "A" (string)  [writable | enumerable | configurable | isOwn]
     "1"          =>  "Y" (string)  [writable | enumerable | configurable | isOwn]
index ac4baf1..9c551d9 100644 (file)
@@ -43,7 +43,7 @@ function test()
 
                 let properties = getPropertiesResponse.properties;
                 if (properties) {
-                    ProtocolTest.assert(!fetchCount || properties.length <= fetchCount, `Should only get ${fetchCount} properties.`);
+                    ProtocolTest.assert(!fetchCount || properties.length <= fetchCount + (fetchStart ? 0 : 1), `Should only get ${fetchCount} properties.`);
 
                     ProtocolTest.log("Properties:");
                     properties.forEach(ProtocolTest.PropertyDescriptorUtilities.logForEach);
diff --git a/LayoutTests/platform/mac-wk1/inspector/model/remote-object-expected.txt b/LayoutTests/platform/mac-wk1/inspector/model/remote-object-expected.txt
deleted file mode 100644 (file)
index 82c1918..0000000
+++ /dev/null
@@ -1,3809 +0,0 @@
-CONSOLE MESSAGE: line 1: Unhandled Promise Rejection: undefined
-CONSOLE MESSAGE: line 1: Unhandled Promise Rejection: result
-
------------------------------------------------------
-EXPRESSION: null
-{
-  "_type": "object",
-  "_subtype": "null",
-  "_description": "null",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: undefined
-{
-  "_type": "undefined",
-  "_description": "undefined"
-}
-
------------------------------------------------------
-EXPRESSION: Symbol()
-{
-  "_type": "symbol",
-  "_objectId": "<filtered>",
-  "_description": "Symbol()"
-}
-
------------------------------------------------------
-EXPRESSION: Symbol("test")
-{
-  "_type": "symbol",
-  "_objectId": "<filtered>",
-  "_description": "Symbol(test)"
-}
-
------------------------------------------------------
-EXPRESSION: true
-{
-  "_type": "boolean",
-  "_description": "true",
-  "_value": true
-}
-
------------------------------------------------------
-EXPRESSION: false
-{
-  "_type": "boolean",
-  "_description": "false",
-  "_value": false
-}
-
------------------------------------------------------
-EXPRESSION: 0
-{
-  "_type": "number",
-  "_description": "0",
-  "_value": 0
-}
-
------------------------------------------------------
-EXPRESSION: -0
-{
-  "_type": "number",
-  "_description": "-0",
-  "_value": 0
-}
-
------------------------------------------------------
-EXPRESSION: 1
-{
-  "_type": "number",
-  "_description": "1",
-  "_value": 1
-}
-
------------------------------------------------------
-EXPRESSION: -1
-{
-  "_type": "number",
-  "_description": "-1",
-  "_value": -1
-}
-
------------------------------------------------------
-EXPRESSION: 1.234
-{
-  "_type": "number",
-  "_description": "1.234",
-  "_value": 1.234
-}
-
------------------------------------------------------
-EXPRESSION: -1.234
-{
-  "_type": "number",
-  "_description": "-1.234",
-  "_value": -1.234
-}
-
------------------------------------------------------
-EXPRESSION: 1e3
-{
-  "_type": "number",
-  "_description": "1000",
-  "_value": 1000
-}
-
------------------------------------------------------
-EXPRESSION: Number.MAX_VALUE
-{
-  "_type": "number",
-  "_description": "1.7976931348623157e+308",
-  "_value": 1.7976931348623157e+308
-}
-
------------------------------------------------------
-EXPRESSION: Number.MIN_VALUE
-{
-  "_type": "number",
-  "_description": "5e-324",
-  "_value": 5e-324
-}
-
------------------------------------------------------
-EXPRESSION: NaN
-{
-  "_type": "number",
-  "_description": "NaN",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: Infinity
-{
-  "_type": "number",
-  "_description": "Infinity",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: -Infinity
-{
-  "_type": "number",
-  "_description": "-Infinity",
-  "_value": null
-}
-
------------------------------------------------------
-EXPRESSION: 123n
-{
-  "_type": "bigint",
-  "_description": "123n",
-  "_value": "<filtered 123n>"
-}
-
------------------------------------------------------
-EXPRESSION: ''
-{
-  "_type": "string",
-  "_description": "",
-  "_value": ""
-}
-
------------------------------------------------------
-EXPRESSION: '"'
-{
-  "_type": "string",
-  "_description": "\"",
-  "_value": "\""
-}
-
------------------------------------------------------
-EXPRESSION: "'"
-{
-  "_type": "string",
-  "_description": "'",
-  "_value": "'"
-}
-
------------------------------------------------------
-EXPRESSION: `template`
-{
-  "_type": "string",
-  "_description": "template",
-  "_value": "template"
-}
-
------------------------------------------------------
-EXPRESSION: "string"
-{
-  "_type": "string",
-  "_description": "string",
-  "_value": "string"
-}
-
------------------------------------------------------
-EXPRESSION: "Unicode…"
-{
-  "_type": "string",
-  "_description": "Unicode…",
-  "_value": "Unicode…"
-}
-
------------------------------------------------------
-EXPRESSION: "I wish I had something to put here."
-{
-  "_type": "string",
-  "_description": "I wish I had something to put here.",
-  "_value": "I wish I had something to put here."
-}
-
------------------------------------------------------
-EXPRESSION: (function(){})
-{
-  "_type": "function",
-  "_objectId": "<filtered>",
-  "_description": "function (){}"
-}
-
------------------------------------------------------
-EXPRESSION: