load(libdir + "asserts.js"); function g() { } let a = { g: function() { } }; function check(expr) { assertThrowsInstanceOf(Function(expr), ReferenceError); } function checkDestructuring(expr) { assertThrowsInstanceOf(() => Function(expr), SyntaxError); } check("g(...[]) = 1"); check("a.g(...[]) = 1"); check("eval(...['1']) = 1"); check("g(...[]) ++"); check("a.g(...[]) ++"); check("eval(...['1']) ++"); checkDestructuring("[g(...[])] = []"); checkDestructuring("[a.g(...[])] = []"); checkDestructuring("[eval(...['1'])] = []"); checkDestructuring("({y: g(...[])} = 1)"); checkDestructuring("({y: a.g(...[])} = 1)"); checkDestructuring("({y: eval(...['1'])} = 1)");