'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; 
 | 
}; 
 |