| /* |
| * 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 <pat> = ... 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"); |