summaryrefslogtreecommitdiff
path: root/js/src/tests/js1_8_1/regress/regress-509354.js
blob: cbf4cfc59537763e297da0c8015e6a40839c51da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 * Contributor: Jason Orendorff <jorendorff@mozilla.com>
 */

// Decompile destructuring argument named `arguments` correctly.
var actual = "" + function ([arguments]) {return arguments;};
compareSource('function ([arguments]) {return arguments;}', actual, "part 1");

// Make sure the 'arguments' argument actually works.
var f = function ([arguments]) {return arguments + 1;};
reportCompare(3.25, f([2.25]), "part 2");

// Throw SyntaxError when `arguments` appears twice in a destructuring parameter.
actual = "no exception";
try {
    eval('(function ([arguments, arguments]) {return arguments();})');
} catch (exc) {
    actual = exc.name;
}
reportCompare("SyntaxError", actual, "part 3");

// And again...
actual = "no exception";
try {
    eval('(function ([a, b, arguments, d], [e, f, arguments]) {return arguments();})');
} catch (exc) {
    actual = exc.name;
}
reportCompare("SyntaxError", actual, "part 4");

// The original test case from bug 509354. Don't crash.
try {
    eval('print(function([arguments,arguments,arguments,arguments,arguments,' +
         'arguments,arguments,arguments,arguments,arguments,arguments,' +
         'arguments,arguments,arguments,arguments,arguments]){})');
} catch (exc) {
}
reportCompare("no crash", "no crash", "part 5");