blob: bd9b37729b464d8117a0c1d7a5a6745fed39a791 [file] [log] [blame]
A = class extends String { }
B = class extends A { get 4() { return 1; } }
C = class extends B { }
A.prototype[3] = 1;
function test() {
let a = new A("foo");
let b = new B("baz");
let c = new C("bar");
// String objects have a non-writable length property
a.length = 1;
b.length = 1;
c.length = 1;
if (a.length !== 3 || b.length !== 3 || c.length !== 3)
throw "not string objects";
if (!(a instanceof A && a instanceof String))
throw "a has incorrect prototype chain";
if (!(b instanceof B && b instanceof A && b instanceof String))
throw "b has incorrect prototype chain";
if (!(c instanceof C && c instanceof B && c instanceof A && c instanceof String))
throw "c has incorrect prototype chain";
if (a[4] !== undefined || b[4] !== 1 || c[4] !== 1)
throw "bad indexing type with accessors on chain";
if (a[3] !== 1 || b[3] !== 1 || c[3] !== 1)
throw "bad indexing type with values on chain";
}
noInline(test);
for (i = 0; i < 10000; i++)
test();