Source code

Revision control

Copy as Markdown

Other Tools

// Classes are always strict mode. Check computed property names and heritage
// expressions as well.
class a { constructor() { Object.preventExtensions({}).prop = 0; } }
assertThrowsInstanceOf(() => new a(), TypeError);
var aExpr = class { constructor() { Object.preventExtensions().prop = 0; } };
assertThrowsInstanceOf(() => new aExpr(), TypeError);
function shouldThrowCPN() {
class b {
[Object.preventExtensions({}).prop = 4]() { }
constructor() { }
}
}
function shouldThrowCPNExpr() {
var b = class {
[Object.preventExtensions({}).prop = 4]() { }
constructor() { }
};
}
assertThrowsInstanceOf(shouldThrowCPN, TypeError);
assertThrowsInstanceOf(shouldThrowCPNExpr, TypeError);
function shouldThrowHeritage() {
class b extends (Object.preventExtensions({}).prop = 4) {
constructor() { }
}
}
function shouldThrowHeritageExpr() {
var b = class extends (Object.preventExtensions({}).prop = 4) {
constructor() { }
};
}
assertThrowsInstanceOf(shouldThrowHeritage, TypeError);
assertThrowsInstanceOf(shouldThrowHeritageExpr, TypeError);
if (typeof reportCompare === "function")
reportCompare(0, 0, "OK");