diff --git a/features.txt b/features.txt index f3072571d75ec99506da58b7b00f19c6a12242d1..0b0b8e6774fb3b2ee68a759c55cd935787b96048 100644 --- a/features.txt +++ b/features.txt @@ -115,6 +115,7 @@ template TypedArray u180e Uint8Array +Uint16Array WeakMap WeakSet diff --git a/src/class-fields/eval-err-contains-arguments.case b/src/class-fields/eval-err-contains-arguments.case index 7cf7fd2c613058545939d472fd75f92dd36827b7..f9a6f6345dacdb7864ddb9765c30f2515366725b 100644 --- a/src/class-fields/eval-err-contains-arguments.case +++ b/src/class-fields/eval-err-contains-arguments.case @@ -18,7 +18,7 @@ info: | ... For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false. features: [class-fields] -template: initializer-eval +template: initializer-eval-arguments ---*/ //- initializer diff --git a/src/class-fields/eval-err-contains-newcall.case b/src/class-fields/eval-err-contains-newtarget.case similarity index 84% rename from src/class-fields/eval-err-contains-newcall.case rename to src/class-fields/eval-err-contains-newtarget.case index 3b8eed5bc6403b76daadbaa142e9a6784274cdfb..65ab504e41782844c12f995223d02dd135c9b7d1 100644 --- a/src/class-fields/eval-err-contains-newcall.case +++ b/src/class-fields/eval-err-contains-newtarget.case @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -desc: error if `new.call` in StatementList of eval +desc: error if `new.target` in StatementList of eval info: | Additional Early Error Rules for Eval Inside Initializer These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer. @@ -17,12 +17,8 @@ info: | It is a Syntax Error if StatementList Contains NewTarget. features: [class-fields] -template: initializer-eval +template: initializer-eval-newtarget ---*/ //- initializer -new.call -//- earlyerror -SyntaxError -//- executionerror -SyntaxError +new.target diff --git a/src/class-fields/eval-err-contains-supercall-1.case b/src/class-fields/eval-err-contains-supercall-1.case index eaabad6ebb1c00d4a5c896f2b33c307cbc6b4ee6..7be53f94272e971d1a62dddfbdc7fba3e21c8896 100644 --- a/src/class-fields/eval-err-contains-supercall-1.case +++ b/src/class-fields/eval-err-contains-supercall-1.case @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -desc: error if `super()` in StatementList of eval +desc: error if `super()['x']` in StatementList of eval info: | Additional Early Error Rules for Eval Inside Initializer These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer. @@ -17,12 +17,8 @@ info: | It is a Syntax Error if StatementList Contains SuperCall. features: [class-fields] -template: initializer-eval-super +template: initializer-eval-super-call ---*/ //- initializer -super() -//- earlyerror -SyntaxError -//- executionerror -SyntaxError +super()['x'] diff --git a/src/class-fields/eval-err-contains-supercall-2.case b/src/class-fields/eval-err-contains-supercall-2.case index 45166f164868af4f40121620b6b064da8942062a..d0c9e34491d1ae8de0331774fc3ab30b8b14c225 100644 --- a/src/class-fields/eval-err-contains-supercall-2.case +++ b/src/class-fields/eval-err-contains-supercall-2.case @@ -11,18 +11,14 @@ info: | ... The remaining eval rules apply as outside a constructor, inside a method, and inside a function. - Additional Early Error Rules for Eval Outside Methods - These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition. + Additional Early Error Rules for Eval Outside Constructor Methods + These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression. ScriptBody:StatementList It is a Syntax Error if StatementList Contains SuperCall. features: [class-fields] -template: initializer-eval-super +template: initializer-eval-super-call ---*/ //- initializer super().x -//- earlyerror -SyntaxError -//- executionerror -SyntaxError diff --git a/src/class-fields/eval-err-contains-supercall.case b/src/class-fields/eval-err-contains-supercall.case index eaabad6ebb1c00d4a5c896f2b33c307cbc6b4ee6..b6370bc13e20e675892dd2a16fdd5e59020d76ff 100644 --- a/src/class-fields/eval-err-contains-supercall.case +++ b/src/class-fields/eval-err-contains-supercall.case @@ -17,12 +17,8 @@ info: | It is a Syntax Error if StatementList Contains SuperCall. features: [class-fields] -template: initializer-eval-super +template: initializer-eval-super-call ---*/ //- initializer super() -//- earlyerror -SyntaxError -//- executionerror -SyntaxError diff --git a/src/class-fields/eval-err-contains-superproperty-1.case b/src/class-fields/eval-err-contains-superproperty-1.case index 7af5c8144d5277ab8138d596e8cc0369f680da7f..0d9a2d3a52bf34a8038ebe71ac310e31464cfdd3 100644 --- a/src/class-fields/eval-err-contains-superproperty-1.case +++ b/src/class-fields/eval-err-contains-superproperty-1.case @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -desc: error if `super().x` in StatementList of eval +desc: error if `super.x` in StatementList of eval info: | Additional Early Error Rules for Eval Inside Initializer These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer. @@ -17,12 +17,8 @@ info: | It is a Syntax Error if StatementList Contains SuperProperty. features: [class-fields] -template: initializer-eval-super +template: initializer-eval-super-property ---*/ //- initializer super.x -//- earlyerror -SyntaxError -//- executionerror -SyntaxError diff --git a/src/class-fields/eval-err-contains-superproperty-2.case b/src/class-fields/eval-err-contains-superproperty-2.case index 21a3db5445d7300f21a2d6deccfe9c6b49d89765..7840bdb77f2a3e554e91b862deb68ffd40e5edb8 100644 --- a/src/class-fields/eval-err-contains-superproperty-2.case +++ b/src/class-fields/eval-err-contains-superproperty-2.case @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -desc: error if `super().x` in StatementList of eval +desc: error if `super['x']` in StatementList of eval info: | Additional Early Error Rules for Eval Inside Initializer These static semantics are applied by PerformEval when a direct eval call occurs inside a class field initializer. @@ -17,12 +17,8 @@ info: | It is a Syntax Error if StatementList Contains SuperProperty. features: [class-fields] -template: initializer-eval-super +template: initializer-eval-super-property ---*/ //- initializer super['x'] -//- earlyerror -SyntaxError -//- executionerror -SyntaxError diff --git a/src/class-fields/initializer-eval/cls-decl-fields-eval.template b/src/class-fields/initializer-eval-arguments/cls-decl-fields-eval.template similarity index 97% rename from src/class-fields/initializer-eval/cls-decl-fields-eval.template rename to src/class-fields/initializer-eval-arguments/cls-decl-fields-eval.template index ed721afebe278beda7576830dbd1c43cbf52f657..f75aa39e080b427f926543b412335722f0dd57d7 100644 --- a/src/class-fields/initializer-eval/cls-decl-fields-eval.template +++ b/src/class-fields/initializer-eval-arguments/cls-decl-fields-eval.template @@ -8,7 +8,7 @@ name: direct eval ---*/ var executed = false; -class C = { +class C { x = eval('executed = true; /*{ initializer }*/;'); } diff --git a/src/class-fields/initializer-eval/cls-decl-fields-indirect-eval.template b/src/class-fields/initializer-eval-arguments/cls-decl-fields-indirect-eval.template similarity index 97% rename from src/class-fields/initializer-eval/cls-decl-fields-indirect-eval.template rename to src/class-fields/initializer-eval-arguments/cls-decl-fields-indirect-eval.template index 11aa34d0dab12638dbd3f29dabd23318845e609f..0b795b6e7f783f258119fa4b92fe08cd6d5c546e 100644 --- a/src/class-fields/initializer-eval/cls-decl-fields-indirect-eval.template +++ b/src/class-fields/initializer-eval-arguments/cls-decl-fields-indirect-eval.template @@ -8,7 +8,7 @@ name: indirect eval ---*/ var executed = false; -class C = { +class C { x = (0, eval)('executed = true; /*{ initializer }*/;'); } diff --git a/src/class-fields/initializer-eval/cls-expr-fields-eval.template b/src/class-fields/initializer-eval-arguments/cls-expr-fields-eval.template similarity index 100% rename from src/class-fields/initializer-eval/cls-expr-fields-eval.template rename to src/class-fields/initializer-eval-arguments/cls-expr-fields-eval.template diff --git a/src/class-fields/initializer-eval/cls-expr-fields-indirect-eval.template b/src/class-fields/initializer-eval-arguments/cls-expr-fields-indirect-eval.template similarity index 100% rename from src/class-fields/initializer-eval/cls-expr-fields-indirect-eval.template rename to src/class-fields/initializer-eval-arguments/cls-expr-fields-indirect-eval.template diff --git a/src/class-fields/initializer-eval-newtarget/cls-decl-fields-eval.template b/src/class-fields/initializer-eval-newtarget/cls-decl-fields-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..8ef1ea4d3613f8ef969dcdbb97fcd33f4b7b183f --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-decl-fields-eval.template @@ -0,0 +1,18 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-direct- +name: direct eval +---*/ + +var executed = false; +class C { + x = eval('executed = true; /*{ initializer }*/;'); +} + +var c = new C(); + +assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/src/class-fields/initializer-eval-newtarget/cls-decl-fields-indirect-eval.template b/src/class-fields/initializer-eval-newtarget/cls-decl-fields-indirect-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..ee4630ca19abdcb0ad264bf718b1f8fed5467d2b --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-decl-fields-indirect-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-indirect- +name: indirect eval +---*/ + +var executed = false; +class C { + x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-newtarget/cls-expr-fields-eval.template b/src/class-fields/initializer-eval-newtarget/cls-expr-fields-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..1c6b4b438b549b10f21cbd6ac9cbac9aace69810 --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-expr-fields-eval.template @@ -0,0 +1,18 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-direct- +name: direct eval +---*/ + +var executed = false; +var C = class { + x = eval('executed = true; /*{ initializer }*/;'); +} + +var c = new C(); + +assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/src/class-fields/initializer-eval-newtarget/cls-expr-fields-indirect-eval.template b/src/class-fields/initializer-eval-newtarget/cls-expr-fields-indirect-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..1c8bbf59796110c7217c3db246b856080cd42456 --- /dev/null +++ b/src/class-fields/initializer-eval-newtarget/cls-expr-fields-indirect-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-indirect- +name: indirect eval +---*/ + +var executed = false; +var C = class { + x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super/cls-decl-fields-eval.template b/src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template similarity index 82% rename from src/class-fields/initializer-eval-super/cls-decl-fields-eval.template rename to src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template index 5870c9a69a2e17fc30a0ab41520d453ce28e1a02..8ec98eac915dd876889e506db80b3fb3f2ac564a 100644 --- a/src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +++ b/src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template @@ -7,14 +7,14 @@ path: language/statements/class/fields-derived-cls-direct- name: direct eval ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = eval('executed = true; /*{ initializer }*/;'); } -assert.throws(/*{ earlyerror }*/, function() { +assert.throws(SyntaxError, function() { new C(); }); diff --git a/src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template similarity index 75% rename from src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template rename to src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template index 9dafcc047722967bf39f0111cf4e8caca6d05a22..0f9a97c6eb4eff0abe2d5335c8bb1b28bc440756 100644 --- a/src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +++ b/src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template @@ -7,15 +7,15 @@ path: language/statements/class/fields-derived-cls-indirect- name: indirect eval ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = (0, eval)('executed = true; /*{ initializer }*/;'); } -assert.throws(/*{ executionerror }*/, function() { +assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super/cls-expr-fields-eval.template b/src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template similarity index 90% rename from src/class-fields/initializer-eval-super/cls-expr-fields-eval.template rename to src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template index d4517cd6182c8701d261d48be212da5c3884aec3..65ab9d8dbd57fd652a1ef20e3032bbee923cbce6 100644 --- a/src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +++ b/src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template @@ -14,7 +14,7 @@ var C = class extends A { x = eval('executed = true; /*{ initializer }*/;'); } -assert.throws(/*{ earlyerror }*/, function() { +assert.throws(SyntaxError, function() { new C(); }); diff --git a/src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template similarity index 82% rename from src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template rename to src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template index f024c4f07b17851a23f5ebbaf0e3f993399cc9bb..83415b3df47d3d7e5f49c84882b71fcbd4c1d170 100644 --- a/src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +++ b/src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template @@ -14,8 +14,8 @@ var C = class extends A { x = (0, eval)('executed = true; /*{ initializer }*/;'); } -assert.throws(/*{ executionerror }*/, function() { +assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template b/src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..a994b1e45c7c4f6059298810c30687e142d0f3f3 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-direct- +name: direct eval +---*/ + +class A {} + +var executed = false; +class C extends A { + x = eval('executed = true; /*{ initializer }*/;'); +} + +new C(); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..0f9a97c6eb4eff0abe2d5335c8bb1b28bc440756 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template @@ -0,0 +1,21 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/statements/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +class A {} + +var executed = false; +class C extends A { + x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template b/src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..b7ca546bebcf0e35455efcf4696bf1fd082314c1 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template @@ -0,0 +1,19 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-direct- +name: direct eval +---*/ + +var A = class {} + +var executed = false; +var C = class extends A { + x = eval('executed = true; /*{ initializer }*/;'); +} + +new C(); + +assert.sameValue(executed, true); diff --git a/src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template b/src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template new file mode 100644 index 0000000000000000000000000000000000000000..83415b3df47d3d7e5f49c84882b71fcbd4c1d170 --- /dev/null +++ b/src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template @@ -0,0 +1,21 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-performeval-rules-in-initializer +path: language/expressions/class/fields-derived-cls-indirect- +name: indirect eval +---*/ + +var A = class {} + +var executed = false; +var C = class extends A { + x = (0, eval)('executed = true; /*{ initializer }*/;'); +} + +assert.throws(SyntaxError, function() { + new C(); +}); + +assert.sameValue(executed, false); diff --git a/test/built-ins/RegExp/incomplete_hex_unicode_escape.js b/test/annexB/built-ins/RegExp/incomplete_hex_unicode_escape.js similarity index 100% rename from test/built-ins/RegExp/incomplete_hex_unicode_escape.js rename to test/annexB/built-ins/RegExp/incomplete_hex_unicode_escape.js diff --git a/test/built-ins/BigInt/prototype/toString/length.js b/test/built-ins/BigInt/prototype/toString/length.js index 03975ff3444085bf0af16a067ac522149d6e8df8..37cfa5c05240184c02b61ada98582fcb9ecf5b97 100644 --- a/test/built-ins/BigInt/prototype/toString/length.js +++ b/test/built-ins/BigInt/prototype/toString/length.js @@ -13,7 +13,7 @@ features: [BigInt] ---*/ verifyProperty(BigInt.prototype.toString, "length", { - value: 1, + value: 0, writable: false, enumerable: false, configurable: true diff --git a/test/built-ins/BigInt/prototype/toString/string-is-code-units-of-decimal-digits-only.js b/test/built-ins/BigInt/prototype/toString/string-is-code-units-of-decimal-digits-only.js index f876732792af008a02c054e2dd58dc58b38b297a..15d4cbbab8b90e8cf67799a1469950a3cb3c1264 100644 --- a/test/built-ins/BigInt/prototype/toString/string-is-code-units-of-decimal-digits-only.js +++ b/test/built-ins/BigInt/prototype/toString/string-is-code-units-of-decimal-digits-only.js @@ -5,7 +5,6 @@ esid: sec-tostring-applied-to-the-bigint-type description: BigInt .toString() returns only decimal digits, does not include BigIntLiteralSuffix info: | - ToString Applied to the BigInt Type The abstract operation ToString converts a BigInt i to String format as follows: diff --git a/test/built-ins/Object/internals/DefineOwnProperty/nan-equivalence.js b/test/built-ins/Object/internals/DefineOwnProperty/nan-equivalence.js index cfa2f4bdd779f4b3864d90759e716f607cc5d3f0..d6f4455ad13850dc4396ffd9ca787578cae1b207 100644 --- a/test/built-ins/Object/internals/DefineOwnProperty/nan-equivalence.js +++ b/test/built-ins/Object/internals/DefineOwnProperty/nan-equivalence.js @@ -19,7 +19,7 @@ info: | 9.1.6.1 OrdinaryDefineOwnProperty 1. Let current be ? O.[[GetOwnProperty]](P). - 2. Let extensible be the value of the [[Extensible]] internal slot of O. + 2. Let extensible be O.[[Extensible]]. 3. Return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current). @@ -28,27 +28,34 @@ info: | [...] 7. Else if IsDataDescriptor(current) and IsDataDescriptor(Desc) are both true, then - a. If the [[Configurable]] field of current is false, then + a. If current.[[Configurable]] is false and current.[[Writable]] is false, + then [...] - b. Else the [[Configurable]] field of current is true, so any change is - acceptable. [...] 9. If O is not undefined, then a. For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. 10. Return true. -features: [Float64Array, Uint8Array] +features: [Float64Array, Uint8Array, Uint16Array] includes: [nans.js] ---*/ +var isLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] !== 0; + var float = new Float64Array(1); var ints = new Uint8Array(float.buffer); var len = distinctNaNs.length; -var idx, jdx, subject, first, second; + function byteValue(value) { float[0] = value; - return ints[0] + (ints[1] << 8) + (ints[2] << 16) + (ints[3] << 32) + - (ints[4] << 64) + (ints[5] << 64) + (ints[6] << 128) + (ints[7] << 256); + + var hex = "0123456789ABCDEF"; + var s = ""; + for (var i = 0; i < 8; ++i) { + var v = ints[isLittleEndian ? 7 - i : i]; + s += hex[(v >> 4) & 0xf] + hex[v & 0xf]; + } + return s; } /** @@ -57,21 +64,23 @@ function byteValue(value) { * cannot be verified and this test is expected to pass without evaluating any * assertions. */ -for (idx = 0; idx < len; ++idx) { - for (jdx = 0 ; jdx < len; ++jdx) { - first = distinctNaNs[idx]; - second = distinctNaNs[jdx]; - if (byteValue(first) === byteValue(second)) { +for (var idx = 0; idx < len; ++idx) { + for (var jdx = 0; jdx < len; ++jdx) { + // NB: Don't store the distinct NaN values as global variables, because + // global variables are properties of the global object. And in this test + // we want to ensure NaN-valued properties in objects are properly handled, + // so storing NaN values in the (global) object defeats the purpose. + if (byteValue(distinctNaNs[idx]) === byteValue(distinctNaNs[jdx])) { continue; } - subject = {}; - subject.prop = first; - subject.prop = second; + var subject = {}; + subject.prop = distinctNaNs[idx]; + subject.prop = distinctNaNs[jdx]; assert.sameValue( byteValue(subject.prop), - byteValue(second), + byteValue(distinctNaNs[jdx]), 'Property value was re-set' ); } diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js index af1ce24fa070e33e876682c00665b23c0466a58d..4eda5161c71b5c0058b5a02b25cb0b4110c2943f 100644 --- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js +++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-1.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template /*--- -description: error if `super()` in StatementList of eval (direct eval) +description: error if `super()['x']` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -27,7 +27,7 @@ var A = class {} var executed = false; var C = class extends A { - x = eval('executed = true; super();'); + x = eval('executed = true; super()["x"];'); } assert.throws(SyntaxError, function() { diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js index 0a5ef69f3facbd25dbd9cc24ddff446c1ebc26f7..a5faa2bfa666c463024ab14f1de6baba59c00ca4 100644 --- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js +++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-2.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template /*--- description: error if `super().x` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer @@ -14,8 +14,8 @@ info: | ... The remaining eval rules apply as outside a constructor, inside a method, and inside a function. - Additional Early Error Rules for Eval Outside Methods - These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition. + Additional Early Error Rules for Eval Outside Constructor Methods + These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression. ScriptBody:StatementList It is a Syntax Error if StatementList Contains SuperCall. diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js index 726b8a22f965abe962247717422dee7275394cbc..2b120e887c051bda5437ecda2d4466ba745e4ea9 100644 --- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js +++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-supercall.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-eval.template /*--- description: error if `super()` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js index 6cb4e6d76cdaa66e7c16c7a606baffa242b70d10..88d6771c5907ff1e0d493b4fcbae1c34d65575e6 100644 --- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js +++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-1.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template /*--- -description: error if `super().x` in StatementList of eval (direct eval) +description: error if `super.x` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -30,8 +30,6 @@ var C = class extends A { x = eval('executed = true; super.x;'); } -assert.throws(SyntaxError, function() { - new C(); -}); +new C(); -assert.sameValue(executed, false); +assert.sameValue(executed, true); diff --git a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js index 4991e904b2db5d2155e7ea744fdffc3535fb98c3..a678d0829fda5a3ce07c1ac1c45096c54c6bb0cb 100644 --- a/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js +++ b/test/language/expressions/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-2.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-super-property/cls-expr-fields-eval.template /*--- -description: error if `super().x` in StatementList of eval (direct eval) +description: error if `super['x']` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -30,8 +30,6 @@ var C = class extends A { x = eval('executed = true; super["x"];'); } -assert.throws(SyntaxError, function() { - new C(); -}); +new C(); -assert.sameValue(executed, false); +assert.sameValue(executed, true); diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js index 8bbacef5b6fb128d782c9ac5b90489d018ec0764..3359f37f772e601768b8f38045ddb6c3217c659f 100644 --- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js +++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-1.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template /*--- -description: error if `super()` in StatementList of eval (indirect eval) +description: error if `super()['x']` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -27,11 +27,11 @@ var A = class {} var executed = false; var C = class extends A { - x = (0, eval)('executed = true; super();'); + x = (0, eval)('executed = true; super()["x"];'); } assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js index 65b5a2166d9af07d4c3faa480e37133e3bf4a318..2a8008219dbb282417e6c28b4070ee55570d9db7 100644 --- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js +++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-2.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template /*--- description: error if `super().x` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer @@ -14,8 +14,8 @@ info: | ... The remaining eval rules apply as outside a constructor, inside a method, and inside a function. - Additional Early Error Rules for Eval Outside Methods - These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition. + Additional Early Error Rules for Eval Outside Constructor Methods + These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression. ScriptBody:StatementList It is a Syntax Error if StatementList Contains SuperCall. @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js index 86fa84d9c0d1c521c99a2de0d99f7a4638a16644..d9a3c12a12cc08f8dae4c7b2c9052264799d0be0 100644 --- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js +++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-supercall.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-expr-fields-indirect-eval.template /*--- description: error if `super()` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js index e383332905224be03bc06894359a9bce6735391c..f49c5f74384c7b8f66c75a90c8aa4f9ab923fab7 100644 --- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js +++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-1.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template /*--- -description: error if `super().x` in StatementList of eval (indirect eval) +description: error if `super.x` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js index d276eb785ee2d1a180eeb8eee1b760b37d168331..0954958d1bc70f9632423387f25cedee3a51d1ab 100644 --- a/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js +++ b/test/language/expressions/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-2.case -// - src/class-fields/initializer-eval-super/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-property/cls-expr-fields-indirect-eval.template /*--- -description: error if `super().x` in StatementList of eval (indirect eval) +description: error if `super['x']` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/expressions/class/fields-direct-eval-err-contains-arguments.js b/test/language/expressions/class/fields-direct-eval-err-contains-arguments.js index 90cf038bc18d2781cd7121bbc239900fd8a61830..8258639dc5c0b4edf945af5ccc863bbf992b20e4 100644 --- a/test/language/expressions/class/fields-direct-eval-err-contains-arguments.js +++ b/test/language/expressions/class/fields-direct-eval-err-contains-arguments.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-arguments.case -// - src/class-fields/initializer-eval/cls-expr-fields-eval.template +// - src/class-fields/initializer-eval-arguments/cls-expr-fields-eval.template /*--- description: error if `arguments` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer diff --git a/test/language/expressions/class/fields-indirect-eval-err-contains-newcall.js b/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js similarity index 74% rename from test/language/expressions/class/fields-indirect-eval-err-contains-newcall.js rename to test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js index b61f06c89766554235483f9af96279f561814034..ba117941ed951d86ab646601ba17481d470f69ae 100644 --- a/test/language/expressions/class/fields-indirect-eval-err-contains-newcall.js +++ b/test/language/expressions/class/fields-direct-eval-err-contains-newtarget.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: -// - src/class-fields/eval-err-contains-newcall.case -// - src/class-fields/initializer-eval/cls-expr-fields-indirect-eval.template +// - src/class-fields/eval-err-contains-newtarget.case +// - src/class-fields/initializer-eval-newtarget/cls-expr-fields-eval.template /*--- -description: error if `new.call` in StatementList of eval (indirect eval) +description: error if `new.target` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -25,11 +25,10 @@ info: | var executed = false; var C = class { - x = (0, eval)('executed = true; new.call;'); + x = eval('executed = true; new.target;'); } -assert.throws(SyntaxError, function() { - new C(); -}); +var c = new C(); assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/test/language/expressions/class/fields-indirect-eval-err-contains-arguments.js b/test/language/expressions/class/fields-indirect-eval-err-contains-arguments.js index af0b879bc52dd31bf14f3e86f5244c82a4ca6338..7c3fa400e0082ca855ea773c6e4f801207472047 100644 --- a/test/language/expressions/class/fields-indirect-eval-err-contains-arguments.js +++ b/test/language/expressions/class/fields-indirect-eval-err-contains-arguments.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-arguments.case -// - src/class-fields/initializer-eval/cls-expr-fields-indirect-eval.template +// - src/class-fields/initializer-eval-arguments/cls-expr-fields-indirect-eval.template /*--- description: error if `arguments` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer diff --git a/test/language/expressions/class/fields-direct-eval-err-contains-newcall.js b/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js similarity index 77% rename from test/language/expressions/class/fields-direct-eval-err-contains-newcall.js rename to test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js index 78ba05a84f011d1c2a64990ee00c086baf7647d0..8f84637ef7fbeb6bd84acd55763879359079f054 100644 --- a/test/language/expressions/class/fields-direct-eval-err-contains-newcall.js +++ b/test/language/expressions/class/fields-indirect-eval-err-contains-newtarget.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: -// - src/class-fields/eval-err-contains-newcall.case -// - src/class-fields/initializer-eval/cls-expr-fields-eval.template +// - src/class-fields/eval-err-contains-newtarget.case +// - src/class-fields/initializer-eval-newtarget/cls-expr-fields-indirect-eval.template /*--- -description: error if `new.call` in StatementList of eval (direct eval) +description: error if `new.target` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -25,7 +25,7 @@ info: | var executed = false; var C = class { - x = eval('executed = true; new.call;'); + x = (0, eval)('executed = true; new.target;'); } assert.throws(SyntaxError, function() { diff --git a/test/language/statements/class/definition/fn-name-static-precedence.js b/test/language/statements/class/definition/fn-name-static-precedence.js index 0a3971e53339aa4df676c810441d70b8a0512c12..4d050b6007be37dde77ff6c1642510ac54a9e5e9 100644 --- a/test/language/statements/class/definition/fn-name-static-precedence.js +++ b/test/language/statements/class/definition/fn-name-static-precedence.js @@ -37,15 +37,18 @@ class B { assert.sameValue(typeof B.name, 'function'); +var isDefined = false; class C { static get name() { + if (isDefined) { + return 'pass'; + } $ERROR('Static `get` accessor should not be executed during definition'); } } -assert.throws(Test262Error, function() { - C.name; -}); +isDefined = true; +assert.sameValue(C.name, 'pass'); class D { static set name(_) { diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js index c131866617f06929eafb34be7abf232f5c1a7774..e357b30cfce03936b36d77af7430a115372d6db0 100644 --- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js +++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-1.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template /*--- -description: error if `super()` in StatementList of eval (direct eval) +description: error if `super()['x']` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,11 +23,11 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { - x = eval('executed = true; super();'); +class C extends A { + x = eval('executed = true; super()["x"];'); } assert.throws(SyntaxError, function() { diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js index a5b22b1fe47d02019c9a92a668e30ec6312341b5..5ada210582a02bc6bcbed44a41416190cab386fe 100644 --- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js +++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall-2.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-2.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template /*--- description: error if `super().x` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer @@ -14,8 +14,8 @@ info: | ... The remaining eval rules apply as outside a constructor, inside a method, and inside a function. - Additional Early Error Rules for Eval Outside Methods - These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition. + Additional Early Error Rules for Eval Outside Constructor Methods + These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression. ScriptBody:StatementList It is a Syntax Error if StatementList Contains SuperCall. @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = eval('executed = true; super().x;'); } diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js index d7b840a3f9cda852cc235b5b6f3987e418bc340a..f194242c6bab43f6bd9378d7a96b67deb7a2e6f5 100644 --- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js +++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-supercall.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-eval.template /*--- description: error if `super()` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = eval('executed = true; super();'); } diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js index 1332accb95dc85da9329b0039fb8c8eb208e3547..0e766f52fab4a9e01f25de65e192e22f832f17de 100644 --- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js +++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-1.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template /*--- -description: error if `super().x` in StatementList of eval (direct eval) +description: error if `super.x` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,15 +23,13 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = eval('executed = true; super.x;'); } -assert.throws(SyntaxError, function() { - new C(); -}); +new C(); -assert.sameValue(executed, false); +assert.sameValue(executed, true); diff --git a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js index 5771df04eaec9102a3df6cbe10f50a3b2d8a1d57..00b98d4877d3070814f8d639827832b096a76e0c 100644 --- a/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js +++ b/test/language/statements/class/fields-derived-cls-direct-eval-err-contains-superproperty-2.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-2.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-super-property/cls-decl-fields-eval.template /*--- -description: error if `super().x` in StatementList of eval (direct eval) +description: error if `super['x']` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,15 +23,13 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = eval('executed = true; super["x"];'); } -assert.throws(SyntaxError, function() { - new C(); -}); +new C(); -assert.sameValue(executed, false); +assert.sameValue(executed, true); diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js index 12aade8fb469146802d2e4b5c054fb11b7f633e9..41b19537398606190fa0a91bbeae215e3e6dcb0f 100644 --- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js +++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-1.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template /*--- -description: error if `super()` in StatementList of eval (indirect eval) +description: error if `super()['x']` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,15 +23,15 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { - x = (0, eval)('executed = true; super();'); +class C extends A { + x = (0, eval)('executed = true; super()["x"];'); } assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js index e3925d4419ae06e7e4d27b491a40fae6c0b2b5f8..7773dd40edd3ab525018158b822e1b1cd7de8d8b 100644 --- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js +++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall-2.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall-2.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template /*--- description: error if `super().x` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer @@ -14,8 +14,8 @@ info: | ... The remaining eval rules apply as outside a constructor, inside a method, and inside a function. - Additional Early Error Rules for Eval Outside Methods - These static semantics are applied by PerformEval when a direct eval call occurs outside of a MethodDefinition. + Additional Early Error Rules for Eval Outside Constructor Methods + These static semantics are applied by PerformEval when a direct eval call occurs outside of the constructor method of a ClassDeclaration or ClassExpression. ScriptBody:StatementList It is a Syntax Error if StatementList Contains SuperCall. @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = (0, eval)('executed = true; super().x;'); } @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js index 86851ea77cf66cef68b9a4248b09f23bf8db3df9..16c819c58d3ae6e5bb5da591151ec72cb4a91845 100644 --- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js +++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-supercall.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-supercall.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-call/cls-decl-fields-indirect-eval.template /*--- description: error if `super()` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = (0, eval)('executed = true; super();'); } @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js index 7b4b88dd69d60429a836fae933a686283a2127d2..d22196ea6d63636c994e9d7e44a8950ae3059cf5 100644 --- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js +++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-1.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-1.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template /*--- -description: error if `super().x` in StatementList of eval (indirect eval) +description: error if `super.x` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = (0, eval)('executed = true; super.x;'); } @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js index e1faa71978a592cbacf1bf355430bd9b6f429601..f006795f1ef0bf1f935bfacfcebb554cc5ca7404 100644 --- a/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js +++ b/test/language/statements/class/fields-derived-cls-indirect-eval-err-contains-superproperty-2.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-superproperty-2.case -// - src/class-fields/initializer-eval-super/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-super-property/cls-decl-fields-indirect-eval.template /*--- -description: error if `super().x` in StatementList of eval (indirect eval) +description: error if `super['x']` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -23,10 +23,10 @@ info: | ---*/ -class A = {} +class A {} var executed = false; -class C extends A = { +class C extends A { x = (0, eval)('executed = true; super["x"];'); } @@ -34,4 +34,4 @@ assert.throws(SyntaxError, function() { new C(); }); -assert.sameValue(executed, true); +assert.sameValue(executed, false); diff --git a/test/language/statements/class/fields-direct-eval-err-contains-arguments.js b/test/language/statements/class/fields-direct-eval-err-contains-arguments.js index 1c231db014a90cfbc56fdc732225850f91ad6732..173fcae0614dd24c529e432636865485796fa869 100644 --- a/test/language/statements/class/fields-direct-eval-err-contains-arguments.js +++ b/test/language/statements/class/fields-direct-eval-err-contains-arguments.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-arguments.case -// - src/class-fields/initializer-eval/cls-decl-fields-eval.template +// - src/class-fields/initializer-eval-arguments/cls-decl-fields-eval.template /*--- description: error if `arguments` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer @@ -25,7 +25,7 @@ info: | var executed = false; -class C = { +class C { x = eval('executed = true; arguments;'); } diff --git a/test/language/statements/class/fields-indirect-eval-err-contains-newcall.js b/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js similarity index 73% rename from test/language/statements/class/fields-indirect-eval-err-contains-newcall.js rename to test/language/statements/class/fields-direct-eval-err-contains-newtarget.js index af595ddd1ad37b0649665f42d6335e879e8167bc..4a3babfaaaa9de273f5c474b37b0d111e6342852 100644 --- a/test/language/statements/class/fields-indirect-eval-err-contains-newcall.js +++ b/test/language/statements/class/fields-direct-eval-err-contains-newtarget.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: -// - src/class-fields/eval-err-contains-newcall.case -// - src/class-fields/initializer-eval/cls-decl-fields-indirect-eval.template +// - src/class-fields/eval-err-contains-newtarget.case +// - src/class-fields/initializer-eval-newtarget/cls-decl-fields-eval.template /*--- -description: error if `new.call` in StatementList of eval (indirect eval) +description: error if `new.target` in StatementList of eval (direct eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -24,12 +24,11 @@ info: | var executed = false; -class C = { - x = (0, eval)('executed = true; new.call;'); +class C { + x = eval('executed = true; new.target;'); } -assert.throws(SyntaxError, function() { - new C(); -}); +var c = new C(); assert.sameValue(executed, true); +assert.sameValue(c.x, undefined); diff --git a/test/language/statements/class/fields-indirect-eval-err-contains-arguments.js b/test/language/statements/class/fields-indirect-eval-err-contains-arguments.js index 49a0504560209feafd83b19c91a3bb92ec41b4b2..32c2100c9ee81d2d5dba8ef815a042acd4ef4ffd 100644 --- a/test/language/statements/class/fields-indirect-eval-err-contains-arguments.js +++ b/test/language/statements/class/fields-indirect-eval-err-contains-arguments.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/eval-err-contains-arguments.case -// - src/class-fields/initializer-eval/cls-decl-fields-indirect-eval.template +// - src/class-fields/initializer-eval-arguments/cls-decl-fields-indirect-eval.template /*--- description: error if `arguments` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer @@ -25,7 +25,7 @@ info: | var executed = false; -class C = { +class C { x = (0, eval)('executed = true; arguments;'); } diff --git a/test/language/statements/class/fields-direct-eval-err-contains-newcall.js b/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js similarity index 76% rename from test/language/statements/class/fields-direct-eval-err-contains-newcall.js rename to test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js index ebdac9dfd377c420645d545a79c04b5e69a82d9a..c1d69b70b2d7b8125e6d1fcb4bbbf5a2ab12012d 100644 --- a/test/language/statements/class/fields-direct-eval-err-contains-newcall.js +++ b/test/language/statements/class/fields-indirect-eval-err-contains-newtarget.js @@ -1,8 +1,8 @@ // This file was procedurally generated from the following sources: -// - src/class-fields/eval-err-contains-newcall.case -// - src/class-fields/initializer-eval/cls-decl-fields-eval.template +// - src/class-fields/eval-err-contains-newtarget.case +// - src/class-fields/initializer-eval-newtarget/cls-decl-fields-indirect-eval.template /*--- -description: error if `new.call` in StatementList of eval (direct eval) +description: error if `new.target` in StatementList of eval (indirect eval) esid: sec-performeval-rules-in-initializer features: [class-fields] flags: [generated] @@ -24,8 +24,8 @@ info: | var executed = false; -class C = { - x = eval('executed = true; new.call;'); +class C { + x = (0, eval)('executed = true; new.target;'); } assert.throws(SyntaxError, function() {