Source code

Revision control

Copy as Markdown

Other Tools

// 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);
}
}