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