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