michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: * Contributor: Jason Orendorff michael@0: */ michael@0: michael@0: // Decompile destructuring argument named `arguments` correctly. michael@0: var actual = "" + function ([arguments]) {return arguments;}; michael@0: compareSource('function ([arguments]) {return arguments;}', actual, "part 1"); michael@0: michael@0: // Make sure the 'arguments' argument actually works. michael@0: var f = function ([arguments]) {return arguments + 1;}; michael@0: reportCompare(3.25, f([2.25]), "part 2"); michael@0: michael@0: // Throw SyntaxError when `arguments` appears twice in a destructuring parameter. michael@0: actual = "no exception"; michael@0: try { michael@0: eval('(function ([arguments, arguments]) {return arguments();})'); michael@0: } catch (exc) { michael@0: actual = exc.name; michael@0: } michael@0: reportCompare("SyntaxError", actual, "part 3"); michael@0: michael@0: // And again... michael@0: actual = "no exception"; michael@0: try { michael@0: eval('(function ([a, b, arguments, d], [e, f, arguments]) {return arguments();})'); michael@0: } catch (exc) { michael@0: actual = exc.name; michael@0: } michael@0: reportCompare("SyntaxError", actual, "part 4"); michael@0: michael@0: // The original test case from bug 509354. Don't crash. michael@0: try { michael@0: eval('print(function([arguments,arguments,arguments,arguments,arguments,' + michael@0: 'arguments,arguments,arguments,arguments,arguments,arguments,' + michael@0: 'arguments,arguments,arguments,arguments,arguments]){})'); michael@0: } catch (exc) { michael@0: } michael@0: reportCompare("no crash", "no crash", "part 5"); michael@0: