| function assert(b) { |
| if (!b) |
| throw new Error("Bad!"); |
| } |
| |
| function makePolyProtoObject() { |
| function foo() { |
| class C { |
| constructor() { |
| this._field = 42; |
| } |
| }; |
| return new C; |
| } |
| for (let i = 0; i < 15; ++i) |
| foo(); |
| return foo(); |
| } |
| |
| let x = new Uint32Array(10); |
| let p = x.__proto__.__proto__; |
| let obj = makePolyProtoObject(); |
| obj.__proto__ = p; |
| x.__proto__ = obj; |
| |
| function foo(x) { |
| return x.byteLength; |
| } |
| noInline(foo); |
| |
| for (let i = 0; i < 1000; ++i) { |
| assert(foo(x) === 10 * 4); |
| }; |
| |
| obj.__proto__ = {}; |
| |
| assert(foo(x) === undefined); |