summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_6/extensions
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-06-08 15:15:05 -0400
committerGaming4JC <g4jc@hyperbola.info>2019-07-18 22:38:15 -0400
commit7535217e1b164417d9aa05c38e5c23048c8d47ce (patch)
tree6e6712cafd514c11770c1a1d0c4496c4e0bc6480 /js/src/tests/ecma_6/extensions
parent90d999c59a08bfc3145317aa4f0a92db0597632e (diff)
downloadUXP-7535217e1b164417d9aa05c38e5c23048c8d47ce.tar
UXP-7535217e1b164417d9aa05c38e5c23048c8d47ce.tar.gz
UXP-7535217e1b164417d9aa05c38e5c23048c8d47ce.tar.lz
UXP-7535217e1b164417d9aa05c38e5c23048c8d47ce.tar.xz
UXP-7535217e1b164417d9aa05c38e5c23048c8d47ce.zip
1325473 - A TypeError should be thrown when accessing 'arguments' or 'caller' on any of the new function types.
Diffstat (limited to 'js/src/tests/ecma_6/extensions')
-rw-r--r--js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js b/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js
new file mode 100644
index 000000000..7fed18037
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js
@@ -0,0 +1,43 @@
+// Tests that newer-type functions (i.e. anything not defined by regular function declarations and
+// expressions) throw when accessing their 'arguments' and 'caller' properties.
+
+// 9.2.7 (AddRestrictedFunctionProperties) defines accessors on Function.prototype which throw on
+// every 'get' and 'set' of 'caller' and 'arguments'.
+// Additionally, 16.2 (Forbidden Extensions) forbids adding properties to all non-"legacy" function
+// declarations and expressions. This creates the effect that all newer-style functions act like
+// strict-mode functions when accessing their 'caller' and 'arguments' properties.
+
+const container = {
+ async asyncMethod() {},
+ *genMethod() {},
+ method() {}
+};
+
+[
+ async function(){},
+ function*(){},
+ () => {},
+ async () => {},
+
+ container.asyncMethod,
+ container.genMethod,
+ container.method
+].forEach(f => {
+ checkArgumentsAccess(f);
+ checkCallerAccess(f);
+});
+
+function checkArgumentsAccess(f) {
+ assertThrowsInstanceOf(() => f.arguments, TypeError,
+ `Expected 'arguments' property access to throw on ${f}`);
+}
+
+function checkCallerAccess(f) {
+ assertThrowsInstanceOf(() => f.caller, TypeError,
+ `Expected 'caller' property access to throw on ${f}`);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");