From 076ecc38c62f83816d44663f1f96cb5017d72ba8 Mon Sep 17 00:00:00 2001 From: Leo Balter Date: Fri, 10 Nov 2017 15:06:00 -0500 Subject: [PATCH] Fix bugs reported in #1338 (#1339) * Accessing `ta[0]` throws a TypeError. * Fix array indices starting at 0 and property references * Fix classfields templates for properly checking static propnames. * Generate tests * `assert.equal` is not defined * Add missing includes * Generate tests * typo s/Avalue/42/ * fix whitespace * Add missing var for strict mode * Expand generated class fields tests for forbidden computed property name values Ref https://github.com/tc39/test262/pull/1339#issuecomment-342830243 * derived classes have access to private names in base classes, if private names are in scope --- ...ls-decl-after-same-line-async-gen.template | 1 + ...decl-after-same-line-async-method.template | 1 + .../cls-decl-after-same-line-gen.template | 1 + .../cls-decl-after-same-line-method.template | 1 + ...-after-same-line-static-async-gen.template | 1 + ...ter-same-line-static-async-method.template | 1 + ...s-decl-after-same-line-static-gen.template | 1 + ...ecl-after-same-line-static-method.template | 1 + .../cls-decl-multiple-definitions.template | 1 + ...decl-multiple-stacked-definitions.template | 1 + .../cls-decl-new-no-sc-line-method.template | 1 + .../cls-decl-new-sc-line-generator.template | 1 + .../cls-decl-new-sc-line-method.template | 1 + .../cls-decl-same-line-generator.template | 1 + .../cls-decl-same-line-method.template | 1 + ...ls-expr-after-same-line-async-gen.template | 1 + ...expr-after-same-line-async-method.template | 1 + .../cls-expr-after-same-line-gen.template | 1 + .../cls-expr-after-same-line-method.template | 1 + ...-after-same-line-static-async-gen.template | 1 + ...ter-same-line-static-async-method.template | 1 + ...s-expr-after-same-line-static-gen.template | 1 + ...xpr-after-same-line-static-method.template | 1 + .../cls-expr-multiple-definitions.template | 1 + ...expr-multiple-stacked-definitions.template | 1 + .../cls-expr-new-no-sc-line-method.template | 1 + .../cls-expr-new-sc-line-generator.template | 1 + .../cls-expr-new-sc-line-method.template | 1 + .../cls-expr-same-line-generator.template | 1 + .../cls-expr-same-line-method.template | 1 + .../cls-decl-static-literal-name.template | 21 ++++++ .../cls-decl-static-string-name.template | 22 ++++++ .../cls-decl-static-variable-name.template | 23 ++++++ .../cls-expr-static-literal-name.template | 21 ++++++ .../cls-expr-static-string-name.template | 22 ++++++ .../cls-expr-static-variable-name.template | 23 ++++++ .../cls-decl-computed-name.template | 3 +- .../cls-decl-literal-name.template | 2 +- .../cls-decl-string-name.template | 2 +- .../cls-decl-variable-name.template | 3 +- .../cls-expr-computed-name.template | 7 +- .../cls-expr-literal-name.template | 4 +- .../cls-expr-string-name.template | 4 +- .../cls-expr-variable-name.template | 7 +- .../static-propname-constructor.case | 4 +- .../static-propname-prototype.case | 4 +- .../tonumber-value-detached-buffer.js | 4 +- .../Set/tonumber-value-detached-buffer.js | 4 +- ...ields-after-same-line-gen-private-names.js | 1 + ...fter-same-line-gen-static-private-names.js | 1 + ...ds-after-same-line-method-private-names.js | 1 + ...r-same-line-method-static-private-names.js | 1 + ...ame-line-static-async-gen-private-names.js | 1 + ...e-static-async-gen-static-private-names.js | 1 + ...-line-static-async-method-private-names.js | 1 + ...tatic-async-method-static-private-names.js | 1 + ...fter-same-line-static-gen-private-names.js | 1 + ...me-line-static-gen-static-private-names.js | 1 + ...r-same-line-static-method-private-names.js | 1 + ...line-static-method-static-private-names.js | 1 + .../expressions/class/fields-asi-5.js | 14 ++-- ...elds-computed-name-propname-constructor.js | 7 +- ...mputed-name-static-propname-constructor.js | 44 ++++++------ ...computed-name-static-propname-prototype.js | 72 +++++++++++++------ ...uted-variable-name-propname-constructor.js | 7 +- ...riable-name-static-propname-constructor.js | 9 +-- ...variable-name-static-propname-prototype.js | 9 +-- ...ields-literal-name-propname-constructor.js | 4 +- ...iteral-name-static-propname-constructor.js | 4 +- ...-literal-name-static-propname-prototype.js | 4 +- ...elds-multiple-definitions-private-names.js | 1 + ...ltiple-definitions-static-private-names.js | 1 + ...tiple-stacked-definitions-private-names.js | 1 + ...tacked-definitions-static-private-names.js | 1 + ...lds-new-no-sc-line-method-private-names.js | 1 + ...-no-sc-line-method-static-private-names.js | 1 + .../fields-new-sc-line-gen-private-names.js | 1 + ...ds-new-sc-line-gen-static-private-names.js | 1 + ...fields-new-sc-line-method-private-names.js | 1 + ...new-sc-line-method-static-private-names.js | 1 + ...ields-same-line-async-gen-private-names.js | 1 + ...ame-line-async-gen-static-private-names.js | 1 + ...ds-same-line-async-method-private-names.js | 1 + ...-line-async-method-static-private-names.js | 1 + .../fields-same-line-gen-private-names.js | 1 + ...elds-same-line-gen-static-private-names.js | 1 + .../fields-same-line-method-private-names.js | 1 + ...s-same-line-method-static-private-names.js | 1 + ...fields-string-name-propname-constructor.js | 4 +- ...string-name-static-propname-constructor.js | 4 +- ...s-string-name-static-propname-prototype.js | 4 +- .../privatename-valid-no-earlyerr.js | 2 +- ...ields-after-same-line-gen-private-names.js | 1 + ...fter-same-line-gen-static-private-names.js | 1 + ...ds-after-same-line-method-private-names.js | 1 + ...r-same-line-method-static-private-names.js | 1 + ...ame-line-static-async-gen-private-names.js | 1 + ...e-static-async-gen-static-private-names.js | 1 + ...-line-static-async-method-private-names.js | 1 + ...tatic-async-method-static-private-names.js | 1 + ...fter-same-line-static-gen-private-names.js | 1 + ...me-line-static-gen-static-private-names.js | 1 + ...r-same-line-static-method-private-names.js | 1 + ...line-static-method-static-private-names.js | 1 + .../language/statements/class/fields-asi-5.js | 15 ++-- ...elds-computed-name-propname-constructor.js | 3 +- ...mputed-name-static-propname-constructor.js | 42 +++++------ ...computed-name-static-propname-prototype.js | 72 +++++++++++++------ ...uted-variable-name-propname-constructor.js | 3 +- ...riable-name-static-propname-constructor.js | 9 +-- ...variable-name-static-propname-prototype.js | 9 +-- ...ields-literal-name-propname-constructor.js | 2 +- ...iteral-name-static-propname-constructor.js | 2 +- ...-literal-name-static-propname-prototype.js | 2 +- ...elds-multiple-definitions-private-names.js | 1 + ...ltiple-definitions-static-private-names.js | 1 + ...tiple-stacked-definitions-private-names.js | 1 + ...tacked-definitions-static-private-names.js | 1 + ...lds-new-no-sc-line-method-private-names.js | 1 + ...-no-sc-line-method-static-private-names.js | 1 + .../fields-new-sc-line-gen-private-names.js | 1 + ...ds-new-sc-line-gen-static-private-names.js | 1 + ...fields-new-sc-line-method-private-names.js | 1 + ...new-sc-line-method-static-private-names.js | 1 + ...ields-same-line-async-gen-private-names.js | 1 + ...ame-line-async-gen-static-private-names.js | 1 + ...ds-same-line-async-method-private-names.js | 1 + ...-line-async-method-static-private-names.js | 1 + .../fields-same-line-gen-private-names.js | 1 + ...elds-same-line-gen-static-private-names.js | 1 + .../fields-same-line-method-private-names.js | 1 + ...s-same-line-method-static-private-names.js | 1 + ...fields-string-name-propname-constructor.js | 2 +- ...string-name-static-propname-constructor.js | 2 +- ...s-string-name-static-propname-prototype.js | 2 +- .../class/privatefieldget-success-5.js | 2 +- .../class/privatefieldget-typeerror-3.js | 10 ++- .../class/privatefieldget-typeerror-4.js | 4 +- .../class/privatefieldset-typeerror-3.js | 23 ++++-- .../class/privatefieldset-typeerror-4.js | 4 +- .../class/privatename-valid-no-earlyerr.js | 2 +- 141 files changed, 481 insertions(+), 187 deletions(-) create mode 100644 src/class-fields/propname-error-static/cls-decl-static-literal-name.template create mode 100644 src/class-fields/propname-error-static/cls-decl-static-string-name.template create mode 100644 src/class-fields/propname-error-static/cls-decl-static-variable-name.template create mode 100644 src/class-fields/propname-error-static/cls-expr-static-literal-name.template create mode 100644 src/class-fields/propname-error-static/cls-expr-static-string-name.template create mode 100644 src/class-fields/propname-error-static/cls-expr-static-variable-name.template diff --git a/src/class-fields/default/cls-decl-after-same-line-async-gen.template b/src/class-fields/default/cls-decl-after-same-line-async-gen.template index 2b7019564c..81d3548cf8 100644 --- a/src/class-fields/default/cls-decl-after-same-line-async-gen.template +++ b/src/class-fields/default/cls-decl-after-same-line-async-gen.template @@ -7,6 +7,7 @@ name: field definitions after an async generator in the same line features: [class-fields, async-iteration] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-async-method.template b/src/class-fields/default/cls-decl-after-same-line-async-method.template index 4834b53fc5..62b48966f4 100644 --- a/src/class-fields/default/cls-decl-after-same-line-async-method.template +++ b/src/class-fields/default/cls-decl-after-same-line-async-method.template @@ -7,6 +7,7 @@ name: field definitions after an async method in the same line features: [class-fields, async-functions] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-gen.template b/src/class-fields/default/cls-decl-after-same-line-gen.template index 635294c5df..7ca401a7cc 100644 --- a/src/class-fields/default/cls-decl-after-same-line-gen.template +++ b/src/class-fields/default/cls-decl-after-same-line-gen.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-after-same-line-gen- name: field definitions after a generator in the same line features: [generators, class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-method.template b/src/class-fields/default/cls-decl-after-same-line-method.template index 3ad70efd6f..ab59c5bb94 100644 --- a/src/class-fields/default/cls-decl-after-same-line-method.template +++ b/src/class-fields/default/cls-decl-after-same-line-method.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-after-same-line-method- name: field definitions after a method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-static-async-gen.template b/src/class-fields/default/cls-decl-after-same-line-static-async-gen.template index 60176379ae..68d9687cdd 100644 --- a/src/class-fields/default/cls-decl-after-same-line-static-async-gen.template +++ b/src/class-fields/default/cls-decl-after-same-line-static-async-gen.template @@ -7,6 +7,7 @@ name: field definitions after a static async generator in the same line features: [class-fields, async-iteration] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-static-async-method.template b/src/class-fields/default/cls-decl-after-same-line-static-async-method.template index 360df4a7f9..5b5bb56a1d 100644 --- a/src/class-fields/default/cls-decl-after-same-line-static-async-method.template +++ b/src/class-fields/default/cls-decl-after-same-line-static-async-method.template @@ -7,6 +7,7 @@ name: field definitions after a static async method in the same line features: [class-fields, async-functions] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-static-gen.template b/src/class-fields/default/cls-decl-after-same-line-static-gen.template index 2a9fdff3a0..1c9137c271 100644 --- a/src/class-fields/default/cls-decl-after-same-line-static-gen.template +++ b/src/class-fields/default/cls-decl-after-same-line-static-gen.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-after-same-line-static-gen- name: field definitions after a static generator in the same line features: [generators, class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-after-same-line-static-method.template b/src/class-fields/default/cls-decl-after-same-line-static-method.template index 568b3c5647..2d13512658 100644 --- a/src/class-fields/default/cls-decl-after-same-line-static-method.template +++ b/src/class-fields/default/cls-decl-after-same-line-static-method.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-after-same-line-static-method- name: field definitions after a static method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-multiple-definitions.template b/src/class-fields/default/cls-decl-multiple-definitions.template index 5671a0b6c4..583c8f3770 100644 --- a/src/class-fields/default/cls-decl-multiple-definitions.template +++ b/src/class-fields/default/cls-decl-multiple-definitions.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-multiple-definitions- name: multiple fields definitions features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-multiple-stacked-definitions.template b/src/class-fields/default/cls-decl-multiple-stacked-definitions.template index 36515109ea..7c95c62ff1 100644 --- a/src/class-fields/default/cls-decl-multiple-stacked-definitions.template +++ b/src/class-fields/default/cls-decl-multiple-stacked-definitions.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-multiple-stacked-definitions- name: multiple stacked fields definitions through ASI features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-new-no-sc-line-method.template b/src/class-fields/default/cls-decl-new-no-sc-line-method.template index 56037a513a..630d9c51e2 100644 --- a/src/class-fields/default/cls-decl-new-no-sc-line-method.template +++ b/src/class-fields/default/cls-decl-new-no-sc-line-method.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-new-no-sc-line-method- name: field definitions followed by a method in a new line without a semicolon features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-new-sc-line-generator.template b/src/class-fields/default/cls-decl-new-sc-line-generator.template index 40098a7810..b347c09b92 100644 --- a/src/class-fields/default/cls-decl-new-sc-line-generator.template +++ b/src/class-fields/default/cls-decl-new-sc-line-generator.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-new-sc-line-gen- name: field definitions followed by a method in a new line with a semicolon features: [class-fields, generators] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-new-sc-line-method.template b/src/class-fields/default/cls-decl-new-sc-line-method.template index 6f56356466..4f714e29f8 100644 --- a/src/class-fields/default/cls-decl-new-sc-line-method.template +++ b/src/class-fields/default/cls-decl-new-sc-line-method.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-new-sc-line-method- name: field definitions followed by a method in a new line with a semicolon features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-same-line-generator.template b/src/class-fields/default/cls-decl-same-line-generator.template index 182d9df50d..420268b69d 100644 --- a/src/class-fields/default/cls-decl-same-line-generator.template +++ b/src/class-fields/default/cls-decl-same-line-generator.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-same-line-gen- name: field definitions followed by a generator method in the same line features: [class-fields, generators] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-decl-same-line-method.template b/src/class-fields/default/cls-decl-same-line-method.template index c94c864bdd..3b1be5f583 100644 --- a/src/class-fields/default/cls-decl-same-line-method.template +++ b/src/class-fields/default/cls-decl-same-line-method.template @@ -6,6 +6,7 @@ path: language/statements/class/fields-same-line-method- name: field definitions followed by a method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ class C { diff --git a/src/class-fields/default/cls-expr-after-same-line-async-gen.template b/src/class-fields/default/cls-expr-after-same-line-async-gen.template index 3a1a6f4630..a86b3256ad 100644 --- a/src/class-fields/default/cls-expr-after-same-line-async-gen.template +++ b/src/class-fields/default/cls-expr-after-same-line-async-gen.template @@ -7,6 +7,7 @@ name: field definitions after an async generator in the same line features: [class-fields, async-iteration] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-async-method.template b/src/class-fields/default/cls-expr-after-same-line-async-method.template index 87c137ce2d..f1a0f26956 100644 --- a/src/class-fields/default/cls-expr-after-same-line-async-method.template +++ b/src/class-fields/default/cls-expr-after-same-line-async-method.template @@ -7,6 +7,7 @@ name: field definitions after an async method in the same line features: [class-fields, async-functions] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-gen.template b/src/class-fields/default/cls-expr-after-same-line-gen.template index 58aa427d3a..1434038dfe 100644 --- a/src/class-fields/default/cls-expr-after-same-line-gen.template +++ b/src/class-fields/default/cls-expr-after-same-line-gen.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-after-same-line-gen- name: field definitions after a generator in the same line features: [generators, class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-method.template b/src/class-fields/default/cls-expr-after-same-line-method.template index d9e6703d6a..9f25e8b48d 100644 --- a/src/class-fields/default/cls-expr-after-same-line-method.template +++ b/src/class-fields/default/cls-expr-after-same-line-method.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-after-same-line-method- name: field definitions after a method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-static-async-gen.template b/src/class-fields/default/cls-expr-after-same-line-static-async-gen.template index f19896d7af..bda88adcc6 100644 --- a/src/class-fields/default/cls-expr-after-same-line-static-async-gen.template +++ b/src/class-fields/default/cls-expr-after-same-line-static-async-gen.template @@ -7,6 +7,7 @@ name: field definitions after a static async generator in the same line features: [class-fields, async-iteration] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-static-async-method.template b/src/class-fields/default/cls-expr-after-same-line-static-async-method.template index 0b0ae19ec4..f9e61dc7fc 100644 --- a/src/class-fields/default/cls-expr-after-same-line-static-async-method.template +++ b/src/class-fields/default/cls-expr-after-same-line-static-async-method.template @@ -7,6 +7,7 @@ name: field definitions after a static async method in the same line features: [class-fields, async-functions] flags: [async] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-static-gen.template b/src/class-fields/default/cls-expr-after-same-line-static-gen.template index 1eff6019a1..278275a308 100644 --- a/src/class-fields/default/cls-expr-after-same-line-static-gen.template +++ b/src/class-fields/default/cls-expr-after-same-line-static-gen.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-after-same-line-static-gen- name: field definitions after a static generator in the same line features: [generators, class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-after-same-line-static-method.template b/src/class-fields/default/cls-expr-after-same-line-static-method.template index 1621379473..2b6f3e4dd9 100644 --- a/src/class-fields/default/cls-expr-after-same-line-static-method.template +++ b/src/class-fields/default/cls-expr-after-same-line-static-method.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-after-same-line-static-method- name: field definitions after a static method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-multiple-definitions.template b/src/class-fields/default/cls-expr-multiple-definitions.template index 8a786bf9e5..00c2175eb0 100644 --- a/src/class-fields/default/cls-expr-multiple-definitions.template +++ b/src/class-fields/default/cls-expr-multiple-definitions.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-multiple-definitions- name: multiple fields definitions features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-multiple-stacked-definitions.template b/src/class-fields/default/cls-expr-multiple-stacked-definitions.template index a1c53aee19..dd920d97e6 100644 --- a/src/class-fields/default/cls-expr-multiple-stacked-definitions.template +++ b/src/class-fields/default/cls-expr-multiple-stacked-definitions.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-multiple-stacked-definitions- name: multiple stacked fields definitions through ASI features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-new-no-sc-line-method.template b/src/class-fields/default/cls-expr-new-no-sc-line-method.template index 50e6762ada..320f626823 100644 --- a/src/class-fields/default/cls-expr-new-no-sc-line-method.template +++ b/src/class-fields/default/cls-expr-new-no-sc-line-method.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-new-no-sc-line-method- name: field definitions followed by a method in a new line without a semicolon features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-new-sc-line-generator.template b/src/class-fields/default/cls-expr-new-sc-line-generator.template index 1433173685..e956c11b60 100644 --- a/src/class-fields/default/cls-expr-new-sc-line-generator.template +++ b/src/class-fields/default/cls-expr-new-sc-line-generator.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-new-sc-line-gen- name: field definitions followed by a method in a new line with a semicolon features: [class-fields, generators] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-new-sc-line-method.template b/src/class-fields/default/cls-expr-new-sc-line-method.template index 3e7291ad66..8be8ce2edc 100644 --- a/src/class-fields/default/cls-expr-new-sc-line-method.template +++ b/src/class-fields/default/cls-expr-new-sc-line-method.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-new-sc-line-method- name: field definitions followed by a method in a new line with a semicolon features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-same-line-generator.template b/src/class-fields/default/cls-expr-same-line-generator.template index c6ee64851f..286d60af3f 100644 --- a/src/class-fields/default/cls-expr-same-line-generator.template +++ b/src/class-fields/default/cls-expr-same-line-generator.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-same-line-gen- name: field definitions followed by a generator method in the same line features: [class-fields, generators] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/default/cls-expr-same-line-method.template b/src/class-fields/default/cls-expr-same-line-method.template index 4c9602cafc..d565e5c5e8 100644 --- a/src/class-fields/default/cls-expr-same-line-method.template +++ b/src/class-fields/default/cls-expr-same-line-method.template @@ -6,6 +6,7 @@ path: language/expressions/class/fields-same-line-method- name: field definitions followed by a method in the same line features: [class-fields] esid: prod-FieldDefinition +includes: [propertyHelper.js] ---*/ var C = class { diff --git a/src/class-fields/propname-error-static/cls-decl-static-literal-name.template b/src/class-fields/propname-error-static/cls-decl-static-literal-name.template new file mode 100644 index 0000000000..30f68ad825 --- /dev/null +++ b/src/class-fields/propname-error-static/cls-decl-static-literal-name.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-class-definitions-static-semantics-early-errors +path: language/statements/class/fields-literal-name- +name: early error -- PropName of IdentifierName is forbidden value +negative: + type: SyntaxError + phase: early +info: | + Static Semantics: PropName + LiteralPropertyName : IdentifierName + Return StringValue of IdentifierName. +---*/ + +throw "Test262: This statement should not be evaluated."; + +class C { + static /*{ propname }*/; +} diff --git a/src/class-fields/propname-error-static/cls-decl-static-string-name.template b/src/class-fields/propname-error-static/cls-decl-static-string-name.template new file mode 100644 index 0000000000..f08d3cb349 --- /dev/null +++ b/src/class-fields/propname-error-static/cls-decl-static-string-name.template @@ -0,0 +1,22 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-class-definitions-static-semantics-early-errors +path: language/statements/class/fields-string-name- +name: early error -- PropName of StringLiteral is forbidden value +negative: + type: SyntaxError + phase: early +info: | + Static Semantics: PropName + ... + LiteralPropertyName : StringLiteral + Return the String value whose code units are the SV of the StringLiteral. +---*/ + +throw "Test262: This statement should not be evaluated."; + +class C { + static '/*{ propname }*/'; +} diff --git a/src/class-fields/propname-error-static/cls-decl-static-variable-name.template b/src/class-fields/propname-error-static/cls-decl-static-variable-name.template new file mode 100644 index 0000000000..1f9be8d27c --- /dev/null +++ b/src/class-fields/propname-error-static/cls-decl-static-variable-name.template @@ -0,0 +1,23 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-class-definitions-static-semantics-early-errors +path: language/statements/class/fields-computed-variable-name- +name: no early error -- PropName of ComputedPropertyName not forbidden value +info: | + Static Semantics: PropName + ... + ComputedPropertyName : [ AssignmentExpression ] + Return empty. +---*/ + +var /*{ propname }*/ = "foo"; +class C { + static [/*{ propname }*/]; +} + +assert.sameValue(C.hasOwnProperty("foo"), true); + +var c = new C(); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/src/class-fields/propname-error-static/cls-expr-static-literal-name.template b/src/class-fields/propname-error-static/cls-expr-static-literal-name.template new file mode 100644 index 0000000000..d11b9c43f3 --- /dev/null +++ b/src/class-fields/propname-error-static/cls-expr-static-literal-name.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-class-definitions-static-semantics-early-errors +path: language/expressions/class/fields-literal-name- +name: early error -- PropName of IdentifierName is forbidden +negative: + type: SyntaxError + phase: early +info: | + Static Semantics: PropName + LiteralPropertyName : IdentifierName + Return StringValue of IdentifierName. +---*/ + +throw "Test262: This statement should not be evaluated."; + +var C = class { + static /*{ propname }*/; +}; diff --git a/src/class-fields/propname-error-static/cls-expr-static-string-name.template b/src/class-fields/propname-error-static/cls-expr-static-string-name.template new file mode 100644 index 0000000000..6c1a225ed8 --- /dev/null +++ b/src/class-fields/propname-error-static/cls-expr-static-string-name.template @@ -0,0 +1,22 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-class-definitions-static-semantics-early-errors +path: language/expressions/class/fields-string-name- +name: early error -- PropName of StringLiteral is forbidden +negative: + type: SyntaxError + phase: early +info: | + Static Semantics: PropName + ... + LiteralPropertyName : StringLiteral + Return the String value whose code units are the SV of the StringLiteral. +---*/ + +throw "Test262: This statement should not be evaluated."; + +var C = class { + static '/*{ propname }*/'; +}; diff --git a/src/class-fields/propname-error-static/cls-expr-static-variable-name.template b/src/class-fields/propname-error-static/cls-expr-static-variable-name.template new file mode 100644 index 0000000000..8821ead504 --- /dev/null +++ b/src/class-fields/propname-error-static/cls-expr-static-variable-name.template @@ -0,0 +1,23 @@ +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-class-definitions-static-semantics-early-errors +path: language/expressions/class/fields-computed-variable-name- +name: no early error -- PropName of ComputedPropertyName not forbidden value +info: | + Static Semantics: PropName + ... + ComputedPropertyName : [ AssignmentExpression ] + Return empty. +---*/ + +var /*{ propname }*/ = 'foo'; +var C = class { + static [/*{ propname }*/]; +}; + +assert.sameValue(C.hasOwnProperty("foo"), true); + +var c = new C(); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/src/class-fields/propname-error/cls-decl-computed-name.template b/src/class-fields/propname-error/cls-decl-computed-name.template index 406a209707..547750ae06 100644 --- a/src/class-fields/propname-error/cls-decl-computed-name.template +++ b/src/class-fields/propname-error/cls-decl-computed-name.template @@ -14,9 +14,10 @@ info: | var x = "/*{ propname }*/"; class C { - /*{ static }*/ [x]; + [x]; } var c = new C(); assert.sameValue(c.hasOwnProperty("/*{ propname }*/"), true); +assert.sameValue(C.hasOwnProperty("/*{ propname }*/"), false); diff --git a/src/class-fields/propname-error/cls-decl-literal-name.template b/src/class-fields/propname-error/cls-decl-literal-name.template index 3c4ce9e9e7..4428fec106 100644 --- a/src/class-fields/propname-error/cls-decl-literal-name.template +++ b/src/class-fields/propname-error/cls-decl-literal-name.template @@ -17,5 +17,5 @@ info: | throw "Test262: This statement should not be evaluated."; class C { - /*{ static }*/ /*{ propname }*/; + /*{ propname }*/; } diff --git a/src/class-fields/propname-error/cls-decl-string-name.template b/src/class-fields/propname-error/cls-decl-string-name.template index 743f20f744..85f116bc15 100644 --- a/src/class-fields/propname-error/cls-decl-string-name.template +++ b/src/class-fields/propname-error/cls-decl-string-name.template @@ -18,5 +18,5 @@ info: | throw "Test262: This statement should not be evaluated."; class C { - /*{ static }*/ '/*{ propname }*/'; + '/*{ propname }*/'; } diff --git a/src/class-fields/propname-error/cls-decl-variable-name.template b/src/class-fields/propname-error/cls-decl-variable-name.template index cbda5b8319..ade7741a30 100644 --- a/src/class-fields/propname-error/cls-decl-variable-name.template +++ b/src/class-fields/propname-error/cls-decl-variable-name.template @@ -14,9 +14,10 @@ info: | var /*{ propname }*/ = 'foo'; class C { - /*{ static }*/ [/*{ propname }*/]; + [/*{ propname }*/]; } var c = new C(); assert.sameValue(c.hasOwnProperty("foo"), true); +assert.sameValue(C.hasOwnProperty("foo"), false); diff --git a/src/class-fields/propname-error/cls-expr-computed-name.template b/src/class-fields/propname-error/cls-expr-computed-name.template index e509263eea..2abdbb6d5b 100644 --- a/src/class-fields/propname-error/cls-expr-computed-name.template +++ b/src/class-fields/propname-error/cls-expr-computed-name.template @@ -14,9 +14,10 @@ info: | var x = "/*{ propname }*/"; var C = class { - /*{ static }*/ [x]; -} + [x]; +}; var c = new C(); - assert.sameValue(c.hasOwnProperty("/*{ propname }*/"), true); + +assert.sameValue(C.hasOwnProperty("/*{ propname }*/"), false); diff --git a/src/class-fields/propname-error/cls-expr-literal-name.template b/src/class-fields/propname-error/cls-expr-literal-name.template index bd87b81d2a..1051b99e37 100644 --- a/src/class-fields/propname-error/cls-expr-literal-name.template +++ b/src/class-fields/propname-error/cls-expr-literal-name.template @@ -17,5 +17,5 @@ info: | throw "Test262: This statement should not be evaluated."; var C = class { - /*{ static }*/ /*{ propname }*/; -} + /*{ propname }*/; +}; diff --git a/src/class-fields/propname-error/cls-expr-string-name.template b/src/class-fields/propname-error/cls-expr-string-name.template index 189a1bd80f..91da7e5fde 100644 --- a/src/class-fields/propname-error/cls-expr-string-name.template +++ b/src/class-fields/propname-error/cls-expr-string-name.template @@ -18,5 +18,5 @@ info: | throw "Test262: This statement should not be evaluated."; var C = class { - /*{ static }*/ '/*{ propname }*/'; -} + '/*{ propname }*/'; +}; diff --git a/src/class-fields/propname-error/cls-expr-variable-name.template b/src/class-fields/propname-error/cls-expr-variable-name.template index 50b255197f..1435862de5 100644 --- a/src/class-fields/propname-error/cls-expr-variable-name.template +++ b/src/class-fields/propname-error/cls-expr-variable-name.template @@ -14,9 +14,10 @@ info: | var /*{ propname }*/ = 'foo'; var C = class { - /*{ static }*/ [/*{ propname }*/]; -} + [/*{ propname }*/]; +}; var c = new C(); - assert.sameValue(c.hasOwnProperty("foo"), true); + +assert.sameValue(C.hasOwnProperty("foo"), false); diff --git a/src/class-fields/static-propname-constructor.case b/src/class-fields/static-propname-constructor.case index ff3d00af6a..b76be8ebb4 100644 --- a/src/class-fields/static-propname-constructor.case +++ b/src/class-fields/static-propname-constructor.case @@ -11,10 +11,8 @@ info: | ClassElement : staticFieldDefinition; It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". features: [class-fields] -template: propname-error +template: propname-error-static ---*/ -//- static -static //- propname constructor diff --git a/src/class-fields/static-propname-prototype.case b/src/class-fields/static-propname-prototype.case index 99d85ff64a..30911e9432 100644 --- a/src/class-fields/static-propname-prototype.case +++ b/src/class-fields/static-propname-prototype.case @@ -11,10 +11,8 @@ info: | ClassElement : staticFieldDefinition; It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". features: [class-fields] -template: propname-error +template: propname-error-static ---*/ -//- static -static //- propname prototype diff --git a/test/built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js b/test/built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js index 8076c74d80..9625f47ec6 100644 --- a/test/built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js +++ b/test/built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js @@ -48,6 +48,8 @@ testWithTypedArrayConstructors(function(TA) { "detaching a ArrayBuffer during defining an element of a typed array " + "viewing it should throw"); - assert.sameValue(ta[0], 17, "typed array element shouldn't be set"); + assert.throws(TypeError, function() { + ta[0]; + }); }); diff --git a/test/built-ins/TypedArrays/internals/Set/tonumber-value-detached-buffer.js b/test/built-ins/TypedArrays/internals/Set/tonumber-value-detached-buffer.js index 92565fcd33..f02fc605eb 100644 --- a/test/built-ins/TypedArrays/internals/Set/tonumber-value-detached-buffer.js +++ b/test/built-ins/TypedArrays/internals/Set/tonumber-value-detached-buffer.js @@ -40,5 +40,7 @@ testWithTypedArrayConstructors(function(TA) { "detaching a ArrayBuffer during setting an element of a typed array " + "viewing it should throw"); - assert.sameValue(ta[0], 17, "typed array element shouldn't be set"); + assert.throws(TypeError, function() { + ta[0]; + }); }); diff --git a/test/language/expressions/class/fields-after-same-line-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-gen-private-names.js index ffaa9a3ce7..ab3cb9939d 100644 --- a/test/language/expressions/class/fields-after-same-line-gen-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a generator i esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-gen-static-private-names.js b/test/language/expressions/class/fields-after-same-line-gen-static-private-names.js index 4c34ca6a24..744eb680e2 100644 --- a/test/language/expressions/class/fields-after-same-line-gen-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a generator in the s esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-method-private-names.js b/test/language/expressions/class/fields-after-same-line-method-private-names.js index 36f3fb297e..1a235f8f7c 100644 --- a/test/language/expressions/class/fields-after-same-line-method-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a method in t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-method-static-private-names.js b/test/language/expressions/class/fields-after-same-line-method-static-private-names.js index 3a382f7304..3ff4c01bd8 100644 --- a/test/language/expressions/class/fields-after-same-line-method-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a method in the same esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js index 24af08bea3..4b095a35af 100644 --- a/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static asyn esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-names.js index 70a7fbfe0a..8edf7926a5 100644 --- a/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-async-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static async gener esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js index fc503358f1..334e99437c 100644 --- a/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-async-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static asyn esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-names.js b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-names.js index 9f003c5a79..7b5fe7d5e6 100644 --- a/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-async-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static async metho esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js index cda34230e4..ae3611c55a 100644 --- a/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static gene esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-gen-static-private-names.js b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-names.js index 3737195c3e..6b26987857 100644 --- a/test/language/expressions/class/fields-after-same-line-static-gen-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static generator i esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-method-private-names.js b/test/language/expressions/class/fields-after-same-line-static-method-private-names.js index 2e8fecf222..b9fe74b0eb 100644 --- a/test/language/expressions/class/fields-after-same-line-static-method-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static meth esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-after-same-line-static-method-static-private-names.js b/test/language/expressions/class/fields-after-same-line-static-method-static-private-names.js index 35ff7f11f5..6ea4a1ae9f 100644 --- a/test/language/expressions/class/fields-after-same-line-static-method-static-private-names.js +++ b/test/language/expressions/class/fields-after-same-line-static-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static method in t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-asi-5.js b/test/language/expressions/class/fields-asi-5.js index a57fd2bb9b..a003827cd6 100644 --- a/test/language/expressions/class/fields-asi-5.js +++ b/test/language/expressions/class/fields-asi-5.js @@ -7,9 +7,9 @@ esid: sec-automatic-semicolon-insertion features: [class-fields] ---*/ -var x = 1 -var y = 2 -var z = [42] +var x = 0; +var y = 1; +var z = [42]; var C = class { a = x @@ -22,7 +22,7 @@ var C = class { var c = new C(); -assert.sameValue(c.a, true, 'a = x in z') -assert.sameValue(c.a, false, 'a = y in z') -assert.sameValue(Object.hasOwnProperty.call(c, "in"), false, "'in' interpreted as index"); -assert.sameValue(Object.hasOwnProperty.call(c, "z"), false, "'z' interpreted as variable"); +assert.sameValue(c.a, true, 'a = x in z'); +assert.sameValue(c.b, false, 'b = y in z'); +assert.sameValue(Object.hasOwnProperty.call(c, "in"), false, "'in'"); +assert.sameValue(Object.hasOwnProperty.call(c, "z"), false, "'z'"); diff --git a/test/language/expressions/class/fields-computed-name-propname-constructor.js b/test/language/expressions/class/fields-computed-name-propname-constructor.js index f5ff6b9f7f..d4fd6d12e9 100644 --- a/test/language/expressions/class/fields-computed-name-propname-constructor.js +++ b/test/language/expressions/class/fields-computed-name-propname-constructor.js @@ -24,9 +24,10 @@ info: | var x = "constructor"; var C = class { - [x]; -} + [x]; +}; var c = new C(); - assert.sameValue(c.hasOwnProperty("constructor"), true); + +assert.sameValue(C.hasOwnProperty("constructor"), false); diff --git a/test/language/expressions/class/fields-computed-name-static-propname-constructor.js b/test/language/expressions/class/fields-computed-name-static-propname-constructor.js index e9c0cb9a9e..a13e68a14b 100644 --- a/test/language/expressions/class/fields-computed-name-static-propname-constructor.js +++ b/test/language/expressions/class/fields-computed-name-static-propname-constructor.js @@ -1,32 +1,32 @@ -// This file was procedurally generated from the following sources: -// - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-expr-computed-name.template +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + /*--- -description: static class field forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value) +description: > + static class fields forbid PropName 'constructor' (no early error for + ComputedPropertyName) esid: sec-class-definitions-static-semantics-early-errors features: [class-fields] -flags: [generated] info: | - Static Semantics: PropName - ... - ComputedPropertyName : [ AssignmentExpression ] - Return empty. - - - // This test file tests the following early error: - Static Semantics: Early Errors - - ClassElement : staticFieldDefinition; - It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". + Static Semantics: PropName + ... + ComputedPropertyName : [ AssignmentExpression ] + Return empty. + + // This test file also tests the ComputedPropertyName won't trigger the + // following early error: + Static Semantics: Early Errors + ClassElement : staticFieldDefinition; + It is a Syntax Error if PropName of FieldDefinition is "prototype" or + "constructor". ---*/ - -var x = "constructor"; var C = class { - static [x]; -} + static ["constructor"]; +}; + +assert.sameValue(C.hasOwnProperty("constructor"), true); var c = new C(); - -assert.sameValue(c.hasOwnProperty("constructor"), true); +assert.sameValue(c.hasOwnProperty("constructor"), false); diff --git a/test/language/expressions/class/fields-computed-name-static-propname-prototype.js b/test/language/expressions/class/fields-computed-name-static-propname-prototype.js index adfc8c4c31..ed5d817a11 100644 --- a/test/language/expressions/class/fields-computed-name-static-propname-prototype.js +++ b/test/language/expressions/class/fields-computed-name-static-propname-prototype.js @@ -1,32 +1,58 @@ -// This file was procedurally generated from the following sources: -// - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-expr-computed-name.template +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + /*--- -description: static class fields forbid PropName 'prototype' (no early error -- PropName of ComputedPropertyName not forbidden value) -esid: sec-class-definitions-static-semantics-early-errors +description: > + Cannot redefine a non-configurable, non-writable "prototype" property +esid: runtime-semantics-class-definition-evaluation features: [class-fields] -flags: [generated] info: | - Static Semantics: PropName + // This test file also tests the ComputedPropertyName won't trigger the + // following early error: + Static Semantics: Early Errors + + ClassElement : staticFieldDefinition; + It is a Syntax Error if PropName of FieldDefinition is "prototype" or + "constructor". + + 2.13.2 Runtime Semantics: ClassDefinitionEvaluation + + ... + 21. Perform MakeConstructor(F, false, proto). + ... + 25. Else, let elements be NonConstructorMethodDefinitions of ClassBody. + 26. Let fieldRecords be a new empty List. + 26. For each ClassElement me in order from elements + a. If IsStatic of me is false, then + i. Let fields be the result of performing ClassElementEvaluation for e + with arguments proto and false. ... - ComputedPropertyName : [ AssignmentExpression ] - Return empty. + 33. Let result be InitializeStaticFields(F). + ... - - // This test file tests the following early error: - Static Semantics: Early Errors + // ClassElementEvaluation should evaluate the ComputedPropertyName - ClassElement : staticFieldDefinition; - It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". + 12.2.6.7 Runtime Semantics: Evaluation + ComputedPropertyName:[AssignmentExpression] + + 1. Let exprValue be the result of evaluating AssignmentExpression. + 2. Let propName be ? GetValue(exprValue). + 3. Return ? ToPropertyKey(propName). + + // And the Static Fields should be defined to the class + + 2.8 InitializeStaticFields(F) + + ... + 3. Let fieldRecords be the value of F's [[Fields]] internal slot. + 4. For each item fieldRecord in order from fieldRecords, + a. If fieldRecord.[[static]] is true, then + i. Perform ? DefineField(F, fieldRecord). ---*/ - -var x = "prototype"; -var C = class { - static [x]; -} - -var c = new C(); - -assert.sameValue(c.hasOwnProperty("prototype"), true); +assert.throws(TypeError, function() { + var C = class { + static ["prototype"]; + }; +}); diff --git a/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js b/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js index c7b5928723..5ce537a3a7 100644 --- a/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js +++ b/test/language/expressions/class/fields-computed-variable-name-propname-constructor.js @@ -24,9 +24,10 @@ info: | var constructor = 'foo'; var C = class { - [constructor]; -} + [constructor]; +}; var c = new C(); - assert.sameValue(c.hasOwnProperty("foo"), true); + +assert.sameValue(C.hasOwnProperty("foo"), false); diff --git a/test/language/expressions/class/fields-computed-variable-name-static-propname-constructor.js b/test/language/expressions/class/fields-computed-variable-name-static-propname-constructor.js index 07ceecee42..62278fa5e2 100644 --- a/test/language/expressions/class/fields-computed-variable-name-static-propname-constructor.js +++ b/test/language/expressions/class/fields-computed-variable-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-expr-variable-name.template +// - src/class-fields/propname-error-static/cls-expr-static-variable-name.template /*--- description: static class field forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value) esid: sec-class-definitions-static-semantics-early-errors @@ -25,8 +25,9 @@ info: | var constructor = 'foo'; var C = class { static [constructor]; -} +}; + +assert.sameValue(C.hasOwnProperty("foo"), true); var c = new C(); - -assert.sameValue(c.hasOwnProperty("foo"), true); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/test/language/expressions/class/fields-computed-variable-name-static-propname-prototype.js b/test/language/expressions/class/fields-computed-variable-name-static-propname-prototype.js index baa7002324..84d0bb0d4b 100644 --- a/test/language/expressions/class/fields-computed-variable-name-static-propname-prototype.js +++ b/test/language/expressions/class/fields-computed-variable-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-expr-variable-name.template +// - src/class-fields/propname-error-static/cls-expr-static-variable-name.template /*--- description: static class fields forbid PropName 'prototype' (no early error -- PropName of ComputedPropertyName not forbidden value) esid: sec-class-definitions-static-semantics-early-errors @@ -25,8 +25,9 @@ info: | var prototype = 'foo'; var C = class { static [prototype]; -} +}; + +assert.sameValue(C.hasOwnProperty("foo"), true); var c = new C(); - -assert.sameValue(c.hasOwnProperty("foo"), true); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/test/language/expressions/class/fields-literal-name-propname-constructor.js b/test/language/expressions/class/fields-literal-name-propname-constructor.js index 7e6f815523..55c48cc7b6 100644 --- a/test/language/expressions/class/fields-literal-name-propname-constructor.js +++ b/test/language/expressions/class/fields-literal-name-propname-constructor.js @@ -27,5 +27,5 @@ info: | throw "Test262: This statement should not be evaluated."; var C = class { - constructor; -} + constructor; +}; diff --git a/test/language/expressions/class/fields-literal-name-static-propname-constructor.js b/test/language/expressions/class/fields-literal-name-static-propname-constructor.js index 242decedcc..bf6120602c 100644 --- a/test/language/expressions/class/fields-literal-name-static-propname-constructor.js +++ b/test/language/expressions/class/fields-literal-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-expr-literal-name.template +// - src/class-fields/propname-error-static/cls-expr-static-literal-name.template /*--- description: static class field forbid PropName 'constructor' (early error -- PropName of IdentifierName is forbidden) esid: sec-class-definitions-static-semantics-early-errors @@ -28,4 +28,4 @@ throw "Test262: This statement should not be evaluated."; var C = class { static constructor; -} +}; diff --git a/test/language/expressions/class/fields-literal-name-static-propname-prototype.js b/test/language/expressions/class/fields-literal-name-static-propname-prototype.js index 8757af59ed..3f1833cd34 100644 --- a/test/language/expressions/class/fields-literal-name-static-propname-prototype.js +++ b/test/language/expressions/class/fields-literal-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-expr-literal-name.template +// - src/class-fields/propname-error-static/cls-expr-static-literal-name.template /*--- description: static class fields forbid PropName 'prototype' (early error -- PropName of IdentifierName is forbidden) esid: sec-class-definitions-static-semantics-early-errors @@ -28,4 +28,4 @@ throw "Test262: This statement should not be evaluated."; var C = class { static prototype; -} +}; diff --git a/test/language/expressions/class/fields-multiple-definitions-private-names.js b/test/language/expressions/class/fields-multiple-definitions-private-names.js index 24c1a7f4d3..eb90a06ae5 100644 --- a/test/language/expressions/class/fields-multiple-definitions-private-names.js +++ b/test/language/expressions/class/fields-multiple-definitions-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (multiple fields definitions) esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-multiple-definitions-static-private-names.js b/test/language/expressions/class/fields-multiple-definitions-static-private-names.js index c501bd1184..4239ba3373 100644 --- a/test/language/expressions/class/fields-multiple-definitions-static-private-names.js +++ b/test/language/expressions/class/fields-multiple-definitions-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (multiple fields definitions) esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js index 543a968bbb..4e1a7ea269 100644 --- a/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js +++ b/test/language/expressions/class/fields-multiple-stacked-definitions-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (multiple stacked fields definitions t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-names.js b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-names.js index 668588fdb1..8f1e21b3ea 100644 --- a/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-names.js +++ b/test/language/expressions/class/fields-multiple-stacked-definitions-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (multiple stacked fields definitions through esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js index e9dfb809d0..da4df0dd32 100644 --- a/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js +++ b/test/language/expressions/class/fields-new-no-sc-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-no-sc-line-method-static-private-names.js b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-names.js index 2417c0e000..800cae976c 100644 --- a/test/language/expressions/class/fields-new-no-sc-line-method-static-private-names.js +++ b/test/language/expressions/class/fields-new-no-sc-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-sc-line-gen-private-names.js b/test/language/expressions/class/fields-new-sc-line-gen-private-names.js index 2a3a38aafa..6e5cb623de 100644 --- a/test/language/expressions/class/fields-new-sc-line-gen-private-names.js +++ b/test/language/expressions/class/fields-new-sc-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-sc-line-gen-static-private-names.js b/test/language/expressions/class/fields-new-sc-line-gen-static-private-names.js index d3d6df8466..7c5f0694aa 100644 --- a/test/language/expressions/class/fields-new-sc-line-gen-static-private-names.js +++ b/test/language/expressions/class/fields-new-sc-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-sc-line-method-private-names.js b/test/language/expressions/class/fields-new-sc-line-method-private-names.js index ec5a05514c..2969d1432b 100644 --- a/test/language/expressions/class/fields-new-sc-line-method-private-names.js +++ b/test/language/expressions/class/fields-new-sc-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-new-sc-line-method-static-private-names.js b/test/language/expressions/class/fields-new-sc-line-method-static-private-names.js index db772d9cb5..d82b8d7d94 100644 --- a/test/language/expressions/class/fields-new-sc-line-method-static-private-names.js +++ b/test/language/expressions/class/fields-new-sc-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-async-gen-private-names.js b/test/language/expressions/class/fields-same-line-async-gen-private-names.js index 91f10dea08..eb7e66892a 100644 --- a/test/language/expressions/class/fields-same-line-async-gen-private-names.js +++ b/test/language/expressions/class/fields-same-line-async-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after an async gene esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-async-gen-static-private-names.js b/test/language/expressions/class/fields-same-line-async-gen-static-private-names.js index f4103058a0..26ec33b0c3 100644 --- a/test/language/expressions/class/fields-same-line-async-gen-static-private-names.js +++ b/test/language/expressions/class/fields-same-line-async-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after an async generator i esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-async-method-private-names.js b/test/language/expressions/class/fields-same-line-async-method-private-names.js index 2953e2086d..4c8618391e 100644 --- a/test/language/expressions/class/fields-same-line-async-method-private-names.js +++ b/test/language/expressions/class/fields-same-line-async-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after an async meth esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-async-method-static-private-names.js b/test/language/expressions/class/fields-same-line-async-method-static-private-names.js index e9eaff6fef..0268a219e0 100644 --- a/test/language/expressions/class/fields-same-line-async-method-static-private-names.js +++ b/test/language/expressions/class/fields-same-line-async-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after an async method in t esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-gen-private-names.js b/test/language/expressions/class/fields-same-line-gen-private-names.js index db78242bcd..638c2d7037 100644 --- a/test/language/expressions/class/fields-same-line-gen-private-names.js +++ b/test/language/expressions/class/fields-same-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a gener esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-gen-static-private-names.js b/test/language/expressions/class/fields-same-line-gen-static-private-names.js index 21db44d20c..35b9cc96df 100644 --- a/test/language/expressions/class/fields-same-line-gen-static-private-names.js +++ b/test/language/expressions/class/fields-same-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a generator me esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-method-private-names.js b/test/language/expressions/class/fields-same-line-method-private-names.js index 7bbab8a370..dc60f025cc 100644 --- a/test/language/expressions/class/fields-same-line-method-private-names.js +++ b/test/language/expressions/class/fields-same-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-same-line-method-static-private-names.js b/test/language/expressions/class/fields-same-line-method-static-private-names.js index 64fd72a2ef..347aed3ede 100644 --- a/test/language/expressions/class/fields-same-line-method-static-private-names.js +++ b/test/language/expressions/class/fields-same-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in th esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/expressions/class/fields-string-name-propname-constructor.js b/test/language/expressions/class/fields-string-name-propname-constructor.js index 06e0261b06..781555ee65 100644 --- a/test/language/expressions/class/fields-string-name-propname-constructor.js +++ b/test/language/expressions/class/fields-string-name-propname-constructor.js @@ -28,5 +28,5 @@ info: | throw "Test262: This statement should not be evaluated."; var C = class { - 'constructor'; -} + 'constructor'; +}; diff --git a/test/language/expressions/class/fields-string-name-static-propname-constructor.js b/test/language/expressions/class/fields-string-name-static-propname-constructor.js index bf52ad29c7..0cc4db117c 100644 --- a/test/language/expressions/class/fields-string-name-static-propname-constructor.js +++ b/test/language/expressions/class/fields-string-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-expr-string-name.template +// - src/class-fields/propname-error-static/cls-expr-static-string-name.template /*--- description: static class field forbid PropName 'constructor' (early error -- PropName of StringLiteral is forbidden) esid: sec-class-definitions-static-semantics-early-errors @@ -29,4 +29,4 @@ throw "Test262: This statement should not be evaluated."; var C = class { static 'constructor'; -} +}; diff --git a/test/language/expressions/class/fields-string-name-static-propname-prototype.js b/test/language/expressions/class/fields-string-name-static-propname-prototype.js index 69baf56845..4fa7a5deff 100644 --- a/test/language/expressions/class/fields-string-name-static-propname-prototype.js +++ b/test/language/expressions/class/fields-string-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-expr-string-name.template +// - src/class-fields/propname-error-static/cls-expr-static-string-name.template /*--- description: static class fields forbid PropName 'prototype' (early error -- PropName of StringLiteral is forbidden) esid: sec-class-definitions-static-semantics-early-errors @@ -29,4 +29,4 @@ throw "Test262: This statement should not be evaluated."; var C = class { static 'prototype'; -} +}; diff --git a/test/language/module-code/privatename-valid-no-earlyerr.js b/test/language/module-code/privatename-valid-no-earlyerr.js index 8817d14a8f..93ea02c64d 100644 --- a/test/language/module-code/privatename-valid-no-earlyerr.js +++ b/test/language/module-code/privatename-valid-no-earlyerr.js @@ -44,4 +44,4 @@ class outer { var innerclass = new outer().f(); var test = new innerclass().g(); -assert.equal(test, 42); +assert.sameValue(test, 42); diff --git a/test/language/statements/class/fields-after-same-line-gen-private-names.js b/test/language/statements/class/fields-after-same-line-gen-private-names.js index 4dc789e3ba..2f6cc0ab2a 100644 --- a/test/language/statements/class/fields-after-same-line-gen-private-names.js +++ b/test/language/statements/class/fields-after-same-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a generator i esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-gen-static-private-names.js b/test/language/statements/class/fields-after-same-line-gen-static-private-names.js index 72a274976d..79c090e06a 100644 --- a/test/language/statements/class/fields-after-same-line-gen-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a generator in the s esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-method-private-names.js b/test/language/statements/class/fields-after-same-line-method-private-names.js index f399c371c3..84a25babc2 100644 --- a/test/language/statements/class/fields-after-same-line-method-private-names.js +++ b/test/language/statements/class/fields-after-same-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a method in t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-method-static-private-names.js b/test/language/statements/class/fields-after-same-line-method-static-private-names.js index 0c18445e06..ef4f03a477 100644 --- a/test/language/statements/class/fields-after-same-line-method-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a method in the same esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js index 19c10607e8..c4e707fda2 100644 --- a/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-async-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static asyn esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-names.js index 02fef68692..c2ef8a94d4 100644 --- a/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-async-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static async gener esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js index bfe3cb9923..ae0d2fea0c 100644 --- a/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-async-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static asyn esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-async-method-static-private-names.js b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-names.js index 9b59318c79..85cc98e104 100644 --- a/test/language/statements/class/fields-after-same-line-static-async-method-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-async-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static async metho esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-gen-private-names.js b/test/language/statements/class/fields-after-same-line-static-gen-private-names.js index 8a2a3af3c2..270c8daacb 100644 --- a/test/language/statements/class/fields-after-same-line-static-gen-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static gene esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-gen-static-private-names.js b/test/language/statements/class/fields-after-same-line-static-gen-static-private-names.js index c8feba6c93..09a06f3d5c 100644 --- a/test/language/statements/class/fields-after-same-line-static-gen-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static generator i esid: prod-FieldDefinition features: [generators, class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-method-private-names.js b/test/language/statements/class/fields-after-same-line-static-method-private-names.js index 45f5e7ae74..386a9c6ef8 100644 --- a/test/language/statements/class/fields-after-same-line-static-method-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after a static meth esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-after-same-line-static-method-static-private-names.js b/test/language/statements/class/fields-after-same-line-static-method-static-private-names.js index 5062d1a9ba..5f0dbb7794 100644 --- a/test/language/statements/class/fields-after-same-line-static-method-static-private-names.js +++ b/test/language/statements/class/fields-after-same-line-static-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after a static method in t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-asi-5.js b/test/language/statements/class/fields-asi-5.js index 86bc18f882..8b2147eef0 100644 --- a/test/language/statements/class/fields-asi-5.js +++ b/test/language/statements/class/fields-asi-5.js @@ -7,9 +7,9 @@ esid: sec-automatic-semicolon-insertion features: [class-fields] ---*/ -var x = 1 -var y = 2 -var z = [42] +var x = 0; +var y = 1; +var z = [42]; class C { a = x @@ -21,7 +21,8 @@ class C { } var c = new C(); -assert.sameValue(c.a, true, 'a = x in z') -assert.sameValue(c.a, false, 'a = y in z') -assert.sameValue(Object.hasOwnProperty.call(c, "in"), false, "'in' interpreted as index"); -assert.sameValue(Object.hasOwnProperty.call(c, "z"), false, "'z' interpreted as variable"); + +assert.sameValue(c.a, true, 'a = x in z'); +assert.sameValue(c.b, false, 'b = y in z'); +assert.sameValue(Object.hasOwnProperty.call(c, "in"), false, "'in'"); +assert.sameValue(Object.hasOwnProperty.call(c, "z"), false, "'z'"); diff --git a/test/language/statements/class/fields-computed-name-propname-constructor.js b/test/language/statements/class/fields-computed-name-propname-constructor.js index 5d3b632fad..cf1f1514d5 100644 --- a/test/language/statements/class/fields-computed-name-propname-constructor.js +++ b/test/language/statements/class/fields-computed-name-propname-constructor.js @@ -24,9 +24,10 @@ info: | var x = "constructor"; class C { - [x]; + [x]; } var c = new C(); assert.sameValue(c.hasOwnProperty("constructor"), true); +assert.sameValue(C.hasOwnProperty("constructor"), false); diff --git a/test/language/statements/class/fields-computed-name-static-propname-constructor.js b/test/language/statements/class/fields-computed-name-static-propname-constructor.js index b55077f4ba..16da004710 100644 --- a/test/language/statements/class/fields-computed-name-static-propname-constructor.js +++ b/test/language/statements/class/fields-computed-name-static-propname-constructor.js @@ -1,32 +1,32 @@ -// This file was procedurally generated from the following sources: -// - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-decl-computed-name.template +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + /*--- -description: static class field forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value) +description: > + static class fields forbid PropName 'constructor' (no early error for + ComputedPropertyName) esid: sec-class-definitions-static-semantics-early-errors features: [class-fields] -flags: [generated] info: | - Static Semantics: PropName - ... - ComputedPropertyName : [ AssignmentExpression ] - Return empty. - - - // This test file tests the following early error: - Static Semantics: Early Errors - - ClassElement : staticFieldDefinition; - It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". + Static Semantics: PropName + ... + ComputedPropertyName : [ AssignmentExpression ] + Return empty. + + // This test file also tests the ComputedPropertyName won't trigger the + // following early error: + Static Semantics: Early Errors + ClassElement : staticFieldDefinition; + It is a Syntax Error if PropName of FieldDefinition is "prototype" or + "constructor". ---*/ - -var x = "constructor"; class C { - static [x]; + static ["constructor"]; } -var c = new C(); +assert.sameValue(C.hasOwnProperty("constructor"), true); -assert.sameValue(c.hasOwnProperty("constructor"), true); +var c = new C(); +assert.sameValue(c.hasOwnProperty("constructor"), false); diff --git a/test/language/statements/class/fields-computed-name-static-propname-prototype.js b/test/language/statements/class/fields-computed-name-static-propname-prototype.js index e8fd0641ed..b9d531b95c 100644 --- a/test/language/statements/class/fields-computed-name-static-propname-prototype.js +++ b/test/language/statements/class/fields-computed-name-static-propname-prototype.js @@ -1,32 +1,58 @@ -// This file was procedurally generated from the following sources: -// - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-decl-computed-name.template +// Copyright (C) 2017 Valerie Young. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + /*--- -description: static class fields forbid PropName 'prototype' (no early error -- PropName of ComputedPropertyName not forbidden value) -esid: sec-class-definitions-static-semantics-early-errors +description: > + Cannot redefine a non-configurable, non-writable "prototype" property +esid: runtime-semantics-class-definition-evaluation features: [class-fields] -flags: [generated] info: | - Static Semantics: PropName + // This test file also tests the ComputedPropertyName won't trigger the + // following early error: + Static Semantics: Early Errors + + ClassElement : staticFieldDefinition; + It is a Syntax Error if PropName of FieldDefinition is "prototype" or + "constructor". + + 2.13.2 Runtime Semantics: ClassDefinitionEvaluation + + ... + 21. Perform MakeConstructor(F, false, proto). + ... + 25. Else, let elements be NonConstructorMethodDefinitions of ClassBody. + 26. Let fieldRecords be a new empty List. + 26. For each ClassElement me in order from elements + a. If IsStatic of me is false, then + i. Let fields be the result of performing ClassElementEvaluation for e + with arguments proto and false. ... - ComputedPropertyName : [ AssignmentExpression ] - Return empty. + 33. Let result be InitializeStaticFields(F). + ... - - // This test file tests the following early error: - Static Semantics: Early Errors + // ClassElementEvaluation should evaluate the ComputedPropertyName - ClassElement : staticFieldDefinition; - It is a Syntax Error if PropName of FieldDefinition is "prototype" or "constructor". + 12.2.6.7 Runtime Semantics: Evaluation + ComputedPropertyName:[AssignmentExpression] + + 1. Let exprValue be the result of evaluating AssignmentExpression. + 2. Let propName be ? GetValue(exprValue). + 3. Return ? ToPropertyKey(propName). + + // And the Static Fields should be defined to the class + + 2.8 InitializeStaticFields(F) + + ... + 3. Let fieldRecords be the value of F's [[Fields]] internal slot. + 4. For each item fieldRecord in order from fieldRecords, + a. If fieldRecord.[[static]] is true, then + i. Perform ? DefineField(F, fieldRecord). ---*/ - -var x = "prototype"; -class C { - static [x]; -} - -var c = new C(); - -assert.sameValue(c.hasOwnProperty("prototype"), true); +assert.throws(TypeError, function() { + class C { + static ["prototype"]; + }; +}); diff --git a/test/language/statements/class/fields-computed-variable-name-propname-constructor.js b/test/language/statements/class/fields-computed-variable-name-propname-constructor.js index c538d7d2ed..161554838d 100644 --- a/test/language/statements/class/fields-computed-variable-name-propname-constructor.js +++ b/test/language/statements/class/fields-computed-variable-name-propname-constructor.js @@ -24,9 +24,10 @@ info: | var constructor = 'foo'; class C { - [constructor]; + [constructor]; } var c = new C(); assert.sameValue(c.hasOwnProperty("foo"), true); +assert.sameValue(C.hasOwnProperty("foo"), false); diff --git a/test/language/statements/class/fields-computed-variable-name-static-propname-constructor.js b/test/language/statements/class/fields-computed-variable-name-static-propname-constructor.js index 906c821aa2..f0060dacbb 100644 --- a/test/language/statements/class/fields-computed-variable-name-static-propname-constructor.js +++ b/test/language/statements/class/fields-computed-variable-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-decl-variable-name.template +// - src/class-fields/propname-error-static/cls-decl-static-variable-name.template /*--- description: static class field forbid PropName 'constructor' (no early error -- PropName of ComputedPropertyName not forbidden value) esid: sec-class-definitions-static-semantics-early-errors @@ -22,11 +22,12 @@ info: | ---*/ -var constructor = 'foo'; +var constructor = "foo"; class C { static [constructor]; } -var c = new C(); +assert.sameValue(C.hasOwnProperty("foo"), true); -assert.sameValue(c.hasOwnProperty("foo"), true); +var c = new C(); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/test/language/statements/class/fields-computed-variable-name-static-propname-prototype.js b/test/language/statements/class/fields-computed-variable-name-static-propname-prototype.js index 5de8dc2f56..4b2e7a6d15 100644 --- a/test/language/statements/class/fields-computed-variable-name-static-propname-prototype.js +++ b/test/language/statements/class/fields-computed-variable-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-decl-variable-name.template +// - src/class-fields/propname-error-static/cls-decl-static-variable-name.template /*--- description: static class fields forbid PropName 'prototype' (no early error -- PropName of ComputedPropertyName not forbidden value) esid: sec-class-definitions-static-semantics-early-errors @@ -22,11 +22,12 @@ info: | ---*/ -var prototype = 'foo'; +var prototype = "foo"; class C { static [prototype]; } -var c = new C(); +assert.sameValue(C.hasOwnProperty("foo"), true); -assert.sameValue(c.hasOwnProperty("foo"), true); +var c = new C(); +assert.sameValue(c.hasOwnProperty("foo"), false); diff --git a/test/language/statements/class/fields-literal-name-propname-constructor.js b/test/language/statements/class/fields-literal-name-propname-constructor.js index 2e8089661f..24d8347b30 100644 --- a/test/language/statements/class/fields-literal-name-propname-constructor.js +++ b/test/language/statements/class/fields-literal-name-propname-constructor.js @@ -27,5 +27,5 @@ info: | throw "Test262: This statement should not be evaluated."; class C { - constructor; + constructor; } diff --git a/test/language/statements/class/fields-literal-name-static-propname-constructor.js b/test/language/statements/class/fields-literal-name-static-propname-constructor.js index 3b7e8e66f8..0a457f87c8 100644 --- a/test/language/statements/class/fields-literal-name-static-propname-constructor.js +++ b/test/language/statements/class/fields-literal-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-decl-literal-name.template +// - src/class-fields/propname-error-static/cls-decl-static-literal-name.template /*--- description: static class field forbid PropName 'constructor' (early error -- PropName of IdentifierName is forbidden value) esid: sec-class-definitions-static-semantics-early-errors diff --git a/test/language/statements/class/fields-literal-name-static-propname-prototype.js b/test/language/statements/class/fields-literal-name-static-propname-prototype.js index 736391bee4..221c7d00a8 100644 --- a/test/language/statements/class/fields-literal-name-static-propname-prototype.js +++ b/test/language/statements/class/fields-literal-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-decl-literal-name.template +// - src/class-fields/propname-error-static/cls-decl-static-literal-name.template /*--- description: static class fields forbid PropName 'prototype' (early error -- PropName of IdentifierName is forbidden value) esid: sec-class-definitions-static-semantics-early-errors diff --git a/test/language/statements/class/fields-multiple-definitions-private-names.js b/test/language/statements/class/fields-multiple-definitions-private-names.js index b33dd70546..60a16a1a39 100644 --- a/test/language/statements/class/fields-multiple-definitions-private-names.js +++ b/test/language/statements/class/fields-multiple-definitions-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (multiple fields definitions) esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-multiple-definitions-static-private-names.js b/test/language/statements/class/fields-multiple-definitions-static-private-names.js index fe883fde24..83abefaf55 100644 --- a/test/language/statements/class/fields-multiple-definitions-static-private-names.js +++ b/test/language/statements/class/fields-multiple-definitions-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (multiple fields definitions) esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js index e9b855f9eb..9527dbaa5c 100644 --- a/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js +++ b/test/language/statements/class/fields-multiple-stacked-definitions-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (multiple stacked fields definitions t esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-multiple-stacked-definitions-static-private-names.js b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-names.js index b0bcd84f79..565165da4b 100644 --- a/test/language/statements/class/fields-multiple-stacked-definitions-static-private-names.js +++ b/test/language/statements/class/fields-multiple-stacked-definitions-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (multiple stacked fields definitions through esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-no-sc-line-method-private-names.js b/test/language/statements/class/fields-new-no-sc-line-method-private-names.js index faea882b9e..55a5aa7635 100644 --- a/test/language/statements/class/fields-new-no-sc-line-method-private-names.js +++ b/test/language/statements/class/fields-new-no-sc-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-no-sc-line-method-static-private-names.js b/test/language/statements/class/fields-new-no-sc-line-method-static-private-names.js index 4317c7914a..33edc6e0a8 100644 --- a/test/language/statements/class/fields-new-no-sc-line-method-static-private-names.js +++ b/test/language/statements/class/fields-new-no-sc-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-sc-line-gen-private-names.js b/test/language/statements/class/fields-new-sc-line-gen-private-names.js index dd4e4e4edb..8b4b1175e6 100644 --- a/test/language/statements/class/fields-new-sc-line-gen-private-names.js +++ b/test/language/statements/class/fields-new-sc-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-sc-line-gen-static-private-names.js b/test/language/statements/class/fields-new-sc-line-gen-static-private-names.js index f624f26259..d2d4423de1 100644 --- a/test/language/statements/class/fields-new-sc-line-gen-static-private-names.js +++ b/test/language/statements/class/fields-new-sc-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-sc-line-method-private-names.js b/test/language/statements/class/fields-new-sc-line-method-private-names.js index cdc9649b62..9be8323397 100644 --- a/test/language/statements/class/fields-new-sc-line-method-private-names.js +++ b/test/language/statements/class/fields-new-sc-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-new-sc-line-method-static-private-names.js b/test/language/statements/class/fields-new-sc-line-method-static-private-names.js index 89cf71314b..2c35e7108f 100644 --- a/test/language/statements/class/fields-new-sc-line-method-static-private-names.js +++ b/test/language/statements/class/fields-new-sc-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in a esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-async-gen-private-names.js b/test/language/statements/class/fields-same-line-async-gen-private-names.js index 81f89c9401..faa11d95ae 100644 --- a/test/language/statements/class/fields-same-line-async-gen-private-names.js +++ b/test/language/statements/class/fields-same-line-async-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after an async gene esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-async-gen-static-private-names.js b/test/language/statements/class/fields-same-line-async-gen-static-private-names.js index a77dcc91c0..3bb32d69a4 100644 --- a/test/language/statements/class/fields-same-line-async-gen-static-private-names.js +++ b/test/language/statements/class/fields-same-line-async-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after an async generator i esid: prod-FieldDefinition features: [class-fields, async-iteration] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-async-method-private-names.js b/test/language/statements/class/fields-same-line-async-method-private-names.js index e21a55ef96..ad89c93006 100644 --- a/test/language/statements/class/fields-same-line-async-method-private-names.js +++ b/test/language/statements/class/fields-same-line-async-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions after an async meth esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-async-method-static-private-names.js b/test/language/statements/class/fields-same-line-async-method-static-private-names.js index 1a979fe4f3..3e739c6836 100644 --- a/test/language/statements/class/fields-same-line-async-method-static-private-names.js +++ b/test/language/statements/class/fields-same-line-async-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions after an async method in t esid: prod-FieldDefinition features: [class-fields, async-functions] flags: [generated, async] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-gen-private-names.js b/test/language/statements/class/fields-same-line-gen-private-names.js index c9932a5d27..d2b1f309ff 100644 --- a/test/language/statements/class/fields-same-line-gen-private-names.js +++ b/test/language/statements/class/fields-same-line-gen-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a gener esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-gen-static-private-names.js b/test/language/statements/class/fields-same-line-gen-static-private-names.js index efd7f51e4a..ac151d626c 100644 --- a/test/language/statements/class/fields-same-line-gen-static-private-names.js +++ b/test/language/statements/class/fields-same-line-gen-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a generator me esid: prod-FieldDefinition features: [class-fields, generators] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-method-private-names.js b/test/language/statements/class/fields-same-line-method-private-names.js index 5103c757c8..5c731f9c52 100644 --- a/test/language/statements/class/fields-same-line-method-private-names.js +++ b/test/language/statements/class/fields-same-line-method-private-names.js @@ -6,6 +6,7 @@ description: static literal private names (field definitions followed by a metho esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-same-line-method-static-private-names.js b/test/language/statements/class/fields-same-line-method-static-private-names.js index 0e46dc5e76..73b5a0e554 100644 --- a/test/language/statements/class/fields-same-line-method-static-private-names.js +++ b/test/language/statements/class/fields-same-line-method-static-private-names.js @@ -6,6 +6,7 @@ description: literal private names (field definitions followed by a method in th esid: prod-FieldDefinition features: [class-fields] flags: [generated] +includes: [propertyHelper.js] info: | ClassElement: ... diff --git a/test/language/statements/class/fields-string-name-propname-constructor.js b/test/language/statements/class/fields-string-name-propname-constructor.js index 0e72cc4956..01c65d56b9 100644 --- a/test/language/statements/class/fields-string-name-propname-constructor.js +++ b/test/language/statements/class/fields-string-name-propname-constructor.js @@ -28,5 +28,5 @@ info: | throw "Test262: This statement should not be evaluated."; class C { - 'constructor'; + 'constructor'; } diff --git a/test/language/statements/class/fields-string-name-static-propname-constructor.js b/test/language/statements/class/fields-string-name-static-propname-constructor.js index ff31d8ec0a..af55e061bf 100644 --- a/test/language/statements/class/fields-string-name-static-propname-constructor.js +++ b/test/language/statements/class/fields-string-name-static-propname-constructor.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-constructor.case -// - src/class-fields/propname-error/cls-decl-string-name.template +// - src/class-fields/propname-error-static/cls-decl-static-string-name.template /*--- description: static class field forbid PropName 'constructor' (early error -- PropName of StringLiteral is forbidden value) esid: sec-class-definitions-static-semantics-early-errors diff --git a/test/language/statements/class/fields-string-name-static-propname-prototype.js b/test/language/statements/class/fields-string-name-static-propname-prototype.js index 24de80aaeb..a8b584ddf7 100644 --- a/test/language/statements/class/fields-string-name-static-propname-prototype.js +++ b/test/language/statements/class/fields-string-name-static-propname-prototype.js @@ -1,6 +1,6 @@ // This file was procedurally generated from the following sources: // - src/class-fields/static-propname-prototype.case -// - src/class-fields/propname-error/cls-decl-string-name.template +// - src/class-fields/propname-error-static/cls-decl-static-string-name.template /*--- description: static class fields forbid PropName 'prototype' (early error -- PropName of StringLiteral is forbidden value) esid: sec-class-definitions-static-semantics-early-errors diff --git a/test/language/statements/class/privatefieldget-success-5.js b/test/language/statements/class/privatefieldget-success-5.js index 9bf09e9ea4..450f5b72cb 100644 --- a/test/language/statements/class/privatefieldget-success-5.js +++ b/test/language/statements/class/privatefieldget-success-5.js @@ -37,4 +37,4 @@ var c1 = new C(); var c2 = new C(); var value = c2.f.call(c1); -assert.sameValue(value, 'Avalue'); +assert.sameValue(value, 42); diff --git a/test/language/statements/class/privatefieldget-typeerror-3.js b/test/language/statements/class/privatefieldget-typeerror-3.js index 8c1ef2748b..979ede5f2e 100644 --- a/test/language/statements/class/privatefieldget-typeerror-3.js +++ b/test/language/statements/class/privatefieldget-typeerror-3.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: TypeError when referenced private field cannot be found in `this`'s [[PrivateFieldValues]] +description: > + Referenced lexically scoped private field found in `this`'s [[PrivateFieldValues]] esid: sec-getvalue info: | GetValue ( V ) @@ -40,7 +41,7 @@ class Outer { // private field `#x` is resolvable. return class extends Outer { f() { - return this.#x; + return this.#x; } } } @@ -49,7 +50,4 @@ class Outer { var Inner = new Outer().innerclass(); var i = new Inner(); -assert.throws(TypeError, function() { - // when f() is called, the private field will not be found in Inner's `this` - i.f(); -}) +assert.sameValue(i.f(), 42); diff --git a/test/language/statements/class/privatefieldget-typeerror-4.js b/test/language/statements/class/privatefieldget-typeerror-4.js index 61f2d3a78d..fce6c7c6c5 100644 --- a/test/language/statements/class/privatefieldget-typeerror-4.js +++ b/test/language/statements/class/privatefieldget-typeerror-4.js @@ -43,8 +43,8 @@ function classfactory() { var C1 = classfactory(); var C2 = classfactory(); -c1 = new C1(); -c2 = new C2(); +var c1 = new C1(); +var c2 = new C2(); assert.throws(TypeError, function() { // when f() is called in class C1, the Private Name binding for #x in C1 will diff --git a/test/language/statements/class/privatefieldset-typeerror-3.js b/test/language/statements/class/privatefieldset-typeerror-3.js index 4a0bfabd90..4fb86cdd57 100644 --- a/test/language/statements/class/privatefieldset-typeerror-3.js +++ b/test/language/statements/class/privatefieldset-typeerror-3.js @@ -2,7 +2,8 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -description: TypeError when setting private field not in `this`'s [[PrivateFieldValues]] +description: > + Referenced lexically scoped private field found in `this`'s [[PrivateFieldValues]] esid: sec-putvalue info: | PutValue ( V, W ) @@ -40,16 +41,24 @@ class Outer { // private field `#x` is resolvable. return class extends Outer { f() { - this.#x = 1; + this.#x = 1; } } } + + value() { + return this.#x; + } } -var Inner = new Outer().innerclass(); +var outer = new Outer(); +var Inner = outer.innerclass(); var i = new Inner(); -assert.throws(TypeError, function() { - // when f() is called, the private field will not be found in Inner's `this` - i.f(); -}) +assert.sameValue(outer.value(), 42); +assert.sameValue(i.value(), 42); + +i.f(); + +assert.sameValue(outer.value(), 42, "value is set on inner class instance only"); +assert.sameValue(i.value(), 1, "value is set from inner class instance"); diff --git a/test/language/statements/class/privatefieldset-typeerror-4.js b/test/language/statements/class/privatefieldset-typeerror-4.js index d3dc0ab966..29314e8b7d 100644 --- a/test/language/statements/class/privatefieldset-typeerror-4.js +++ b/test/language/statements/class/privatefieldset-typeerror-4.js @@ -43,8 +43,8 @@ function classfactory() { var C1 = classfactory(); var C2 = classfactory(); -c1 = new C1(); -c2 = new C2(); +var c1 = new C1(); +var c2 = new C2(); assert.throws(TypeError, function() { // when f() is called in class C1, the Private Name binding for #x in C1 will diff --git a/test/language/statements/class/privatename-valid-no-earlyerr.js b/test/language/statements/class/privatename-valid-no-earlyerr.js index 3138cbd92f..8f3aa0777c 100644 --- a/test/language/statements/class/privatename-valid-no-earlyerr.js +++ b/test/language/statements/class/privatename-valid-no-earlyerr.js @@ -46,4 +46,4 @@ class outer { var innerclass = new outer().f(); var test = new innerclass().g(); -assert.equal(test, 42); +assert.sameValue(test, 42);