michael@0: load(libdir + "asserts.js"); michael@0: var ieval = eval; michael@0: michael@0: // Now for a tour of the various ways you can access arguments. michael@0: assertThrowsInstanceOf(function () { michael@0: ieval("function x(...rest) { arguments; }"); michael@0: }, SyntaxError) michael@0: assertThrowsInstanceOf(function () { michael@0: Function("...rest", "arguments;"); michael@0: }, SyntaxError); michael@0: assertThrowsInstanceOf(function (...rest) { michael@0: eval("arguments;"); michael@0: }, SyntaxError); michael@0: assertThrowsInstanceOf(function (...rest) { michael@0: eval("arguments = 42;"); michael@0: }, SyntaxError); michael@0: michael@0: function g(...rest) { michael@0: assertThrowsInstanceOf(h, Error); michael@0: } michael@0: function h() { michael@0: g.arguments; michael@0: } michael@0: g(); michael@0: michael@0: // eval() is evil, but you can still use it with rest parameters! michael@0: function still_use_eval(...rest) { michael@0: eval("x = 4"); michael@0: } michael@0: still_use_eval();