"use strict"; var setPrototypeOf = require("es5-ext/object/set-prototype-of") , d = require("d") , Iterator = require("../") , validIterable = require("../valid-iterable") , push = Array.prototype.push , defineProperties = Object.defineProperties , IteratorChain; IteratorChain = function (iterators) { defineProperties(this, { __iterators__: d("", iterators), __current__: d("w", iterators.shift()) }); }; if (setPrototypeOf) setPrototypeOf(IteratorChain, Iterator); IteratorChain.prototype = Object.create(Iterator.prototype, { constructor: d(IteratorChain), next: d(function () { var result; if (!this.__current__) return { done: true, value: undefined }; result = this.__current__.next(); while (result.done) { this.__current__ = this.__iterators__.shift(); if (!this.__current__) return { done: true, value: undefined }; result = this.__current__.next(); } return result; }) }); module.exports = function () { var iterators = [this]; push.apply(iterators, arguments); iterators.forEach(validIterable); return new IteratorChain(iterators); };