From 3fd6d0b248bccc38f34307eb834c74f4d02b3c75 Mon Sep 17 00:00:00 2001 From: Denis Pushkarev Date: Wed, 4 Nov 2020 16:53:16 +0700 Subject: [PATCH] add `Reflect[@@toStringTag]` https://github.com/tc39/ecma262/pull/2057 --- CHANGELOG.md | 1 + packages/core-js-compat/src/data.js | 5 +++++ packages/core-js-compat/src/modules-by-versions.js | 1 + .../override/modules/es.math.to-string-tag.js | 1 + .../override/modules/es.reflect.to-string-tag.js | 1 + packages/core-js/es/index.js | 1 + packages/core-js/es/reflect/index.js | 1 + packages/core-js/es/reflect/to-string-tag.js | 3 +++ packages/core-js/features/reflect/to-string-tag.js | 3 +++ packages/core-js/modules/es.reflect.to-string-tag.js | 9 +++++++++ packages/core-js/stable/reflect/to-string-tag.js | 3 +++ tests/commonjs.js | 3 +++ tests/compat/tests.js | 3 +++ tests/tests/es.math.to-string-tag.js | 3 +++ tests/tests/es.reflect.to-string-tag.js | 3 +++ tests/tests/index.js | 2 ++ 16 files changed, 43 insertions(+) create mode 100644 packages/core-js-pure/override/modules/es.math.to-string-tag.js create mode 100644 packages/core-js-pure/override/modules/es.reflect.to-string-tag.js create mode 100644 packages/core-js/es/reflect/to-string-tag.js create mode 100644 packages/core-js/features/reflect/to-string-tag.js create mode 100644 packages/core-js/modules/es.reflect.to-string-tag.js create mode 100644 packages/core-js/stable/reflect/to-string-tag.js create mode 100644 tests/tests/es.math.to-string-tag.js create mode 100644 tests/tests/es.reflect.to-string-tag.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cfa3a574b83..204fdf405ad6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ##### Unreleased - `String#replaceAll` moved to the stable ES, [per June TC39 meeting](https://github.com/tc39/notes/blob/master/meetings/2020-06/june-2.md#stringprototypereplaceall-for-stage-4) - `Promise.any` and `AggregateError` moved to the stable ES, [per July TC39 meeting](https://github.com/tc39/notes/blob/master/meetings/2020-07/july-21.md#promiseany--aggregateerror-for-stage-4) +- Added `Reflect[@@toStringTag]`, [per July TC39 meeting](https://github.com/tc39/ecma262/pull/2057) - Following the changes in [the `upsert` proposal](https://github.com/tc39/proposal-upsert), `{ Map, WeakMap }#emplace` replace `{ Map, WeakMap }#upsert`, these obsolete methods will be removed in the next major release - [By the current spec](https://tc39.es/ecma262/#sec-aggregate-error-constructor), `AggregateError#errors` is own data property - Added correct iteration closing in the iteration helpers according to the current version of [the proposal](https://tc39.es/proposal-iterator-helpers) diff --git a/packages/core-js-compat/src/data.js b/packages/core-js-compat/src/data.js index 06db7e373a8d..dd81d59d93d9 100644 --- a/packages/core-js-compat/src/data.js +++ b/packages/core-js-compat/src/data.js @@ -812,6 +812,11 @@ const data = { firefox: '42', safari: '10.0', }, + 'es.reflect.to-string-tag': { + chrome: '86', + firefox: '82', + safari: '14.0', + }, 'es.regexp.constructor': { chrome: '51', firefox: '49', diff --git a/packages/core-js-compat/src/modules-by-versions.js b/packages/core-js-compat/src/modules-by-versions.js index b77407773192..756a9d9c7cdf 100644 --- a/packages/core-js-compat/src/modules-by-versions.js +++ b/packages/core-js-compat/src/modules-by-versions.js @@ -59,6 +59,7 @@ module.exports = { 3.7: [ 'es.aggregate-error', 'es.promise.any', + 'es.reflect.to-string-tag', 'es.string.replace-all', 'esnext.map.emplace', 'esnext.weak-map.emplace', diff --git a/packages/core-js-pure/override/modules/es.math.to-string-tag.js b/packages/core-js-pure/override/modules/es.math.to-string-tag.js new file mode 100644 index 000000000000..8b1a393741c9 --- /dev/null +++ b/packages/core-js-pure/override/modules/es.math.to-string-tag.js @@ -0,0 +1 @@ +// empty diff --git a/packages/core-js-pure/override/modules/es.reflect.to-string-tag.js b/packages/core-js-pure/override/modules/es.reflect.to-string-tag.js new file mode 100644 index 000000000000..8b1a393741c9 --- /dev/null +++ b/packages/core-js-pure/override/modules/es.reflect.to-string-tag.js @@ -0,0 +1 @@ +// empty diff --git a/packages/core-js/es/index.js b/packages/core-js/es/index.js index b17636962e30..d88512236909 100644 --- a/packages/core-js/es/index.js +++ b/packages/core-js/es/index.js @@ -208,6 +208,7 @@ require('../modules/es.reflect.own-keys'); require('../modules/es.reflect.prevent-extensions'); require('../modules/es.reflect.set'); require('../modules/es.reflect.set-prototype-of'); +require('../modules/es.reflect.to-string-tag'); var path = require('../internals/path'); module.exports = path; diff --git a/packages/core-js/es/reflect/index.js b/packages/core-js/es/reflect/index.js index 6a82213c9842..0aa0961fad8a 100644 --- a/packages/core-js/es/reflect/index.js +++ b/packages/core-js/es/reflect/index.js @@ -11,6 +11,7 @@ require('../../modules/es.reflect.own-keys'); require('../../modules/es.reflect.prevent-extensions'); require('../../modules/es.reflect.set'); require('../../modules/es.reflect.set-prototype-of'); +require('../../modules/es.reflect.to-string-tag'); var path = require('../../internals/path'); module.exports = path.Reflect; diff --git a/packages/core-js/es/reflect/to-string-tag.js b/packages/core-js/es/reflect/to-string-tag.js new file mode 100644 index 000000000000..f04e791fd091 --- /dev/null +++ b/packages/core-js/es/reflect/to-string-tag.js @@ -0,0 +1,3 @@ +require('../../modules/es.reflect.to-string-tag'); + +module.exports = 'Reflect'; diff --git a/packages/core-js/features/reflect/to-string-tag.js b/packages/core-js/features/reflect/to-string-tag.js new file mode 100644 index 000000000000..f04e791fd091 --- /dev/null +++ b/packages/core-js/features/reflect/to-string-tag.js @@ -0,0 +1,3 @@ +require('../../modules/es.reflect.to-string-tag'); + +module.exports = 'Reflect'; diff --git a/packages/core-js/modules/es.reflect.to-string-tag.js b/packages/core-js/modules/es.reflect.to-string-tag.js new file mode 100644 index 000000000000..9d8b22136fff --- /dev/null +++ b/packages/core-js/modules/es.reflect.to-string-tag.js @@ -0,0 +1,9 @@ +var $ = require('../internals/export'); +var global = require('../internals/global'); +var setToStringTag = require('../internals/set-to-string-tag'); + +$({ global: true }, { Reflect: {} }); + +// Reflect[@@toStringTag] property +// https://tc39.es/ecma262/#sec-reflect-@@tostringtag +setToStringTag(global.Reflect, 'Reflect', true); diff --git a/packages/core-js/stable/reflect/to-string-tag.js b/packages/core-js/stable/reflect/to-string-tag.js new file mode 100644 index 000000000000..f04e791fd091 --- /dev/null +++ b/packages/core-js/stable/reflect/to-string-tag.js @@ -0,0 +1,3 @@ +require('../../modules/es.reflect.to-string-tag'); + +module.exports = 'Reflect'; diff --git a/tests/commonjs.js b/tests/commonjs.js index bbd97ddd5a30..57f99c9dd69e 100644 --- a/tests/commonjs.js +++ b/tests/commonjs.js @@ -185,6 +185,7 @@ for (const _PATH of ['../packages/core-js-pure', '../packages/core-js']) { ok(load('features/reflect/prevent-extensions')({})); ok(load('features/reflect/set')({}, 'a', 42)); load('features/reflect/set-prototype-of')(O = {}, []); + ok(load('features/reflect/to-string-tag') === 'Reflect'); ok(O instanceof Array); ok(typeof load('features/reflect/define-metadata') === 'function'); ok(typeof load('features/reflect/delete-metadata') === 'function'); @@ -560,6 +561,7 @@ for (const _PATH of ['../packages/core-js-pure', '../packages/core-js']) { ok(load('stable/reflect/prevent-extensions')({})); ok(load('stable/reflect/set')({}, 'a', 42)); load('stable/reflect/set-prototype-of')(O = {}, []); + ok(load('stable/reflect/to-string-tag') === 'Reflect'); ok(O instanceof Array); ok('has' in load('stable/reflect')); ok(load('stable/string/from-code-point')(97) === 'a'); @@ -832,6 +834,7 @@ for (const _PATH of ['../packages/core-js-pure', '../packages/core-js']) { ok(load('es/reflect/prevent-extensions')({})); ok(load('es/reflect/set')({}, 'a', 42)); load('es/reflect/set-prototype-of')(O = {}, []); + ok(load('es/reflect/to-string-tag') === 'Reflect'); ok(O instanceof Array); ok('has' in load('es/reflect')); ok(load('es/string/from-code-point')(97) === 'a'); diff --git a/tests/compat/tests.js b/tests/compat/tests.js index 838434138aee..4a807ce0e282 100644 --- a/tests/compat/tests.js +++ b/tests/compat/tests.js @@ -755,6 +755,9 @@ GLOBAL.tests = { 'es.reflect.set-prototype-of': function () { return Reflect.setPrototypeOf; }, + 'es.reflect.to-string-tag': function () { + return Reflect[Symbol.toStringTag]; + }, 'es.regexp.constructor': function () { var re1 = /a/g; var re2 = /a/g; diff --git a/tests/tests/es.math.to-string-tag.js b/tests/tests/es.math.to-string-tag.js new file mode 100644 index 000000000000..7e1eca2efd93 --- /dev/null +++ b/tests/tests/es.math.to-string-tag.js @@ -0,0 +1,3 @@ +QUnit.test('Math[@@toStringTag]', assert => { + assert.strictEqual(Math[Symbol.toStringTag], 'Math', 'Math[@@toStringTag] is `Math`'); +}); diff --git a/tests/tests/es.reflect.to-string-tag.js b/tests/tests/es.reflect.to-string-tag.js new file mode 100644 index 000000000000..cf4edd1338fd --- /dev/null +++ b/tests/tests/es.reflect.to-string-tag.js @@ -0,0 +1,3 @@ +QUnit.test('Reflect[@@toStringTag]', assert => { + assert.strictEqual(Reflect[Symbol.toStringTag], 'Reflect', 'Reflect[@@toStringTag] is `Reflect`'); +}); diff --git a/tests/tests/index.js b/tests/tests/index.js index 4694db25aa9b..36c93c92b5f2 100644 --- a/tests/tests/index.js +++ b/tests/tests/index.js @@ -54,6 +54,7 @@ import './es.math.log2'; import './es.math.sign'; import './es.math.sinh'; import './es.math.tanh'; +import './es.math.to-string-tag'; import './es.math.trunc'; import './es.number.constructor'; import './es.number.epsilon'; @@ -111,6 +112,7 @@ import './es.reflect.own-keys'; import './es.reflect.prevent-extensions'; import './es.reflect.set-prototype-of'; import './es.reflect.set'; +import './es.reflect.to-string-tag'; import './es.regexp.constructor'; import './es.regexp.exec'; import './es.regexp.flags';