function assert(b) { if (!b) throw new Error('bad assertion'); } function testStackOverflowGet() { let threw = false; try { let o = {}; let p = new Proxy(o, {}); Object.setPrototypeOf(o, p); p.anyField; } catch(e) { threw = true; assert(e.toString() === "RangeError: Maximum call stack size exceeded."); } assert(threw); } function testStackOverflowIndexedGet(i) { let threw = false; try { let o = {}; let p = new Proxy(o, {}); Object.setPrototypeOf(o, p); p[i]; } catch(e) { threw = true; assert(e.toString() === "RangeError: Maximum call stack size exceeded."); } assert(threw); } function testStackOverflowSet() { let threw = false; try { let o = {}; let p = new Proxy(o, {}); Object.setPrototypeOf(o, p); p.anyField = 50; } catch(e) { threw = true; assert(e.toString() === "RangeError: Maximum call stack size exceeded."); } assert(threw); } function testStackOverflowIndexedSet(i) { let threw = false; try { let o = {}; let p = new Proxy(o, {}); Object.setPrototypeOf(o, p); p[i] = 50; } catch(e) { threw = true; assert(e.toString() === "RangeError: Maximum call stack size exceeded."); } assert(threw); } for (let i = 0; i < 250; i++) { testStackOverflowGet(); testStackOverflowIndexedGet(i); testStackOverflowSet(); testStackOverflowIndexedSet(i); }