function foo() { class A { constructor() { } }; return A; } let A = foo(); let B = foo(); function makePolyProto(o) { return o.x; } noInline(makePolyProto); for (let i = 0; i < 1000; ++i) { makePolyProto(i % 2 ? new A : new B); } function bar(b) { let o = new A; if (b) { if (isFinalTier()) OSRExit(); return o; } } noInline(bar); function baz(b) { let o = new A; if (b) return o; } noInline(baz); for (let i = 0; i < 100000; ++i) { let b = i % 10 === 0; let r = bar(b); if (b) { if (r.__proto__ !== A.prototype) throw new Error("Bad!"); } } for (let i = 0; i < 100000; ++i) { let b = i % 10 === 0; let r = baz(b); if (b) { if (r.__proto__ !== A.prototype) throw new Error("Bad!"); } }