Source code

Revision control

Copy as Markdown

Other Tools

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