| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 
							- 'use strict';
 
- var hasSymbols = require('has-symbols')();
 
- var GetIntrinsic = require('get-intrinsic');
 
- var callBound = require('call-bound');
 
- var isString = require('is-string');
 
- var $iterator = GetIntrinsic('%Symbol.iterator%', true);
 
- var $stringSlice = callBound('String.prototype.slice');
 
- var $String = GetIntrinsic('%String%');
 
- var IsArray = require('./IsArray');
 
- module.exports = function getIteratorMethod(ES, iterable) {
 
- 	var usingIterator;
 
- 	if (hasSymbols) {
 
- 		usingIterator = ES.GetMethod(iterable, $iterator);
 
- 	} else if (IsArray(iterable)) {
 
- 		usingIterator = function () {
 
- 			var i = -1;
 
- 			var arr = this; // eslint-disable-line no-invalid-this
 
- 			return {
 
- 				next: function () {
 
- 					i += 1;
 
- 					return {
 
- 						done: i >= arr.length,
 
- 						value: arr[i]
 
- 					};
 
- 				}
 
- 			};
 
- 		};
 
- 	} else if (isString(iterable)) {
 
- 		usingIterator = function () {
 
- 			var i = 0;
 
- 			return {
 
- 				next: function () {
 
- 					var nextIndex = ES.AdvanceStringIndex($String(iterable), i, true);
 
- 					var value = $stringSlice(iterable, i, nextIndex);
 
- 					i = nextIndex;
 
- 					var done = nextIndex > iterable.length;
 
- 					return {
 
- 						done: done,
 
- 						value: done ? void undefined : value
 
- 					};
 
- 				}
 
- 			};
 
- 		};
 
- 	}
 
- 	return usingIterator;
 
- };
 
 
  |