UNPKG

1.08 kBJavaScriptView Raw
1'use strict';
2var wellKnownSymbol = require('../internals/well-known-symbol');
3
4var ITERATOR = wellKnownSymbol('iterator');
5var SAFE_CLOSING = false;
6
7try {
8 var called = 0;
9 var iteratorWithReturn = {
10 next: function () {
11 return { done: !!called++ };
12 },
13 'return': function () {
14 SAFE_CLOSING = true;
15 }
16 };
17 iteratorWithReturn[ITERATOR] = function () {
18 return this;
19 };
20 // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing
21 Array.from(iteratorWithReturn, function () { throw 2; });
22} catch (error) { /* empty */ }
23
24module.exports = function (exec, SKIP_CLOSING) {
25 try {
26 if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
27 } catch (error) { return false; } // workaround of old WebKit + `eval` bug
28 var ITERATION_SUPPORT = false;
29 try {
30 var object = {};
31 object[ITERATOR] = function () {
32 return {
33 next: function () {
34 return { done: ITERATION_SUPPORT = true };
35 }
36 };
37 };
38 exec(object);
39 } catch (error) { /* empty */ }
40 return ITERATION_SUPPORT;
41};