summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Proxy/proxy-proto-lazy-props.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /js/src/tests/non262/Proxy/proxy-proto-lazy-props.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/Proxy/proxy-proto-lazy-props.js')
-rw-r--r--js/src/tests/non262/Proxy/proxy-proto-lazy-props.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/js/src/tests/non262/Proxy/proxy-proto-lazy-props.js b/js/src/tests/non262/Proxy/proxy-proto-lazy-props.js
new file mode 100644
index 0000000000..c82c0f935b
--- /dev/null
+++ b/js/src/tests/non262/Proxy/proxy-proto-lazy-props.js
@@ -0,0 +1,61 @@
+function makeProxyPrototype(target) {
+ return Object.setPrototypeOf(target, new Proxy({}, new Proxy({
+ getPrototypeOf() {
+ return null;
+ },
+ ownKeys() {
+ return [];
+ },
+ get(t, pk, r) {
+ throw new Error("Unexpected [[Get]]: " + String(pk));
+ }
+ }, {
+ get(t, pk, r) {
+ if (pk in t)
+ return Reflect.get(t, pk, r);
+ throw new Error("Unexpected trap called: " + pk);
+ }
+ })));
+}
+
+function enumerateMappedArgs(x) {
+ var a = makeProxyPrototype(arguments);
+
+ // Delete all lazy properties and ensure no [[Has]] trap is called for them
+ // on the prototype chain.
+ delete a.length;
+ delete a.callee;
+ delete a[Symbol.iterator];
+ delete a[0];
+
+ for (var k in a);
+}
+enumerateMappedArgs(0);
+
+function enumerateUnmappedArgs(x) {
+ "use strict";
+ var a = makeProxyPrototype(arguments);
+
+ delete a.length;
+ // delete a.callee; // .callee is non-configurable
+ delete a[Symbol.iterator];
+ delete a[0];
+
+ for (var k in a);
+}
+enumerateUnmappedArgs(0);
+
+function enumerateFunction() {
+ var f = makeProxyPrototype(function named() {});
+
+ // delete f.prototype; // .prototype is non-configurable
+ delete f.length;
+ delete f.name;
+
+ for (var k in f);
+}
+enumerateFunction();
+
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0);