| // yield* calls @@iterator on the iterable to produce the iterator. |
| |
| var log = ''; |
| |
| function IteratorWrapper(iterator) { |
| return { |
| next: function (val) { |
| log += 'n'; |
| return iterator.next(val); |
| }, |
| |
| throw: function (exn) { |
| log += 't'; |
| return iterator.throw(exn); |
| } |
| }; |
| } |
| |
| function IterableWrapper(iterable) { |
| var ret = {}; |
| |
| ret[Symbol.iterator] = function () { |
| log += 'i'; |
| return IteratorWrapper(iterable[Symbol.iterator]()); |
| } |
| |
| return ret; |
| } |
| |
| function* delegate(iter) { return yield* iter; } |
| |
| var iter = delegate(IterableWrapper([1, 2, 3])); |
| assertIteratorNext(iter, 1); |
| assertIteratorNext(iter, 2); |
| assertIteratorNext(iter, 3); |
| assertIteratorDone(iter, undefined); |
| |
| assertEq(log, 'innnn'); |
| |
| iter = delegate([1, 2, 3]); |
| assertIteratorNext(iter, 1); |
| assertIteratorNext(iter, 2); |
| assertIteratorNext(iter, 3); |
| assertIteratorDone(iter, undefined); |
| |
| assertEq(log, 'innnn'); |
| |
| if (typeof reportCompare == "function") |
| reportCompare(true, true); |