/* * Any copyright is dedicated to the Public Domain. * http://creativecommons.org/licenses/publicdomain/ */ var gTestfile = "for-in-with-destructuring-assignments.js"; var BUGNUMBER = 1164741; var summary = "|for (var = ... in ...)| is invalid syntax"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ // This is a total grab-bag of junk originally in tests changed when this // syntax was removed. Avert your eyes! assertThrowsInstanceOf(() => eval(` for (var [x] = x>>x in [[]<[]]) { []; }`), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(function() { // Abandon all hope, ye who try to read this. eval(` (function () { for (var [x] = function(){} in (function m(a) { if (a < 1) { x; return; } return m(a - 1) + m(a - 2); })(7)(eval("")) ) { []; } }) `)(); }, SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval(` for (var [e] = [] in (eval("for (b = 0; b < 6; ++b) gc()"))) {} `), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval("for (var [ v , c ] = 0 in undefined) { }"), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval("var b = e; for (var [e] = b in w) c"), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval("for (var {a: []} = 2 in []) { }"), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval(`try { for (var [,{y}] = 1 in []) {} } catch(ex) { }`), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval("for (var [x] = [] in null);"), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval("for (var [x] = x in y) var x;"), SyntaxError); /******************************************************************************/ assertThrowsInstanceOf(() => eval(` for (var [arguments] = ({ get y(){} }) in y ) (x); `), SyntaxError); /******************************************************************************/ if (typeof evalcx == 'function') { var src = 'try {\n' + ' for (var [e] = /x/ in d) {\n' + ' (function () {});\n' + ' }\n' + '} catch (e) {}\n' + 'try {\n' + ' let(x = Object.freeze(this, /x/))\n' + ' e = {}.toString\n' + ' function y() {}\n' + '} catch (e) {}'; try { evalcx(src); throw new Error("didn't throw"); } catch (e) { assertEq(e.name === "SyntaxError", true, "expected invalid syntax, got " + e); } } /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");