1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 'use strict';
- var $ = require('../internals/export');
- var globalThis = require('../internals/global-this');
- var anInstance = require('../internals/an-instance');
- var anObject = require('../internals/an-object');
- var isCallable = require('../internals/is-callable');
- var getPrototypeOf = require('../internals/object-get-prototype-of');
- var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
- var createProperty = require('../internals/create-property');
- var fails = require('../internals/fails');
- var hasOwn = require('../internals/has-own-property');
- var wellKnownSymbol = require('../internals/well-known-symbol');
- var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
- var DESCRIPTORS = require('../internals/descriptors');
- var IS_PURE = require('../internals/is-pure');
- var CONSTRUCTOR = 'constructor';
- var ITERATOR = 'Iterator';
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
- var $TypeError = TypeError;
- var NativeIterator = globalThis[ITERATOR];
- // FF56- have non-standard global helper `Iterator`
- var FORCED = IS_PURE
- || !isCallable(NativeIterator)
- || NativeIterator.prototype !== IteratorPrototype
- // FF44- non-standard `Iterator` passes previous tests
- || !fails(function () { NativeIterator({}); });
- var IteratorConstructor = function Iterator() {
- anInstance(this, IteratorPrototype);
- if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError('Abstract class Iterator not directly constructable');
- };
- var defineIteratorPrototypeAccessor = function (key, value) {
- if (DESCRIPTORS) {
- defineBuiltInAccessor(IteratorPrototype, key, {
- configurable: true,
- get: function () {
- return value;
- },
- set: function (replacement) {
- anObject(this);
- if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
- if (hasOwn(this, key)) this[key] = replacement;
- else createProperty(this, key, replacement);
- }
- });
- } else IteratorPrototype[key] = value;
- };
- if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
- if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
- defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
- }
- IteratorConstructor.prototype = IteratorPrototype;
- // `Iterator` constructor
- // https://tc39.es/ecma262/#sec-iterator
- $({ global: true, constructor: true, forced: FORCED }, {
- Iterator: IteratorConstructor
- });
|