| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 'use strict';
- var getBuiltIn = require('../internals/get-built-in');
- var createSetLike = function (size) {
- return {
- size: size,
- has: function () {
- return false;
- },
- keys: function () {
- return {
- next: function () {
- return { done: true };
- }
- };
- }
- };
- };
- var createSetLikeWithInfinitySize = function (size) {
- return {
- size: size,
- has: function () {
- return true;
- },
- keys: function () {
- throw new Error('e');
- }
- };
- };
- module.exports = function (name, callback) {
- var Set = getBuiltIn('Set');
- try {
- new Set()[name](createSetLike(0));
- try {
- // late spec change, early WebKit ~ Safari 17 implementation does not pass it
- // https://github.com/tc39/proposal-set-methods/pull/88
- // also covered engines with
- // https://bugs.webkit.org/show_bug.cgi?id=272679
- new Set()[name](createSetLike(-1));
- return false;
- } catch (error2) {
- if (!callback) return true;
- // early V8 implementation bug
- // https://issues.chromium.org/issues/351332634
- try {
- new Set()[name](createSetLikeWithInfinitySize(-Infinity));
- return false;
- } catch (error) {
- var set = new Set([1, 2]);
- return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
- }
- }
- } catch (error) {
- return false;
- }
- };
|