Source code

Revision control

Copy as Markdown

Other Tools

// The index is negative before code generation.
let v = {};
let negativeIndex = -1;
function f(obj) {
assertEq(obj[negativeIndex] === v, true);
}
for (let i = 0; i < 2000; i++) {
let obj = {};
obj[1] = {};
obj[negativeIndex] = v;
f(obj);
}
// The sign of the index changes after the code generation.
function g(obj, i) {
for (let j = 0; j < 4; j++) {
assertEq(obj[i-j] === v, true);
}
}
for (let i = 0; i < 2000; i++) {
let obj = {};
obj[1] = {};
let X = 2000 - i;
for (let j = 0; j < 10; j++) {
obj[X-j] = v;
}
g(obj, X);
}