You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
4 weeks ago
|
'use strict';
|
||
|
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 es/no-array-from, no-throw-literal -- required for testing
|
||
|
Array.from(iteratorWithReturn, function () { throw 2; });
|
||
|
} catch (error) { /* empty */ }
|
||
|
|
||
|
module.exports = function (exec, SKIP_CLOSING) {
|
||
|
try {
|
||
|
if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
|
||
|
} catch (error) { return false; } // workaround of old WebKit + `eval` bug
|
||
|
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;
|
||
|
};
|