Title: [277197] trunk/JSTests
Revision
277197
Author
ross.kirsl...@sony.com
Date
2021-05-07 14:14:29 -0700 (Fri, 07 May 2021)

Log Message

Update test262 (2021.05.07)
https://bugs.webkit.org/show_bug.cgi?id=225536

Reviewed by Alexey Shvayka.

* test262/config.yaml:
* test262/expectations.yaml:
* test262/latest-changes-summary.txt:
* test262/test/:
* test262/test262-Revision.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/JSTests/ChangeLog (277196 => 277197)


--- trunk/JSTests/ChangeLog	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/ChangeLog	2021-05-07 21:14:29 UTC (rev 277197)
@@ -1,3 +1,16 @@
+2021-05-07  Ross Kirsling  <ross.kirsl...@sony.com>
+
+        Update test262 (2021.05.07)
+        https://bugs.webkit.org/show_bug.cgi?id=225536
+
+        Reviewed by Alexey Shvayka.
+
+        * test262/config.yaml:
+        * test262/expectations.yaml:
+        * test262/latest-changes-summary.txt:
+        * test262/test/:
+        * test262/test262-Revision.txt:
+
 2021-05-06  Mark Lam  <mark....@apple.com>
 
         Forbid further execution in jsc shell if execution is terminated.

Modified: trunk/JSTests/test262/config.yaml (277196 => 277197)


--- trunk/JSTests/test262/config.yaml	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/config.yaml	2021-05-07 21:14:29 UTC (rev 277197)
@@ -21,8 +21,11 @@
     # https://bugs.webkit.org/show_bug.cgi?id=174931
     - regexp-lookbehind
     - legacy-regexp
-
     - cleanupSome
+    # https://bugs.webkit.org/show_bug.cgi?id=221093
+    - class-fields-private-in
+    # https://bugs.webkit.org/show_bug.cgi?id=225535
+    - error-cause
   paths:
   files:
     # Slightly different formatting. We should update test262 side.

Modified: trunk/JSTests/test262/expectations.yaml (277196 => 277197)


--- trunk/JSTests/test262/expectations.yaml	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/expectations.yaml	2021-05-07 21:14:29 UTC (rev 277197)
@@ -1733,6 +1733,9 @@
 test/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js:
   default: 'Test262:AsyncTestFailure:Test262Error: Test262Error: Expected [start, tick 1, tick 2] and [start, tick 1, tick 2, catch] to have the same contents. '
   strict mode: 'Test262:AsyncTestFailure:Test262Error: Test262Error: Expected [start, tick 1, tick 2] and [start, tick 1, tick 2, catch] to have the same contents. '
+test/language/statements/for-await-of/head-lhs-async.js:
+  default: "SyntaxError: Unexpected identifier 'of'"
+  strict mode: "SyntaxError: Unexpected identifier 'of'"
 test/language/statements/for-await-of/ticks-with-async-iter-resolved-promise-and-constructor-lookup-two.js:
   default: 'Test262:AsyncTestFailure:Test262Error: Test262Error: Expected [pre, tick 1, constructor, tick 2, loop] and [pre, constructor, tick 1, loop, constructor, tick 2, post] to have the same contents. Ticks and constructor lookups'
   strict mode: 'Test262:AsyncTestFailure:Test262Error: Test262Error: Expected [pre, tick 1, constructor, tick 2, loop] and [pre, constructor, tick 1, loop, constructor, tick 2, post] to have the same contents. Ticks and constructor lookups'

Modified: trunk/JSTests/test262/latest-changes-summary.txt (277196 => 277197)


--- trunk/JSTests/test262/latest-changes-summary.txt	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/latest-changes-summary.txt	2021-05-07 21:14:29 UTC (rev 277197)
@@ -1,9 +1,67 @@
-A test/intl402/DisplayNames/options-getoptionsobject.js
-R051 test/intl402/ListFormat/constructor/constructor/options-toobject.js test/intl402/ListFormat/constructor/constructor/options-getoptionsobject.js
-D test/intl402/ListFormat/constructor/constructor/options-toobject-prototype.js
-A test/intl402/Segmenter/constructor/constructor/options-getoptionsobject.js
-D test/intl402/Segmenter/constructor/constructor/options-toobject-prototype.js
-D test/intl402/Segmenter/constructor/constructor/options-toobject.js
-A test/language/expressions/in/rhs-yield-absent-non-strict.js
-A test/language/expressions/in/rhs-yield-absent-strict.js
-A test/language/expressions/in/rhs-yield-present.js
\ No newline at end of file
+A test/built-ins/Array/prototype/toString/non-callable-join-string-tag.js
+A test/built-ins/BigInt/wrapper-object-ordinary-toprimitive.js
+A test/built-ins/Error/cause_abrupt.js
+A test/built-ins/Error/cause_property.js
+A test/built-ins/Error/constructor.js
+A test/built-ins/NativeErrors/AggregateError/cause-property.js
+A test/built-ins/NativeErrors/cause_property_native_error.js
+A test/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js
+A test/built-ins/Symbol/prototype/Symbol.toPrimitive/removed-symbol-wrapper-ordinary-toprimitive.js
+M test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js
+A test/language/expressions/in/private-field-in.js
+A test/language/expressions/in/private-field-invalid-assignment-target.js
+A test/language/expressions/in/private-field-invalid-identifier-complex.js
+A test/language/expressions/in/private-field-invalid-identifier-simple.js
+A test/language/expressions/in/private-field-invalid-rhs.js
+A test/language/expressions/in/private-field-presence-accessor-shadowed.js
+A test/language/expressions/in/private-field-presence-accessor.js
+A test/language/expressions/in/private-field-presence-field-shadowed.js
+A test/language/expressions/in/private-field-presence-field.js
+A test/language/expressions/in/private-field-presence-method-shadowed.js
+A test/language/expressions/in/private-field-presence-method.js
+A test/language/expressions/in/private-field-rhs-await-absent.js
+A test/language/expressions/in/private-field-rhs-await-present.js
+A test/language/expressions/in/private-field-rhs-non-object.js
+A test/language/expressions/in/private-field-rhs-unresolvable.js
+A test/language/expressions/in/private-field-rhs-yield-absent.js
+A test/language/expressions/in/private-field-rhs-yield-present.js
+M test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/future-reserved-words/implements.js
+M test/language/future-reserved-words/interface.js
+M test/language/future-reserved-words/package.js
+M test/language/future-reserved-words/private.js
+M test/language/future-reserved-words/protected.js
+M test/language/future-reserved-words/public.js
+M test/language/future-reserved-words/static.js
+A test/language/module-code/export-expname-binding-index.js
+A test/language/module-code/export-expname-binding-index_FIXTURE.js
+M test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js
+M test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js
+M test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js
+M test/language/statements/class/private-non-static-getter-static-setter-early-error.js
+M test/language/statements/class/private-non-static-setter-static-getter-early-error.js
+M test/language/statements/class/private-static-getter-non-static-setter-early-error.js
+M test/language/statements/class/private-static-setter-non-static-getter-early-error.js
+A test/language/statements/for-await-of/head-lhs-async.js
\ No newline at end of file

Added: trunk/JSTests/test262/test/built-ins/Array/prototype/toString/non-callable-join-string-tag.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Array/prototype/toString/non-callable-join-string-tag.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Array/prototype/toString/non-callable-join-string-tag.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,67 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-array.prototype.tostring
+description: >
+    If "join" value is non-callable, Object.prototype.toString intrinsic is called.
+info: |
+    Array.prototype.toString ( )
+
+    [...]
+    2. Let func be ? Get(array, "join").
+    3. If IsCallable(func) is false, set func to the intrinsic function %Object.prototype.toString%.
+    4. Return ? Call(func, array).
+features: [Symbol.toStringTag, Proxy, Reflect, BigInt]
+---*/
+
+assert(delete Object.prototype.toString);
+
+assert.sameValue(Array.prototype.toString.call({ join: null }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: true }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: 0 }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: "join" }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: Symbol() }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: 0n }), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ join: {} }), "[object Object]");
+
+let revokeOnGet = false;
+const proxyTarget = [];
+const { proxy, revoke } = Proxy.revocable(proxyTarget, {
+    get: (target, key, receiver) => {
+        if (revokeOnGet)
+            revoke();
+        return Reflect.get(target, key, receiver);
+    },
+});
+
+proxyTarget.join = undefined;
+assert.sameValue(Array.prototype.toString.call(proxy), "[object Array]");
+revokeOnGet = true;
+assert.throws(TypeError, () => { Array.prototype.toString.call(proxy); });
+
+assert.sameValue(Array.prototype.toString.call((function() { return arguments; })()), "[object Arguments]");
+assert.sameValue(Array.prototype.toString.call(new Error), "[object Error]");
+assert.sameValue(Array.prototype.toString.call(new Boolean), "[object Boolean]");
+assert.sameValue(Array.prototype.toString.call(new Number), "[object Number]");
+assert.sameValue(Array.prototype.toString.call(new String), "[object String]");
+assert.sameValue(Array.prototype.toString.call(new Date), "[object Date]");
+assert.sameValue(Array.prototype.toString.call(new RegExp), "[object RegExp]");
+assert.sameValue(Array.prototype.toString.call(new Proxy(() => {}, {})), "[object Function]");
+assert.sameValue(Array.prototype.toString.call(new Proxy(new Date, {})), "[object Object]");
+assert.sameValue(Array.prototype.toString.call({ [Symbol.toStringTag]: "Foo" }), "[object Foo]");
+assert.sameValue(Array.prototype.toString.call(new Map), "[object Map]");
+
+RegExp.prototype[Symbol.toStringTag] = "Foo";
+assert.sameValue(Array.prototype.toString.call(new RegExp), "[object Foo]");
+Number.prototype[Symbol.toStringTag] = Object("Foo"); // ignored
+assert.sameValue(Array.prototype.toString.call(new Number), "[object Number]");
+
+Object.defineProperty(JSON, Symbol.toStringTag, { value: "Foo" });
+assert.sameValue(Array.prototype.toString.call(JSON), "[object Foo]");
+
+assert(delete Set.prototype[Symbol.toStringTag]);
+assert.sameValue(Array.prototype.toString.call(new Set), "[object Object]");
+
+Object.defineProperty(Object.prototype, Symbol.toStringTag, { get: () => { throw new Test262Error(); } });
+assert.throws(Test262Error, () => { Array.prototype.toString.call({}); });

Added: trunk/JSTests/test262/test/built-ins/BigInt/wrapper-object-ordinary-toprimitive.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/BigInt/wrapper-object-ordinary-toprimitive.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/BigInt/wrapper-object-ordinary-toprimitive.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,72 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-toprimitive
+description: >
+    BigInt wrapper object is converted to primitive via OrdinaryToPrimitive.
+info: |
+    ToPrimitive ( input [ , preferredType ] )
+
+    [...]
+    2. If Type(input) is Object, then
+        a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+        b. If exoticToPrim is not undefined, then
+            [...]
+        c. If preferredType is not present, let preferredType be number.
+        d. Return ? OrdinaryToPrimitive(input, preferredType).
+features: [BigInt]
+---*/
+
+const BigIntToString = BigInt.prototype.toString;
+let toStringGets = 0;
+let toStringCalls = 0;
+let toStringFunction = function() { ++toStringCalls; return `${BigIntToString.call(this)}foo`; };
+Object.defineProperty(BigInt.prototype, "toString", {
+    get: () => { ++toStringGets; return toStringFunction; },
+});
+
+assert.sameValue("" + Object(1n), "1", "hint: default");
+assert.throws(TypeError, () => { +Object(1n); }, "hint: number");
+assert.sameValue(`${Object(1n)}`, "1foo", "hint: string");
+
+assert.sameValue(toStringGets, 1);
+assert.sameValue(toStringCalls, 1);
+
+const BigIntValueOf = BigInt.prototype.valueOf;
+let valueOfGets = 0;
+let valueOfCalls = 0;
+let valueOfFunction = function() { ++valueOfCalls; return BigIntValueOf.call(this) * 2n; };
+Object.defineProperty(BigInt.prototype, "valueOf", {
+    get: () => { ++valueOfGets; return valueOfFunction; },
+});
+
+assert(Object(1n) == 2n, "hint: default");
+assert.sameValue(Object(1n) + 1n, 3n, "hint: number");
+assert.sameValue({ "1foo": 1, "2": 2 }[Object(1n)], 1, "hint: string");
+
+assert.sameValue(toStringGets, 2);
+assert.sameValue(toStringCalls, 2);
+assert.sameValue(valueOfGets, 2);
+assert.sameValue(valueOfCalls, 2);
+
+toStringFunction = undefined;
+
+assert.throws(TypeError, () => { 1 + Object(1n); }, "hint: default");
+assert.sameValue(Object(1n) * 1n, 2n, "hint: number");
+assert.sameValue("".concat(Object(1n)), "2", "hint: string");
+
+assert.sameValue(toStringGets, 3);
+assert.sameValue(toStringCalls, 2);
+assert.sameValue(valueOfGets, 5);
+assert.sameValue(valueOfCalls, 5);
+
+valueOfFunction = null;
+
+assert.throws(TypeError, () => { new Date(Object(1n)); }, "hint: default");
+assert.throws(TypeError, () => { Number(Object(1n)); }, "hint: number");
+assert.throws(TypeError, () => { String(Object(1n)); }, "hint: string");
+
+assert.sameValue(toStringGets, 6);
+assert.sameValue(toStringCalls, 2);
+assert.sameValue(valueOfGets, 8);
+assert.sameValue(valueOfCalls, 5);

Added: trunk/JSTests/test262/test/built-ins/Error/cause_abrupt.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Error/cause_abrupt.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Error/cause_abrupt.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,50 @@
+// Copyright (C) 2021 Chengzhong Wu. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: InstallErrorCause on abrupt completions
+info: |
+  Error ( message [ , options ] )
+
+  ...
+  4. Perform ? InstallErrorCause(O, options).
+  ...
+
+  20.5.8.1 InstallErrorCause ( O, options )
+
+  1. If Type(options) is Object and ? HasProperty(options, "cause") is true, then
+    a. Let cause be ? Get(options, "cause").
+    b. Perform ! CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause).
+  ...
+
+esid: sec-error-message
+features: [error-cause]
+---*/
+
+var message = "my-message";
+//////////////////////////////////////////////////////////////////////////////
+// CHECK#0
+assert.throws(Test262Error, function () {
+  var options = new Proxy({}, {
+    has(target, prop) {
+      if (prop === "cause") {
+        throw new Test262Error("HasProperty");
+      }
+      return prop in target;
+    },
+  });
+  var error = new Error(message, options);
+}, "HasProperty");
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////
+// CHECK#1
+assert.throws(Test262Error, function () {
+  var options = {
+    get cause() {
+      throw new Test262Error("Get Cause");
+    },
+  };
+  var error = new Error(message, options);
+}, "Get Cause");
+//////////////////////////////////////////////////////////////////////////////

Added: trunk/JSTests/test262/test/built-ins/Error/cause_property.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Error/cause_property.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Error/cause_property.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 Chengzhong Wu. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Error constructor creates own cause property
+info: |
+  Error ( message [ , options ] )
+
+  ...
+  4. Perform ? InstallErrorCause(O, options).
+  ...
+
+  20.5.8.1 InstallErrorCause ( O, options )
+
+  1. If Type(options) is Object and ? HasProperty(options, "cause") is true, then
+    a. Let cause be ? Get(options, "cause").
+    b. Perform ! CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause).
+  ...
+
+esid: sec-error-message
+features: [error-cause]
+includes: [propertyHelper.js]
+---*/
+
+var message = "my-message";
+var cause = { message: "my-cause" };
+var error = new Error(message, { cause });
+
+verifyProperty(error, "cause", {
+  configurable: true,
+  enumerable: false,
+  writeable: true,
+  value: cause,
+});
+
+verifyProperty(new Error(message), "cause", undefined);
+verifyProperty(new Error(message, { cause: undefined }), "cause", { value: undefined });

Added: trunk/JSTests/test262/test/built-ins/Error/constructor.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Error/constructor.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Error/constructor.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 Chengzhong Wu. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Error constructor creates own properties in sequence
+info: |
+  Error ( message [ , options ] )
+
+  ...
+  4. Perform ? InstallErrorCause(O, options).
+  ...
+
+esid: sec-error-message
+features: [error-cause]
+includes: [deepEqual.js]
+---*/
+
+var message = "my-message";
+var cause = { message: "my-cause" };
+
+var sequence = [];
+new Error(
+  {
+    toString() {
+      sequence.push("toString");
+      return message;
+    },
+  },
+  {
+    get cause() {
+      sequence.push("cause");
+      return cause;
+    },
+  },
+);
+
+assert.deepEqual(sequence, [ "toString", "cause" ], "accessing own properties on sequence");

Added: trunk/JSTests/test262/test/built-ins/NativeErrors/AggregateError/cause-property.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/NativeErrors/AggregateError/cause-property.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/NativeErrors/AggregateError/cause-property.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,39 @@
+// Copyright (C) 2021 Chengzhong Wu. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-aggregate-error
+description: >
+  AggregateError constructor creates own cause property
+info: |
+  AggregateError ( errors, message[ , options ] )
+
+  ...
+  4. Perform ? InstallErrorCause(O, options).
+  ...
+
+  InstallErrorCause ( O, options )
+
+  1. If Type(options) is Object and ? HasProperty(options, "cause") is true, then
+    a. Let cause be ? Get(options, "cause").
+    b. Perform ! CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause).
+  ...
+
+features: [AggregateError, error-cause]
+includes: [propertyHelper.js]
+---*/
+
+var errors = [];
+var message = "my-message";
+var cause = { message: "my-cause" };
+var error = new AggregateError(errors, message, { cause });
+
+verifyProperty(error, "cause", {
+  configurable: true,
+  enumerable: false,
+  writeable: true,
+  value: cause,
+});
+
+verifyProperty(new AggregateError(errors, message), "cause", undefined);
+verifyProperty(new AggregateError(errors, message, { cause: undefined }), "cause", { value: undefined });

Added: trunk/JSTests/test262/test/built-ins/NativeErrors/cause_property_native_error.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/NativeErrors/cause_property_native_error.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/NativeErrors/cause_property_native_error.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,45 @@
+// Copyright (C) 2021 Chengzhong Wu. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: NativeError constructor creates own cause property
+info: |
+  NativeError ( message[ , options ] )
+
+  ...
+  4. Perform ? InstallErrorCause(O, options).
+  ...
+
+  20.5.8.1 InstallErrorCause ( O, options )
+
+  1. If Type(options) is Object and ? HasProperty(options, "cause") is true, then
+    a. Let cause be ? Get(options, "cause").
+    b. Perform ! CreateNonEnumerableDataPropertyOrThrow(O, "cause", cause).
+  ...
+
+esid: sec-nativeerror
+features: [error-cause]
+includes: [propertyHelper.js]
+---*/
+
+var nativeErrors = [
+  EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
+];
+
+for (var i = 0; i < nativeErrors.length; ++i) {
+  var nativeError = nativeErrors[i];
+
+  var message = "my-message";
+  var cause = { message: "my-cause" };
+  var error = new nativeError(message, { cause });
+
+  verifyProperty(error, "cause", {
+    configurable: true,
+    enumerable: false,
+    writeable: true,
+    value: cause,
+  });
+
+  verifyProperty(new nativeError(message), "cause", undefined);
+  verifyProperty(new nativeError(message, { cause: undefined }), "cause", { value: undefined });
+}

Added: trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/redefined-symbol-wrapper-ordinary-toprimitive.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,31 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-symbol.prototype-@@toprimitive
+description: >
+    If redefined to nullish value, Symbol wrapper object is converted to primitive
+    via OrdinaryToPrimitive.
+info: |
+    ToPrimitive ( input [ , preferredType ] )
+
+    [...]
+    2. If Type(input) is Object, then
+        a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+        b. If exoticToPrim is not undefined, then
+            [...]
+        c. If preferredType is not present, let preferredType be number.
+        d. Return ? OrdinaryToPrimitive(input, preferredType).
+features: [Symbol.toPrimitive]
+---*/
+
+Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, { value: null });
+
+assert.sameValue(Object(Symbol()) == "Symbol()", false, "hint: default");
+assert.throws(TypeError, () => { +Object(Symbol()); }, "hint: number");
+assert.sameValue(`${Object(Symbol())}`, "Symbol()", "hint: string");
+
+Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, { value: undefined });
+
+assert(Object(Symbol.iterator) == Symbol.iterator, "hint: default");
+assert.throws(TypeError, () => { Object(Symbol()) <= ""; }, "hint: number");
+assert.sameValue({ "Symbol()": 1 }[Object(Symbol())], 1, "hint: string");

Added: trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/removed-symbol-wrapper-ordinary-toprimitive.js (0 => 277197)


--- trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/removed-symbol-wrapper-ordinary-toprimitive.js	                        (rev 0)
+++ trunk/JSTests/test262/test/built-ins/Symbol/prototype/Symbol.toPrimitive/removed-symbol-wrapper-ordinary-toprimitive.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,83 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-symbol.prototype-@@toprimitive
+description: >
+    If deleted, Symbol wrapper objects is converted to primitive via OrdinaryToPrimitive.
+info: |
+    ToPrimitive ( input [ , preferredType ] )
+
+    [...]
+    2. If Type(input) is Object, then
+        a. Let exoticToPrim be ? GetMethod(input, @@toPrimitive).
+        b. If exoticToPrim is not undefined, then
+            [...]
+        c. If preferredType is not present, let preferredType be number.
+        d. Return ? OrdinaryToPrimitive(input, preferredType).
+features: [Symbol.toPrimitive]
+---*/
+
+assert(delete Symbol.prototype[Symbol.toPrimitive]);
+
+let valueOfGets = 0;
+let valueOfCalls = 0;
+let valueOfFunction = () => { ++valueOfCalls; return 123; };
+Object.defineProperty(Symbol.prototype, "valueOf", {
+    get: () => { ++valueOfGets; return valueOfFunction; },
+});
+
+assert(Object(Symbol()) == 123, "hint: default");
+assert.sameValue(Object(Symbol()) - 0, 123, "hint: number");
+assert.sameValue("".concat(Object(Symbol())), "Symbol()", "hint: string");
+
+assert.sameValue(valueOfGets, 2);
+assert.sameValue(valueOfCalls, 2);
+
+let toStringGets = 0;
+let toStringCalls = 0;
+let toStringFunction = () => { ++toStringCalls; return "foo"; };
+Object.defineProperty(Symbol.prototype, "toString", {
+    get: () => { ++toStringGets; return toStringFunction; },
+});
+
+assert.sameValue("" + Object(Symbol()), "123", "hint: default");
+assert.sameValue(Object(Symbol()) * 1, 123, "hint: number");
+assert.sameValue({ "123": 1, "Symbol()": 2, "foo": 3 }[Object(Symbol())], 3, "hint: string");
+
+assert.sameValue(valueOfGets, 4);
+assert.sameValue(valueOfCalls, 4);
+assert.sameValue(toStringGets, 1);
+assert.sameValue(toStringCalls, 1);
+
+valueOfFunction = null;
+
+assert.sameValue(new Date(Object(Symbol())).getTime(), NaN, "hint: default");
+assert.sameValue(+Object(Symbol()), NaN, "hint: number");
+assert.sameValue(`${Object(Symbol())}`, "foo", "hint: string");
+
+assert.sameValue(valueOfGets, 6);
+assert.sameValue(valueOfCalls, 4);
+assert.sameValue(toStringGets, 4);
+assert.sameValue(toStringCalls, 4);
+
+toStringFunction = function() { throw new Test262Error(); };
+
+assert.throws(Test262Error, () => { Object(Symbol()) != 123; }, "hint: default");
+assert.throws(Test262Error, () => { Object(Symbol()) / 0; }, "hint: number");
+assert.throws(Test262Error, () => { "".concat(Object(Symbol())); }, "hint: string");
+
+assert.sameValue(valueOfGets, 8);
+assert.sameValue(valueOfCalls, 4);
+assert.sameValue(toStringGets, 7);
+assert.sameValue(toStringCalls, 4);
+
+toStringFunction = undefined;
+
+assert.throws(TypeError, () => { 1 + Object(Symbol()); }, "hint: default");
+assert.throws(TypeError, () => { Number(Object(Symbol())); }, "hint: number");
+assert.throws(TypeError, () => { String(Object(Symbol())); }, "hint: string");
+
+assert.sameValue(valueOfGets, 11);
+assert.sameValue(valueOfCalls, 4);
+assert.sameValue(toStringGets, 10);
+assert.sameValue(toStringCalls, 4);

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-accessors-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/class/cpn-class-expr-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-in.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-in.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-in.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,26 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Requires the `In` parsing parameter
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+  #field;
+
+  constructor() {
+    for (#field in value;;) break;
+  }
+}

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-assignment-target.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-assignment-target.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-assignment-target.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,31 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Rejected as assignment target
+info: |
+  12.10.5 Static Semantics: AllPrivateIdentifiersValid
+
+  AllPrivateIdentifiersValid is an abstract operation which takes names as an argument.
+
+  RelationalExpression:PrivateIdentifierinShiftExpression
+
+  1. If StringValue of PrivateIdentifier is in names, return true.
+  2. Return false.
+
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+  #field;
+
+  constructor() {
+    #field in {} = 0;
+  }
+}

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-complex.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-complex.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-complex.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,31 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invalid private identifier - complex case
+info: |
+  12.10.5 Static Semantics: AllPrivateIdentifiersValid
+
+  AllPrivateIdentifiersValid is an abstract operation which takes names as an argument.
+
+  RelationalExpression:PrivateIdentifierinShiftExpression
+
+  1. If StringValue of PrivateIdentifier is in names, return true.
+  2. Return false.
+
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+  #a;
+
+  constructor() {
+    #b in {};
+  }
+}

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-simple.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-simple.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-identifier-simple.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,25 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Invalid private identifier - simple case
+info: |
+  12.10.5 Static Semantics: AllPrivateIdentifiersValid
+
+  AllPrivateIdentifiersValid is an abstract operation which takes names as an argument.
+
+  RelationalExpression:PrivateIdentifierinShiftExpression
+
+  1. If StringValue of PrivateIdentifier is in names, return true.
+  2. Return false.
+
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+#name in {};

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-rhs.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-rhs.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-invalid-rhs.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,26 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Syntactic grammar restricts right-hand side
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+  #field;
+
+  constructor() {
+    #field in () => {};
+  }
+}

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor-shadowed.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor-shadowed.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor-shadowed.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,47 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes an accessor method
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  [...]
+  10. Else,
+      a. Assert: privateName.[[Kind]] is "method" or "accessor".
+      b. If PrivateBrandCheck(rval, privateName) is not an abrupt completion,
+         then return true.
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-static-methods-private, class-fields-private-in]
+---*/
+
+let Child;
+let parentCount = 0;
+let childCount = 0;
+
+class Parent {
+  get #accessor() {
+    parentCount += 1;
+  }
+
+  static init() {
+    Child = class {
+      get #accessor() {
+        childCount += 1;
+      }
+
+      static isNameIn(value) {
+        return #accessor in value;
+      }
+    };
+  }
+}
+
+Parent.init();
+
+assert.sameValue(Child.isNameIn(new Parent()), false);
+assert.sameValue(parentCount, 0, 'parent accessor not invoked');
+assert.sameValue(Child.isNameIn(new Child()), true);
+assert.sameValue(childCount, 0, 'child accessor not invoked');
+

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-accessor.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,33 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes an accessor method
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  [...]
+  10. Else,
+      a. Assert: privateName.[[Kind]] is "method" or "accessor".
+      b. If PrivateBrandCheck(rval, privateName) is not an abrupt completion,
+         then return true.
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-static-methods-private, class-fields-private-in]
+---*/
+
+let count = 0;
+
+class Class {
+  get #accessor() {
+    count += 1;
+  }
+
+  static isNameIn(value) {
+    return #accessor in value;
+  }
+}
+
+assert.sameValue(Class.isNameIn({}), false);
+assert.sameValue(Class.isNameIn(new Class()), true);
+assert.sameValue(count, 0);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field-shadowed.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field-shadowed.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field-shadowed.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,36 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes a field
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  9. If privateName.[[Kind]] is "field",
+     a. If ! PrivateFieldFind(privateName, rval) is not empty, then return true.
+  [...]
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+let Child;
+
+class Parent {
+  #field;
+
+  static init() {
+    Child = class {
+      #field;
+
+      static isNameIn(value) {
+        return #field in value;
+      }
+    };
+  }
+}
+
+Parent.init();
+
+assert.sameValue(Child.isNameIn(new Parent()), false);
+assert.sameValue(Child.isNameIn(new Child()), true);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-field.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,26 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes a field
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  9. If privateName.[[Kind]] is "field",
+     a. If ! PrivateFieldFind(privateName, rval) is not empty, then return true.
+  [...]
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+class Class {
+  #field;
+
+  static isNameIn(value) {
+    return #field in value;
+  }
+}
+
+assert.sameValue(Class.isNameIn({}), false);
+assert.sameValue(Class.isNameIn(new Class()), true);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method-shadowed.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method-shadowed.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method-shadowed.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,46 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes a method
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  [...]
+  10. Else,
+      a. Assert: privateName.[[Kind]] is "method" or "accessor".
+      b. If PrivateBrandCheck(rval, privateName) is not an abrupt completion,
+         then return true.
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-methods-private, class-fields-private-in]
+---*/
+
+let Child;
+let parentCount = 0;
+let childCount = 0;
+
+class Parent {
+  #method() {
+    parentCount += 1;
+  }
+
+  static init() {
+    Child = class {
+      #method() {
+        childCount += 1;
+      }
+
+      static isNameIn(value) {
+        return #method in value;
+      }
+    };
+  }
+}
+
+Parent.init();
+
+assert.sameValue(Child.isNameIn(new Parent()), false);
+assert.sameValue(parentCount, 0, 'parent method not invoked');
+assert.sameValue(Child.isNameIn(new Child()), true);
+assert.sameValue(childCount, 0, 'child method not invoked');

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-presence-method.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,33 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Value when private name describes a method
+info: |
+  7. Let privateName be ? GetValue(privateNameBinding).
+  8. Assert: privateName is a Private Name.
+  [...]
+  10. Else,
+      a. Assert: privateName.[[Kind]] is "method" or "accessor".
+      b. If PrivateBrandCheck(rval, privateName) is not an abrupt completion,
+         then return true.
+  11. Return false.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-methods-private, class-fields-private-in]
+---*/
+
+let count = 0;
+
+class Class {
+  #method() {
+    count += 1;
+  }
+
+  static isNameIn(value) {
+    return #method in value;
+  }
+}
+
+assert.sameValue(Class.isNameIn({}), false);
+assert.sameValue(Class.isNameIn(new Class()), true);
+assert.sameValue(count, 0);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-absent.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-absent.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-absent.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,39 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Parsing observes the `Await` production parameter when absent
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+
+  [...]
+
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+  4. If Type(rval) is not Object, throw a TypeError exception.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+let value;
+function await() {
+  return value;
+}
+
+class C {
+  #field;
+
+  static isNameIn() {
+    return #field in await(null);
+  }
+}
+
+value = new C();
+assert.sameValue(C.isNameIn(), true);
+
+value = {};
+assert.sameValue(C.isNameIn(), false);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-present.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-present.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-await-present.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,39 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Parsing observes the `Await` production parameter when present
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+
+  [...]
+
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+  4. If Type(rval) is not Object, throw a TypeError exception.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+flags: [async]
+---*/
+
+class C {
+  #field;
+
+  static async isNameIn(value) {
+    return #field in await(value);
+  }
+}
+
+C.isNameIn(new C())
+  .then(function(result) {
+    assert.sameValue(result, true);
+
+    return C.isNameIn({});
+  })
+  .then(function(result) {
+    assert.sameValue(result, false);
+  }).then($DONE, $DONE);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-non-object.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-non-object.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-non-object.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,51 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Algorithm interrupted by non-object right-hand side
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+
+  [...]
+
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+  4. If Type(rval) is not Object, throw a TypeError exception.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+let caught = null;
+
+class C {
+  #field;
+
+  constructor() {
+    try {
+      /**
+       * Using a ShiftExpression to produce the non-object value verifies that
+       * the implementation uses the operator precedence implied by the
+       * syntactic grammar. In other words, the following statement should be
+       * interpreted as:
+       *
+       *     #field in ({} << 0);
+       *
+       * ...rather than:
+       *
+       *     (#field in {}) << 0;
+       */
+      #field in {} << 0;
+    } catch (error) {
+      caught = error;
+    }
+  }
+}
+
+new C();
+
+assert.notSameValue(caught, null);
+assert.sameValue(caught.constructor, TypeError);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-unresolvable.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-unresolvable.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-unresolvable.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,30 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Algorithm interrupted by unresolvable reference
+info: |
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+let caught = null;
+
+class C {
+  #field;
+  constructor() {
+    try {
+      #field in test262unresolvable;
+    } catch (error) {
+      caught = error;
+    }
+  }
+}
+
+new C();
+
+assert.notSameValue(caught, null);
+assert.sameValue(caught.constructor, ReferenceError);

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-absent.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-absent.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-absent.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,33 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Parsing observes the `Yield` production parameter when present
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+
+  [...]
+
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+  4. If Type(rval) is not Object, throw a TypeError exception.
+esid: sec-relational-operators-runtime-semantics-evaluation
+negative:
+  phase: parse
+  type: SyntaxError
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+$DONOTEVALUATE();
+
+class C {
+  #field;
+
+  static method() {
+    #field in yield;
+  }
+}

Added: trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-present.js (0 => 277197)


--- trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-present.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/expressions/in/private-field-rhs-yield-present.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,36 @@
+// Copyright 2021 the V8 project authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Parsing observes the `Yield` production parameter when present
+info: |
+  Syntax
+    RelationalExpression[In, Yield, Await]:
+    [...]
+    [+In]PrivateIdentifier in ShiftExpression[?Yield, ?Await]
+
+  [...]
+
+  1. Let privateIdentifier be the StringValue of PrivateIdentifier.
+  2. Let rref be the result of evaluating ShiftExpression.
+  3. Let rval be ? GetValue(rref).
+  4. If Type(rval) is not Object, throw a TypeError exception.
+esid: sec-relational-operators-runtime-semantics-evaluation
+features: [class-fields-private, class-fields-private-in]
+---*/
+
+class C {
+  #field;
+
+  static *isNameIn() {
+    return #field in (yield);
+  }
+}
+
+let iter1 = C.isNameIn();
+iter1.next();
+assert.sameValue(iter1.next(new C()).value, true);
+
+let iter2 = C.isNameIn();
+iter2.next();
+assert.sameValue(iter2.next({}).value, false);

Modified: trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ObjectLiteral)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ObjectLiteral:

Modified: trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ObjectLiteral)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ObjectLiteral:

Modified: trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/expressions/object/cpn-obj-lit-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ObjectLiteral)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ObjectLiteral:

Modified: trunk/JSTests/test262/test/language/future-reserved-words/implements.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/implements.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/implements.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "implements" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.15ns
 description: Checking if execution of "implements=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var implements = 1;
+var impl\u0065ments = 2;
+
+{ let implements = 3; }
+{ let impl\u0065ments = 4; }
+
+{ const implements = 5; }
+{ const impl\u0065ments = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/interface.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/interface.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/interface.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: |
     The "interface" token can be used as identifier in
     non-strict code
@@ -13,3 +14,10 @@
 ---*/
 
 var interface = 1;
+var int\u0065rface = 2;
+
+{ let interface = 3; }
+{ let int\u0065rface = 4; }
+
+{ const interface = 5; }
+{ const int\u0065rface = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/package.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/package.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/package.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "package" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.21ns
 description: Checking if execution of "package=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var package = 1;
+var pack\u0061ge = 2;
+
+{ let package = 3; }
+{ let pack\u0061ge = 4; }
+
+{ const package = 5; }
+{ const pack\u0061ge = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/private.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/private.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/private.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "private" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.22ns
 description: Checking if execution of "private=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var private = 1;
+var priv\u0061te = 2;
+
+{ let private = 3; }
+{ let priv\u0061te = 4; }
+
+{ const private = 5; }
+{ const priv\u0061te = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/protected.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/protected.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/protected.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "protected" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.23ns
 description: Checking if execution of "protected=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var protected = 1;
+var prot\u0065cted = 2;
+
+{ let protected = 3; }
+{ let prot\u0065cted = 4; }
+
+{ const protected = 5; }
+{ const prot\u0065cted = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/public.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/public.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/public.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "public" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.24ns
 description: Checking if execution of "public=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var public = 1;
+var publi\u0063 = 2;
+
+{ let public = 3; }
+{ let publi\u0063 = 4; }
+
+{ const public = 5; }
+{ const publi\u0063 = 6; }

Modified: trunk/JSTests/test262/test/language/future-reserved-words/static.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/future-reserved-words/static.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/future-reserved-words/static.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -2,6 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 
 /*---
+esid: sec-identifiers-static-semantics-early-errors
 info: The "static" token can be used as identifier in non-strict code
 es5id: 7.6.1.2_A1.26ns
 description: Checking if execution of "static=1" succeeds in non-strict code
@@ -9,3 +10,10 @@
 ---*/
 
 var static = 1;
+var st\u0061tic = 2;
+
+{ let static = 3; }
+{ let st\u0061tic = 4; }
+
+{ const static = 5; }
+{ const st\u0061tic = 6; }

Added: trunk/JSTests/test262/test/language/module-code/export-expname-binding-index.js (0 => 277197)


--- trunk/JSTests/test262/test/language/module-code/export-expname-binding-index.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/module-code/export-expname-binding-index.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-module-namespace-exotic-objects
+description: >
+  Internal methods of module namespace exotic objects are correct
+  with non-Identifier bindings that are integer indices.
+info: |
+  [[HasProperty]] ( P )
+
+  [...]
+  3. If P is an element of exports, return true.
+  4. Return false.
+
+  [[Get]] ( P, Receiver )
+
+  [...]
+  13. Return ? targetEnv.GetBindingValue(binding.[[BindingName]], true).
+
+  [[Set]] ( P, V, Receiver )
+
+  1. Return false.
+
+  [[Delete]] ( P )
+
+  [...]
+  4. If P is an element of exports, return false.
+  5. Return true.
+flags: [module]
+features: [arbitrary-module-namespace-names, Reflect]
+---*/
+import * as ns from "./export-expname-binding-index_FIXTURE.js";
+
+assert.sameValue(ns[0], 0);
+assert.sameValue(Reflect.get(ns, 1), 1);
+assert.sameValue(ns[2], undefined);
+
+assert.throws(TypeError, () => { ns[0] = 1; });
+assert(!Reflect.set(ns, 1, 1));
+assert.throws(TypeError, () => { ns[2] = 2; });
+
+assert(0 in ns);
+assert(Reflect.has(ns, 1));
+assert(!(2 in ns));
+
+assert.throws(TypeError, () => { delete ns[0]; });
+assert(!Reflect.deleteProperty(ns, 1));
+assert(delete ns[2]);

Added: trunk/JSTests/test262/test/language/module-code/export-expname-binding-index_FIXTURE.js (0 => 277197)


--- trunk/JSTests/test262/test/language/module-code/export-expname-binding-index_FIXTURE.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/module-code/export-expname-binding-index_FIXTURE.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,6 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+var a = 0;
+var b = 1;
+export { a as "0", b as "1" };

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-accessors-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassDeclaration)
 esid: prod-ComputedPropertyName
-features: [computed-property-names]
+features: [computed-property-names, logical-assignment-operators]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-coalesce.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ coalesce (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-and.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical and (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/cpn-class-decl-fields-methods-computed-property-name-from-assignment-_expression_-logical-or.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -4,7 +4,7 @@
 /*---
 description: Computed property name from assignment _expression_ logical or (ComputedPropertyName in ClassExpression)
 esid: prod-ComputedPropertyName
-features: [computed-property-names, class-fields-public, class-static-fields-public]
+features: [computed-property-names, logical-assignment-operators, class-fields-public, class-static-fields-public]
 flags: [generated]
 info: |
     ClassExpression:

Modified: trunk/JSTests/test262/test/language/statements/class/private-non-static-getter-static-setter-early-error.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/private-non-static-getter-static-setter-early-error.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/private-non-static-getter-static-setter-early-error.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -13,7 +13,7 @@
 $DONOTEVALUATE();
 
 class C {
-  get #f();
+  get #f() {}
   static set #f(v) {}
 }
 

Modified: trunk/JSTests/test262/test/language/statements/class/private-non-static-setter-static-getter-early-error.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/private-non-static-setter-static-getter-early-error.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/private-non-static-setter-static-getter-early-error.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -14,6 +14,6 @@
 
 class C {
   set #f(v) {}
-  static get #f();
+  static get #f() {}
 }
 

Modified: trunk/JSTests/test262/test/language/statements/class/private-static-getter-non-static-setter-early-error.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/private-static-getter-non-static-setter-early-error.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/private-static-getter-non-static-setter-early-error.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -13,7 +13,7 @@
 $DONOTEVALUATE();
 
 class C {
-  static get #f();
+  static get #f() {}
   set #f(v) {}
 }
 

Modified: trunk/JSTests/test262/test/language/statements/class/private-static-setter-non-static-getter-early-error.js (277196 => 277197)


--- trunk/JSTests/test262/test/language/statements/class/private-static-setter-non-static-getter-early-error.js	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test/language/statements/class/private-static-setter-non-static-getter-early-error.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -14,6 +14,6 @@
 
 class C {
   static set #f(v) {}
-  get #f();
+  get #f() {}
 }
 

Added: trunk/JSTests/test262/test/language/statements/for-await-of/head-lhs-async.js (0 => 277197)


--- trunk/JSTests/test262/test/language/statements/for-await-of/head-lhs-async.js	                        (rev 0)
+++ trunk/JSTests/test262/test/language/statements/for-await-of/head-lhs-async.js	2021-05-07 21:14:29 UTC (rev 277197)
@@ -0,0 +1,23 @@
+// Copyright (C) 2021 Stuart Cook. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-for-in-and-for-of-statements
+description: >
+  The left-hand-side of a for-await-of loop may be the identifier `async`.
+info: |
+  ForInOfStatement[Yield, Await, Return]:
+    [+Await] for await ( [lookahead ≠ let] LeftHandSideExpression[?Yield, ?Await] of AssignmentExpression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]
+features: [async-iteration]
+flags: [async]
+---*/
+
+let async;
+
+async function fn() {
+  for await (async of [7]);
+}
+
+fn()
+  .then(() => assert.sameValue(async, 7), $DONE)
+  .then($DONE, $DONE);

Modified: trunk/JSTests/test262/test262-Revision.txt (277196 => 277197)


--- trunk/JSTests/test262/test262-Revision.txt	2021-05-07 20:28:04 UTC (rev 277196)
+++ trunk/JSTests/test262/test262-Revision.txt	2021-05-07 21:14:29 UTC (rev 277197)
@@ -1,2 +1,2 @@
-test262 remote url: g...@github.com:tc39/test262.git
-test262 revision: 31126581e7290f9233c29cefd93f66c6ac78f1c9
+test262 remote url: https://github.com/tc39/test262.git
+test262 revision: c11d6b00bc2c53323fe26a5813a720fd74cd25ad
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to