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