function assert(b) { if (!b) throw new Error("Bad"); } function test(f) { noInline(f); for (let i = 0; i < 1000; ++i) f(); } test(function() { let o = {xx: 0}; for (let i in o) { for (i in [0, 1, 2]) { } assert(typeof i === "string"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { for (var i of [0]) { } assert(typeof i === "number"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { for ({i} of [{i: 0}]) { } assert(typeof i === "number"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { ;({i} = {i: 0}); assert(typeof i === "number"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { ;([i] = [0]); assert(typeof i === "number"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { ;({...i} = {a:20, b:30}); assert(typeof i === "object"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { eval("i = 0;"); assert(typeof i === "number"); assert(o[i] === undefined); } }); test(function() { let o = {xx: 0}; for (let i in o) { var i = 0; assert(typeof i === "number"); assert(o[i] === undefined); } });