load(libdir + 'asserts.js'); load(libdir + 'eqArrayHelper.js'); var reserved = [ 'break', 'do', 'in', 'typeof', 'case', 'else', 'instanceof', 'var', 'catch', 'export', 'new', 'void', 'class', 'extends', 'return', 'while', 'const', 'finally', 'super', 'with', 'continue', 'for', 'switch', 'debugger', 'function', 'this', 'delete', 'import', 'try', 'enum', 'null', 'true', 'false' ]; reserved.forEach(ident => { assertThrowsInstanceOf(() => new Function('var [...' + ident + '] = []'), SyntaxError); }); var strictIdentifiers = [ // XXX: see bug 1032150. Once fixed, please uncomment these values and // remove the assertions below //'yield', //'let', 'eval', 'arguments', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static' ]; assertThrowsInstanceOf(() => new Function('[...yield] = []'), SyntaxError); assertThrowsInstanceOf(() => new Function('"use strict"; [...let] = []'), SyntaxError); strictIdentifiers.forEach(ident => assertThrowsInstanceOf(() => new Function('"use strict"; [...' + ident + '] = []'), SyntaxError)); var globalEval = eval; strictIdentifiers.forEach(ident => { globalEval(ident + ' = null'); assertEqArray(new Function('input', '[, ...' + ident + '] = input;' + 'return ' + ident )([1, 2, 3]), [2, 3]); });