// Test that each yield* loop just checks "done", and "value" is only // fetched once at the end. load(libdir + 'iteration.js'); var log = ""; function Iter(val, count) { function next() { return { get done() { log += "d"; return count-- == 0; }, get value() { log += "v"; return val; } } } this[Symbol.iterator] = function() { return this; }; this.next = next; } for (var x of new Iter(42, 5)) assertEq(x, 42); assertEq(log, "dvdvdvdvdvd");