UNPKG

1.35 kBJavaScriptView Raw
1'use strict';
2var getPrototypeOf = require('../internals/object-get-prototype-of');
3var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
4var has = require('../internals/has');
5var wellKnownSymbol = require('../internals/well-known-symbol');
6var IS_PURE = require('../internals/is-pure');
7
8var ITERATOR = wellKnownSymbol('iterator');
9var BUGGY_SAFARI_ITERATORS = false;
10
11var returnThis = function () { return this; };
12
13// `%IteratorPrototype%` object
14// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
15var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
16
17if ([].keys) {
18 arrayIterator = [].keys();
19 // Safari 8 has buggy iterators w/o `next`
20 if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
21 else {
22 PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
23 if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
24 }
25}
26
27if (IteratorPrototype == undefined) IteratorPrototype = {};
28
29// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
30if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
31 createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
32}
33
34module.exports = {
35 IteratorPrototype: IteratorPrototype,
36 BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
37};