| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- 'use strict';
 
- var $ = require('../internals/export');
 
- var call = require('../internals/function-call');
 
- var IS_PURE = require('../internals/is-pure');
 
- var FunctionName = require('../internals/function-name');
 
- var isCallable = require('../internals/is-callable');
 
- var createIteratorConstructor = require('../internals/iterator-create-constructor');
 
- var getPrototypeOf = require('../internals/object-get-prototype-of');
 
- var setPrototypeOf = require('../internals/object-set-prototype-of');
 
- var setToStringTag = require('../internals/set-to-string-tag');
 
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
 
- var defineBuiltIn = require('../internals/define-built-in');
 
- var wellKnownSymbol = require('../internals/well-known-symbol');
 
- var Iterators = require('../internals/iterators');
 
- var IteratorsCore = require('../internals/iterators-core');
 
- var PROPER_FUNCTION_NAME = FunctionName.PROPER;
 
- var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
 
- var IteratorPrototype = IteratorsCore.IteratorPrototype;
 
- var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
 
- var ITERATOR = wellKnownSymbol('iterator');
 
- var KEYS = 'keys';
 
- var VALUES = 'values';
 
- var ENTRIES = 'entries';
 
- var returnThis = function () { return this; };
 
- module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
 
-   createIteratorConstructor(IteratorConstructor, NAME, next);
 
-   var getIterationMethod = function (KIND) {
 
-     if (KIND === DEFAULT && defaultIterator) return defaultIterator;
 
-     if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];
 
-     switch (KIND) {
 
-       case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
 
-       case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
 
-       case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
 
-     }
 
-     return function () { return new IteratorConstructor(this); };
 
-   };
 
-   var TO_STRING_TAG = NAME + ' Iterator';
 
-   var INCORRECT_VALUES_NAME = false;
 
-   var IterablePrototype = Iterable.prototype;
 
-   var nativeIterator = IterablePrototype[ITERATOR]
 
-     || IterablePrototype['@@iterator']
 
-     || DEFAULT && IterablePrototype[DEFAULT];
 
-   var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
 
-   var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
 
-   var CurrentIteratorPrototype, methods, KEY;
 
-   // fix native
 
-   if (anyNativeIterator) {
 
-     CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
 
-     if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
 
-       if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
 
-         if (setPrototypeOf) {
 
-           setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
 
-         } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
 
-           defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
 
-         }
 
-       }
 
-       // Set @@toStringTag to native iterators
 
-       setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
 
-       if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
 
-     }
 
-   }
 
-   // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
 
-   if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
 
-     if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
 
-       createNonEnumerableProperty(IterablePrototype, 'name', VALUES);
 
-     } else {
 
-       INCORRECT_VALUES_NAME = true;
 
-       defaultIterator = function values() { return call(nativeIterator, this); };
 
-     }
 
-   }
 
-   // export additional methods
 
-   if (DEFAULT) {
 
-     methods = {
 
-       values: getIterationMethod(VALUES),
 
-       keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
 
-       entries: getIterationMethod(ENTRIES)
 
-     };
 
-     if (FORCED) for (KEY in methods) {
 
-       if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
 
-         defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
 
-       }
 
-     } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
 
-   }
 
-   // define iterator
 
-   if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
 
-     defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
 
-   }
 
-   Iterators[NAME] = defaultIterator;
 
-   return methods;
 
- };
 
 
  |