destructuring-null-or-undefined-into-computed-property-name.js (895B)
1 load(libdir + 'asserts.js'); 2 load(libdir + 'iteration.js'); 3 4 var outer = "unmodified"; 5 6 function f(v) 7 { 8 if (v + "") 9 ({ [(outer = "modified")]: v } = v); 10 } 11 12 assertEq(outer, "unmodified"); 13 f(true); 14 assertEq(outer, "modified"); 15 16 outer = "unmodified"; 17 f({}); 18 assertEq(outer, "modified"); 19 20 outer = "unmodified"; 21 assertThrowsInstanceOf(() => f(null), TypeError); 22 assertEq(outer, "unmodified"); 23 24 assertThrowsInstanceOf(() => f(undefined), TypeError); 25 assertEq(outer, "unmodified"); 26 27 28 function g(v) 29 { 30 if (v + "") 31 ({ [{ toString() { outer = "modified"; return 0; } }]: v } = v); 32 } 33 34 outer = "unmodified"; 35 g(true); 36 assertEq(outer, "modified"); 37 38 outer = "unmodified"; 39 g({}); 40 assertEq(outer, "modified"); 41 42 outer = "unmodified"; 43 assertThrowsInstanceOf(() => g(undefined), TypeError); 44 assertEq(outer, "unmodified"); 45 46 assertThrowsInstanceOf(() => g(null), TypeError); 47 assertEq(outer, "unmodified");