'use strict'; 
 | 
var call = require('../internals/function-call'); 
 | 
var aCallable = require('../internals/a-callable'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var tryToString = require('../internals/try-to-string'); 
 | 
var getIteratorMethod = require('../internals/get-iterator-method'); 
 | 
  
 | 
var $TypeError = TypeError; 
 | 
  
 | 
module.exports = function (argument, usingIterator) { 
 | 
  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; 
 | 
  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); 
 | 
  throw new $TypeError(tryToString(argument) + ' is not iterable'); 
 | 
}; 
 |