yield-star-from-catch.js (1955B)
1 // Copyright (C) 2015 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 13.6.4.13 5 description: > 6 Control flow during body evaluation should honor `yield *` statements 7 within the `catch` block of `try` statements. 8 features: [generators] 9 ---*/ 10 11 function* values() { 12 yield 1; 13 yield 1; 14 } 15 var dataIterator = values(); 16 var controlIterator = (function*() { 17 for (var x of dataIterator) { 18 try { 19 throw new Error(); 20 throw new Test262Error('This code is unreachable.'); 21 } catch (err) { 22 i++; 23 yield * values(); 24 j++; 25 } 26 k++; 27 } 28 29 l++; 30 })(); 31 var i = 0; 32 var j = 0; 33 var k = 0; 34 var l = 0; 35 36 controlIterator.next(); 37 assert.sameValue(i, 1, 'First iteration: pre-yield'); 38 assert.sameValue(j, 0, 'First iteration: post-yield'); 39 assert.sameValue(k, 0, 'First iteration: post-try'); 40 assert.sameValue(l, 0, 'First iteration: post-for-of'); 41 42 controlIterator.next(); 43 assert.sameValue(i, 1, 'Second iteration: pre-yield'); 44 assert.sameValue(j, 0, 'Second iteration: post-yield'); 45 assert.sameValue(k, 0, 'Second iteration: post-try'); 46 assert.sameValue(l, 0, 'Second iteration: post-for-of'); 47 48 controlIterator.next(); 49 assert.sameValue(i, 2, 'Third iteration: pre-yield'); 50 assert.sameValue(j, 1, 'Third iteration: post-yield'); 51 assert.sameValue(k, 1, 'Third iteration: post-try'); 52 assert.sameValue(l, 0, 'Third iteration: post-for-of'); 53 54 controlIterator.next(); 55 assert.sameValue(i, 2, 'Fourth iteration: pre-yield'); 56 assert.sameValue(j, 1, 'Fourth iteration: post-yield'); 57 assert.sameValue(k, 1, 'Fourth iteration: post-try'); 58 assert.sameValue(l, 0, 'Fourth iteration: post-for-of'); 59 60 controlIterator.next(); 61 assert.sameValue(i, 2, 'Fifth iteration: pre-yield'); 62 assert.sameValue(j, 2, 'Fifth iteration: post-yield'); 63 assert.sameValue(k, 2, 'Fifth iteration: post-try'); 64 assert.sameValue(l, 1, 'Fifth iteration: post-for-of'); 65 66 reportCompare(0, 0);