for-in-with-destructuring-assignments.js (3343B)
1 /* 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/licenses/publicdomain/ 4 */ 5 6 var gTestfile = "for-in-with-destructuring-assignments.js"; 7 var BUGNUMBER = 1164741; 8 var summary = "|for (var <pat> = ... in ...)| is invalid syntax"; 9 10 print(BUGNUMBER + ": " + summary); 11 12 /************** 13 * BEGIN TEST * 14 **************/ 15 16 // This is a total grab-bag of junk originally in tests changed when this 17 // syntax was removed. Avert your eyes! 18 19 assertThrowsInstanceOf(() => eval(` 20 for (var [x] = x>>x in [[]<[]]) 21 { 22 []; 23 }`), 24 SyntaxError); 25 26 /******************************************************************************/ 27 28 assertThrowsInstanceOf(function() { 29 // Abandon all hope, ye who try to read this. 30 eval(` 31 (function () { 32 for 33 (var [x] = function(){} 34 in 35 (function m(a) { 36 if (a < 1) { 37 x; 38 return; 39 } 40 return m(a - 1) + m(a - 2); 41 })(7)(eval("")) 42 ) 43 { 44 []; 45 } 46 }) 47 `)(); 48 }, SyntaxError); 49 50 /******************************************************************************/ 51 52 assertThrowsInstanceOf(() => eval(` 53 for (var [e] = [] in (eval("for (b = 0; b < 6; ++b) gc()"))) {} 54 `), SyntaxError); 55 56 /******************************************************************************/ 57 58 assertThrowsInstanceOf(() => eval("for (var [ v , c ] = 0 in undefined) { }"), 59 SyntaxError); 60 61 /******************************************************************************/ 62 63 assertThrowsInstanceOf(() => eval("var b = e; for (var [e] = b in w) c"), 64 SyntaxError); 65 66 /******************************************************************************/ 67 68 assertThrowsInstanceOf(() => eval("for (var {a: []} = 2 in []) { }"), 69 SyntaxError); 70 71 /******************************************************************************/ 72 73 assertThrowsInstanceOf(() => eval(`try 74 { 75 for (var [,{y}] = 1 in []) {} 76 } 77 catch(ex) 78 { 79 }`), 80 SyntaxError); 81 82 /******************************************************************************/ 83 84 assertThrowsInstanceOf(() => eval("for (var [x] = [] in null);"), 85 SyntaxError); 86 87 /******************************************************************************/ 88 89 assertThrowsInstanceOf(() => eval("for (var [x] = x in y) var x;"), 90 SyntaxError); 91 92 /******************************************************************************/ 93 94 assertThrowsInstanceOf(() => eval(` 95 for (var [arguments] = ({ get y(){} }) in y ) (x); 96 `), 97 SyntaxError); 98 99 /******************************************************************************/ 100 101 if (typeof evalcx == 'function') { 102 var src = 'try {\n' + 103 ' for (var [e] = /x/ in d) {\n' + 104 ' (function () {});\n' + 105 ' }\n' + 106 '} catch (e) {}\n' + 107 'try {\n' + 108 ' let(x = Object.freeze(this, /x/))\n' + 109 ' e = {}.toString\n' + 110 ' function y() {}\n' + 111 '} catch (e) {}'; 112 113 try 114 { 115 evalcx(src); 116 throw new Error("didn't throw"); 117 } 118 catch (e) 119 { 120 assertEq(e.name === "SyntaxError", true, 121 "expected invalid syntax, got " + e); 122 } 123 } 124 125 /******************************************************************************/ 126 127 if (typeof reportCompare === "function") 128 reportCompare(true, true); 129 130 print("Tests complete");