summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/object/setPrototypeOf-cycle.js
blob: a8b5aa75cdfb4f779fee1000741f25bd7b414405 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// The cycle check in 9.1.2 [[SetPrototypeOf]] does not walk proxies.
// Therefore it's very easy to create prototype chain cycles involving proxies,
// and the spec requires us to accept this.

var t = {};
var p = new Proxy(t, {});
Object.setPrototypeOf(t, p);  // 🙈

// Actually doing anything that searches this object's prototype chain
// technically should not terminate. We instead throw "too much recursion".
for (var obj of [t, p]) {
    assertThrowsInstanceOf(() => "x" in obj, InternalError);
    assertThrowsInstanceOf(() => obj.x, InternalError);
    assertThrowsInstanceOf(() => { obj.x = 1; }, InternalError);
}
reportCompare(0, 0);