123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- '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();
- set.add(1);
- set.add(2);
- return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
- }
- }
- } catch (error) {
- return false;
- }
- };
|