|
1 // The iteratee of yield* can be a proxy. |
|
2 |
|
3 function results(results) { |
|
4 var i = 0; |
|
5 function iterator() { |
|
6 return this; |
|
7 } |
|
8 function next() { |
|
9 return results[i++]; |
|
10 } |
|
11 var ret = { next: next } |
|
12 ret[std_iterator] = iterator; |
|
13 return ret; |
|
14 } |
|
15 |
|
16 function* yield_results(expected) { |
|
17 return yield* Proxy(results(expected), {}); |
|
18 } |
|
19 |
|
20 function collect_results(iter) { |
|
21 var ret = []; |
|
22 var result; |
|
23 do { |
|
24 result = iter.next(); |
|
25 ret.push(result); |
|
26 } while (!result.done); |
|
27 return ret; |
|
28 } |
|
29 |
|
30 // We have to put a full result for the end, because the return will re-box. |
|
31 var expected = [{value: 1}, 13, "foo", {value: 34, done: true}]; |
|
32 |
|
33 // Sanity check. |
|
34 assertDeepEq(expected, collect_results(results(expected))); |
|
35 assertDeepEq(expected, collect_results(yield_results(expected))); |
|
36 |
|
37 if (typeof reportCompare == "function") |
|
38 reportCompare(true, true); |