var a = [true,false]; function foo(x) { } for (var i=0;i<3;i++) { foo(a[i]); } for (var k in a) { foo(a[k]); // k is a string, which shouldn't be used for array access } var b = (null : ?{[key: string]: string}); for (var j in b) { foo(b[j]); } var c; for (var m in (c = b)) { foo(c[m]); } var d; for (var n in (d = a)) { foo(d[n]); // d is a string, which shouldn't be used for array access } for (var x in undefined) { foo(x); // unreachable } for (var x in null) { foo(x); // unreachable } for (var y in this) { // regression test to make sure `in this` doesn't fatal. it's currently // allowed, even though we can't actually enumerate all the keys on `this`. }