| var wellKnownSymbol = require('../internals/well-known-symbol'); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var SAFE_CLOSING = false; |
| |
| try { |
| var called = 0; |
| var iteratorWithReturn = { |
| next: function () { |
| return { done: !!called++ }; |
| }, |
| 'return': function () { |
| SAFE_CLOSING = true; |
| } |
| }; |
| iteratorWithReturn[ITERATOR] = function () { |
| return this; |
| }; |
| // eslint-disable-next-line no-throw-literal |
| Array.from(iteratorWithReturn, function () { throw 2; }); |
| } catch (error) { /* empty */ } |
| |
| module.exports = function (exec, SKIP_CLOSING) { |
| if (!SKIP_CLOSING && !SAFE_CLOSING) return false; |
| var ITERATION_SUPPORT = false; |
| try { |
| var object = {}; |
| object[ITERATOR] = function () { |
| return { |
| next: function () { |
| return { done: ITERATION_SUPPORT = true }; |
| } |
| }; |
| }; |
| exec(object); |
| } catch (error) { /* empty */ } |
| return ITERATION_SUPPORT; |
| }; |