star-iterable.js (1179B)
1 // Copyright (C) 2013 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 25.2 5 description: > 6 When an iterator is the operand of a `yield *` expression, the generator 7 should produce an iterator that visits each iterated item. 8 features: [generators, Symbol.iterator] 9 ---*/ 10 11 var results = [{ value: 1 }, { value: 8 }, { value: 34, done: true }]; 12 var idx = 0; 13 var iterator = {}; 14 var iterable = { 15 next: function() { 16 var result = results[idx]; 17 idx += 1; 18 return result; 19 } 20 }; 21 iterator[Symbol.iterator] = function() { 22 return iterable; 23 }; 24 function* g() { 25 yield* iterator; 26 } 27 var iter = g(); 28 var result; 29 30 result = iter.next(); 31 assert.sameValue(result.value, 1, 'First result `value`'); 32 assert.sameValue(result.done, undefined, 'First result `done` flag'); 33 34 result = iter.next(); 35 assert.sameValue(result.value, 8, 'Third result `value`'); 36 assert.sameValue(result.done, undefined, 'Third result `done` flag'); 37 38 result = iter.next(); 39 assert.sameValue(result.value, undefined, 'Final result `value`'); 40 assert.sameValue(result.done, true, 'Final result `done` flag'); 41 42 reportCompare(0, 0);