// Destructuring assignment to eval or arguments in destructuring is a SyntaxError // in strict mode load(libdir + "asserts.js"); var patterns = [ "[_]", "[a, b, _]", "[[_]]", "[[], [{}, [_]]]", "{x:_}", "{x:y, z:_}", "{0:_}", "{_}", "[..._]" ]; for (var pattern of patterns) { var stmt = pattern + " = obj"; if (stmt[0] == "{") stmt = "(" + stmt + ")"; stmt += ";" // stmt is a legal statement... Function(stmt); // ...but not if you replace _ with one of these two names. for (var name of ["eval", "arguments"]) { var s = stmt.replace("_", name); Function(s); assertThrowsInstanceOf(() => Function("'use strict'; " + s), SyntaxError); } }