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