diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2019-06-08 15:15:05 -0400 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2019-07-18 22:38:15 -0400 |
commit | 7535217e1b164417d9aa05c38e5c23048c8d47ce (patch) | |
tree | 6e6712cafd514c11770c1a1d0c4496c4e0bc6480 /js/src/tests | |
parent | 90d999c59a08bfc3145317aa4f0a92db0597632e (diff) | |
download | UXP-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')
-rw-r--r-- | js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js | 43 |
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"); |