| 'use strict'; | 
| var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype; | 
| var create = require('../internals/object-create'); | 
| var createPropertyDescriptor = require('../internals/create-property-descriptor'); | 
| var setToStringTag = require('../internals/set-to-string-tag'); | 
| var Iterators = require('../internals/iterators'); | 
|   | 
| var returnThis = function () { return this; }; | 
|   | 
| module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { | 
|   var TO_STRING_TAG = NAME + ' Iterator'; | 
|   IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); | 
|   setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); | 
|   Iterators[TO_STRING_TAG] = returnThis; | 
|   return IteratorConstructor; | 
| }; |