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