1 | 'use strict';
|
---|
2 | var $ = require('../internals/export');
|
---|
3 | var call = require('../internals/function-call');
|
---|
4 | var aCallable = require('../internals/a-callable');
|
---|
5 | var anObject = require('../internals/an-object');
|
---|
6 | var getIteratorMethod = require('../internals/get-iterator-method');
|
---|
7 | var createIteratorProxy = require('../internals/iterator-create-proxy');
|
---|
8 | var createIterResultObject = require('../internals/create-iter-result-object');
|
---|
9 |
|
---|
10 | var $Array = Array;
|
---|
11 |
|
---|
12 | var IteratorProxy = createIteratorProxy(function () {
|
---|
13 | while (true) {
|
---|
14 | var iterator = this.iterator;
|
---|
15 | if (!iterator) {
|
---|
16 | var iterableIndex = this.nextIterableIndex++;
|
---|
17 | var iterables = this.iterables;
|
---|
18 | if (iterableIndex >= iterables.length) {
|
---|
19 | this.done = true;
|
---|
20 | return createIterResultObject(undefined, true);
|
---|
21 | }
|
---|
22 | var entry = iterables[iterableIndex];
|
---|
23 | this.iterables[iterableIndex] = null;
|
---|
24 | iterator = this.iterator = call(entry.method, entry.iterable);
|
---|
25 | this.next = iterator.next;
|
---|
26 | }
|
---|
27 | var result = anObject(call(this.next, iterator));
|
---|
28 | if (result.done) {
|
---|
29 | this.iterator = null;
|
---|
30 | this.next = null;
|
---|
31 | continue;
|
---|
32 | }
|
---|
33 | return result;
|
---|
34 | }
|
---|
35 | }, false, true);
|
---|
36 |
|
---|
37 | // `Iterator.concat` method
|
---|
38 | // https://github.com/tc39/proposal-iterator-sequencing
|
---|
39 | $({ target: 'Iterator', stat: true, forced: true }, {
|
---|
40 | concat: function concat() {
|
---|
41 | var length = arguments.length;
|
---|
42 | var iterables = $Array(length);
|
---|
43 | for (var index = 0; index < length; index++) {
|
---|
44 | var item = anObject(arguments[index]);
|
---|
45 | iterables[index] = {
|
---|
46 | iterable: item,
|
---|
47 | method: aCallable(getIteratorMethod(item))
|
---|
48 | };
|
---|
49 | }
|
---|
50 | return new IteratorProxy({
|
---|
51 | iterables: iterables,
|
---|
52 | nextIterableIndex: 0,
|
---|
53 | iterator: null,
|
---|
54 | next: null
|
---|
55 | });
|
---|
56 | }
|
---|
57 | });
|
---|