| 'use strict'; |
| var getPrototypeOf = require('../internals/object-get-prototype-of'); |
| var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); |
| var has = require('../internals/has'); |
| var wellKnownSymbol = require('../internals/well-known-symbol'); |
| var IS_PURE = require('../internals/is-pure'); |
| |
| var ITERATOR = wellKnownSymbol('iterator'); |
| var BUGGY_SAFARI_ITERATORS = false; |
| |
| var returnThis = function () { return this; }; |
| |
| // `%IteratorPrototype%` object |
| // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object |
| var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; |
| |
| if ([].keys) { |
| arrayIterator = [].keys(); |
| // Safari 8 has buggy iterators w/o `next` |
| if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; |
| else { |
| PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); |
| if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; |
| } |
| } |
| |
| if (IteratorPrototype == undefined) IteratorPrototype = {}; |
| |
| // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() |
| if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { |
| createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); |
| } |
| |
| module.exports = { |
| IteratorPrototype: IteratorPrototype, |
| BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS |
| }; |