summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/fields/ion-private-idempotent.js
blob: 139735d62d0f669f969506b6019707c11b9efd5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var acc = 0;
const loopCount = 100;

class A {
  #x = 1;
  static loopRead(o) {
    for (var i = 0; i < loopCount; i++) {
      // If this getelem were hoisted out of the loop,
      // we need the IC that is attached to that to
      // correctly throw if .#x is not in o.
      var b = o.#x;
      acc += 1;
    }
  }
};

// Two non-A objects, because we're concerned not about the first
// attempt to read .#x from a non A, but the second, because if
// we attach the wrong IC, we'll attach an IC that provides
// regular object semantics, which would be to return undefined.
var array = [new A, new A, new A, {}, {}];
for (var e of array) {
  acc = 0;
  try {
    A.loopRead(e);
    assertEq(acc, loopCount);
  } catch (e) {
    assertEq(e instanceof TypeError, true);
    assertEq(acc, 0);
  }
}