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); | |
} | |
}); |