Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(632)

Side by Side Diff: test/mjsunit/harmony/iterator-close.js

Issue 1772793002: Implement iterator finalization in array destructuring. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --harmony-iterator-close 5 // Flags: --harmony-iterator-close
adamk 2016/03/07 20:28:05 There are a ton of new tests in here, but I don't
neis 2016/03/08 13:40:10 Yes, definitely. I added more.
6 6
7
7 function* g() { yield 42; return 88 }; 8 function* g() { yield 42; return 88 };
8 9
9 10
10 // Return method is "undefined". 11 // Return method is "undefined".
11 { 12 {
12 g.prototype.return = null; 13 g.prototype.return = null;
13 14
15
16 assertEquals(undefined, (() => {
17 for (var x of g()) { break; }
18 })());
19
14 assertEquals(undefined, (() => { 20 assertEquals(undefined, (() => {
15 for (let x of g()) { break; } 21 for (let x of g()) { break; }
16 })()); 22 })());
17 23
18 assertEquals(undefined, (() => { 24 assertEquals(undefined, (() => {
25 for (const x of g()) { break; }
26 })());
27
28 assertEquals(undefined, (() => {
19 for (x of g()) { break; } 29 for (x of g()) { break; }
20 })()); 30 })());
21 31
32
33 assertThrowsEquals(() => {
34 for (var x of g()) { throw 42; }
35 }, 42);
36
22 assertThrowsEquals(() => { 37 assertThrowsEquals(() => {
23 for (let x of g()) { throw 42; } 38 for (let x of g()) { throw 42; }
24 }, 42); 39 }, 42);
25 40
26 assertThrowsEquals(() => { 41 assertThrowsEquals(() => {
42 for (const x of g()) { throw 42; }
43 }, 42);
44
45 assertThrowsEquals(() => {
27 for (x of g()) { throw 42; } 46 for (x of g()) { throw 42; }
28 }, 42); 47 }, 42);
29 48
49
50 assertEquals(42, (() => {
51 for (var x of g()) { return 42; }
52 })());
53
30 assertEquals(42, (() => { 54 assertEquals(42, (() => {
31 for (let x of g()) { return 42; } 55 for (let x of g()) { return 42; }
32 })()); 56 })());
33 57
34 assertEquals(42, (() => { 58 assertEquals(42, (() => {
59 for (const x of g()) { return 42; }
60 })());
61
62 assertEquals(42, (() => {
35 for (x of g()) { return 42; } 63 for (x of g()) { return 42; }
36 })()); 64 })());
37 65
66
67 assertEquals(42, eval('for (var x of g()) { x; }'));
68
38 assertEquals(42, eval('for (let x of g()) { x; }')); 69 assertEquals(42, eval('for (let x of g()) { x; }'));
39 70
40 assertEquals(42, eval('for (let x of g()) { x; }')); 71 assertEquals(42, eval('for (const x of g()) { x; }'));
72
73 assertEquals(42, eval('for (x of g()) { x; }'));
74
75
76 assertEquals(42, (() => {
77 var [x] = g(); return x;
78 })());
79
80 assertEquals(42, (() => {
81 let [x] = g(); return x;
82 })());
83
84 assertEquals(42, (() => {
85 const [x] = g(); return x;
86 })());
87
88 assertEquals(42, (() => {
89 [x] = g(); return x;
90 })());
41 } 91 }
42 92
43 93
44 // Return method is not callable. 94 // Return method is not callable.
45 { 95 {
46 g.prototype.return = 666; 96 g.prototype.return = 666;
47 97
98
99 assertThrows(() => {
100 for (var x of g()) { break; }
101 }, TypeError);
102
48 assertThrows(() => { 103 assertThrows(() => {
49 for (let x of g()) { break; } 104 for (let x of g()) { break; }
50 }, TypeError); 105 }, TypeError);
51 106
52 assertThrows(() => { 107 assertThrows(() => {
108 for (const x of g()) { break; }
109 }, TypeError);
110
111 assertThrows(() => {
53 for (x of g()) { break; } 112 for (x of g()) { break; }
54 }, TypeError); 113 }, TypeError);
55 114
115
116 assertThrows(() => {
117 for (var x of g()) { throw 666; }
118 }, TypeError);
119
56 assertThrows(() => { 120 assertThrows(() => {
57 for (let x of g()) { throw 666; } 121 for (let x of g()) { throw 666; }
58 }, TypeError); 122 }, TypeError);
59 123
60 assertThrows(() => { 124 assertThrows(() => {
125 for (const x of g()) { throw 666; }
126 }, TypeError);
127
128 assertThrows(() => {
61 for (x of g()) { throw 666; } 129 for (x of g()) { throw 666; }
62 }, TypeError); 130 }, TypeError);
63 131
132
133 assertThrows(() => {
134 for (var x of g()) { return 666; }
135 }, TypeError);
136
64 assertThrows(() => { 137 assertThrows(() => {
65 for (let x of g()) { return 666; } 138 for (let x of g()) { return 666; }
66 }, TypeError); 139 }, TypeError);
67 140
68 assertThrows(() => { 141 assertThrows(() => {
142 for (const x of g()) { return 666; }
143 }, TypeError);
144
145 assertThrows(() => {
69 for (x of g()) { return 666; } 146 for (x of g()) { return 666; }
70 }, TypeError); 147 }, TypeError);
71 148
149
150 assertEquals(42, eval('for (var x of g()) { x; }'));
151
72 assertEquals(42, eval('for (let x of g()) { x; }')); 152 assertEquals(42, eval('for (let x of g()) { x; }'));
73 153
74 assertEquals(42, eval('for (let x of g()) { x; }')); 154 assertEquals(42, eval('for (const x of g()) { x; }'));
155
156 assertEquals(42, eval('for (x of g()) { x; }'));
157
158
159 assertThrows(() => {
160 var [x] = g(); return x;
161 }, TypeError);
162
163 assertThrows(() => {
164 let [x] = g(); return x;
165 }, TypeError);
166
167 assertThrows(() => {
168 const [x] = g(); return x;
169 }, TypeError);
170
171 assertThrows(() => {
172 [x] = g(); return x;
173 }, TypeError);
75 } 174 }
76 175
77 176
78 // Return method does not return an object. 177 // Return method does not return an object.
79 { 178 {
80 g.prototype.return = () => 666; 179 g.prototype.return = () => 666;
81 180
181
182 assertThrows(() => {
183 for (var x of g()) { break; }
184 }, TypeError);
185
82 assertThrows(() => { 186 assertThrows(() => {
83 for (let x of g()) { break; } 187 for (let x of g()) { break; }
84 }, TypeError); 188 }, TypeError);
85 189
86 assertThrows(() => { 190 assertThrows(() => {
191 for (const x of g()) { break; }
192 }, TypeError);
193
194 assertThrows(() => {
87 for (x of g()) { break; } 195 for (x of g()) { break; }
88 }, TypeError); 196 }, TypeError);
89 197
198
90 // Throw from the body of a for loop 'wins' vs throw 199 // Throw from the body of a for loop 'wins' vs throw
91 // originating from a bad 'return' value. 200 // originating from a bad 'return' value.
201
202 assertThrowsEquals(() => {
203 for (var x of g()) { throw 666; }
204 }, 666);
205
92 assertThrowsEquals(() => { 206 assertThrowsEquals(() => {
93 for (let x of g()) { throw 666; } 207 for (let x of g()) { throw 666; }
94 }, 666); 208 }, 666);
95 209
96 assertThrowsEquals(() => { 210 assertThrowsEquals(() => {
211 for (const x of g()) { throw 666; }
212 }, 666);
213
214 assertThrowsEquals(() => {
97 for (x of g()) { throw 666; } 215 for (x of g()) { throw 666; }
98 }, 666); 216 }, 666);
99 217
218
219 assertThrows(() => {
220 for (var x of g()) { return 666; }
221 }, TypeError);
222
100 assertThrows(() => { 223 assertThrows(() => {
101 for (let x of g()) { return 666; } 224 for (let x of g()) { return 666; }
102 }, TypeError); 225 }, TypeError);
103 226
104 assertThrows(() => { 227 assertThrows(() => {
228 for (const x of g()) { return 666; }
229 }, TypeError);
230
231 assertThrows(() => {
105 for (x of g()) { return 666; } 232 for (x of g()) { return 666; }
106 }, TypeError); 233 }, TypeError);
107 234
235
236 assertEquals(42, eval('for (var x of g()) { x; }'));
237
108 assertEquals(42, eval('for (let x of g()) { x; }')); 238 assertEquals(42, eval('for (let x of g()) { x; }'));
109 239
240 assertEquals(42, eval('for (const x of g()) { x; }'));
241
110 assertEquals(42, eval('for (x of g()) { x; }')); 242 assertEquals(42, eval('for (x of g()) { x; }'));
243
244
245 assertThrows(() => {
246 var [x] = g(); return x;
247 }, TypeError);
248
249 assertThrows(() => {
250 let [x] = g(); return x;
251 }, TypeError);
252
253 assertThrows(() => {
254 const [x] = g(); return x;
255 }, TypeError);
256
257 assertThrows(() => {
258 [x] = g(); return x;
259 }, TypeError);
111 } 260 }
112 261
113 262
114 // Return method returns an object. 263 // Return method returns an object.
115 { 264 {
116 let log = []; 265 let log = [];
117 g.prototype.return = (...args) => { log.push(args); return {} }; 266 g.prototype.return = (...args) => { log.push(args); return {} };
118 267
268
269 log = [];
270 for (var x of g()) { break; }
271 assertEquals([[]], log);
272
119 log = []; 273 log = [];
120 for (let x of g()) { break; } 274 for (let x of g()) { break; }
121 assertEquals([[]], log); 275 assertEquals([[]], log);
122 276
123 log = []; 277 log = [];
278 for (const x of g()) { break; }
279 assertEquals([[]], log);
280
281 log = [];
124 for (x of g()) { break; } 282 for (x of g()) { break; }
125 assertEquals([[]], log); 283 assertEquals([[]], log);
126 284
285
286 log = [];
287 assertThrowsEquals(() => {
288 for (var x of g()) { throw 42; }
289 }, 42);
290 assertEquals([[]], log);
291
127 log = []; 292 log = [];
128 assertThrowsEquals(() => { 293 assertThrowsEquals(() => {
129 for (let x of g()) { throw 42; } 294 for (let x of g()) { throw 42; }
130 }, 42); 295 }, 42);
131 assertEquals([[]], log); 296 assertEquals([[]], log);
132 297
133 log = []; 298 log = [];
134 assertThrowsEquals(() => { 299 assertThrowsEquals(() => {
300 for (const x of g()) { throw 42; }
301 }, 42);
302 assertEquals([[]], log);
303
304 log = [];
305 assertThrowsEquals(() => {
135 for (x of g()) { throw 42; } 306 for (x of g()) { throw 42; }
136 }, 42); 307 }, 42);
137 assertEquals([[]], log); 308 assertEquals([[]], log);
138 309
310
311 log = [];
312 assertEquals(42, (() => {
313 for (var x of g()) { return 42; }
314 })());
315 assertEquals([[]], log);
316
139 log = []; 317 log = [];
140 assertEquals(42, (() => { 318 assertEquals(42, (() => {
141 for (let x of g()) { return 42; } 319 for (let x of g()) { return 42; }
142 })()); 320 })());
143 assertEquals([[]], log); 321 assertEquals([[]], log);
144 322
145 log = []; 323 log = [];
146 assertEquals(42, (() => { 324 assertEquals(42, (() => {
325 for (const x of g()) { return 42; }
326 })());
327 assertEquals([[]], log);
328
329 log = [];
330 assertEquals(42, (() => {
147 for (x of g()) { return 42; } 331 for (x of g()) { return 42; }
148 })()); 332 })());
149 assertEquals([[]], log); 333 assertEquals([[]], log);
150 334
335
336 log = [];
337 assertEquals(42, eval('for (var x of g()) { x; }'));
338 assertEquals([], log);
339
151 log = []; 340 log = [];
152 assertEquals(42, eval('for (let x of g()) { x; }')); 341 assertEquals(42, eval('for (let x of g()) { x; }'));
153 assertEquals([], log); 342 assertEquals([], log);
154 343
155 log = []; 344 log = [];
345 assertEquals(42, eval('for (const x of g()) { x; }'));
346 assertEquals([], log);
347
348 log = [];
156 assertEquals(42, eval('for (x of g()) { x; }')); 349 assertEquals(42, eval('for (x of g()) { x; }'));
157 assertEquals([], log); 350 assertEquals([], log);
158 351
352
159 // Even if doing the assignment throws, still call return 353 // Even if doing the assignment throws, still call return
354 log = [];
160 x = { set attr(_) { throw 1234; } }; 355 x = { set attr(_) { throw 1234; } };
161 assertThrowsEquals(() => { 356 assertThrowsEquals(() => {
162 for (x.attr of g()) { throw 456; } 357 for (x.attr of g()) { throw 456; }
163 }, 1234); 358 }, 1234);
164 assertEquals([[]], log); 359 assertEquals([[]], log);
360
361
362 log = [];
363 assertEquals(42, (() => {
364 var [x] = g(); return x;
365 })());
366 assertEquals([[]], log);
367
368 log = [];
369 assertEquals(42, (() => {
370 let [x] = g(); return x;
371 })());
372 assertEquals([[]], log);
373
374 log = [];
375 assertEquals(42, (() => {
376 const [x] = g(); return x;
377 })());
378 assertEquals([[]], log);
379
380 log = [];
381 assertEquals(42, (() => {
382 [x] = g(); return x;
383 })());
384 assertEquals([[]], log);
385
386
387 log = [];
388 assertEquals(42, (() => {
389 var [x,] = g(); return x;
390 })());
391 assertEquals([[]], log);
392
393 log = [];
394 assertEquals(42, (() => {
395 let [x,] = g(); return x;
396 })());
397 assertEquals([[]], log);
398
399 log = [];
400 assertEquals(42, (() => {
401 const [x,] = g(); return x;
402 })());
403 assertEquals([[]], log);
404
405 log = [];
406 assertEquals(42, (() => {
407 [x,] = g(); return x;
408 })());
409 assertEquals([[]], log);
410
411
412 log = [];
413 assertEquals(42, (() => {
414 var [x,,] = g(); return x;
415 })());
416 assertEquals([], log);
417
418 log = [];
419 assertEquals(42, (() => {
420 let [x,,] = g(); return x;
421 })());
422 assertEquals([], log);
423
424 log = [];
425 assertEquals(42, (() => {
426 const [x,,] = g(); return x;
427 })());
428 assertEquals([], log);
429
430 log = [];
431 assertEquals(42, (() => {
432 [x,,] = g(); return x;
433 })());
434 assertEquals([], log);
435
436
437 log = [];
438 assertEquals([42, undefined], (() => {
439 var [x, y] = g(); return [x, y];
440 })());
441 assertEquals([], log);
442
443 log = [];
444 assertEquals([42, undefined], (() => {
445 let [x, y] = g(); return [x, y];
446 })());
447 assertEquals([], log);
448
449 log = [];
450 assertEquals([42, undefined], (() => {
451 const [x, y] = g(); return [x, y];
452 })());
453 assertEquals([], log);
454
455 log = [];
456 assertEquals([42, undefined], (() => {
457 [x, y] = g(); return [x, y];
458 })());
459 assertEquals([], log);
460
461
462 log = [];
463 assertEquals([42], (() => {
464 var [...x] = g(); return x;
465 })());
466 assertEquals([], log);
467
468 log = [];
469 assertEquals([42], (() => {
470 let [...x] = g(); return x;
471 })());
472 assertEquals([], log);
473
474 log = [];
475 assertEquals([42], (() => {
476 const [...x] = g(); return x;
477 })());
478 assertEquals([], log);
479
480 log = [];
481 assertEquals([42], (() => {
482 [...x] = g(); return x;
483 })());
484 assertEquals([], log);
485
486
487 log = [];
488 assertEquals([42, []], (() => {
489 var [x, ...y] = g(); return [x, y];
490 })());
491 assertEquals([], log);
492
493 log = [];
494 assertEquals([42, []], (() => {
495 let [x, ...y] = g(); return [x, y];
496 })());
497 assertEquals([], log);
498
499 log = [];
500 assertEquals([42, []], (() => {
501 const [x, ...y] = g(); return [x, y];
502 })());
503 assertEquals([], log);
504
505 log = [];
506 assertEquals([42, []], (() => {
507 [x, ...y] = g(); return [x, y];
508 })());
509 assertEquals([], log);
510
511
512 log = [];
513 assertEquals([], (() => {
514 var [] = g(); return [];
515 })());
516 assertEquals([[]], log);
517
518 log = [];
519 assertEquals([], (() => {
520 let [] = g(); return [];
521 })());
522 assertEquals([[]], log);
523
524 log = [];
525 assertEquals([], (() => {
526 const [] = g(); return [];
527 })());
528 assertEquals([[]], log);
529
530 log = [];
531 assertEquals([], (() => {
532 [] = g(); return [];
533 })());
534 assertEquals([[]], log);
535
536
537 log = [];
538 assertEquals([], (() => {
539 var [...[]] = g(); return [];
540 })());
541 assertEquals([], log);
542
543 log = [];
544 assertEquals([], (() => {
545 let [...[]] = g(); return [];
546 })());
547 assertEquals([], log);
548
549 log = [];
550 assertEquals([], (() => {
551 const [...[]] = g(); return [];
552 })());
553 assertEquals([], log);
554
555 log = [];
556 assertEquals([], (() => {
557 [...[]] = g(); return [];
558 })());
559 assertEquals([], log);
560
561
562 log = [];
563 assertEquals([42], (() => {
564 var [...[x]] = g(); return [x];
565 })());
566 assertEquals([], log);
567
568 log = [];
569 assertEquals([42], (() => {
570 let [...[x]] = g(); return [x];
571 })());
572 assertEquals([], log);
573
574 log = [];
575 assertEquals([42], (() => {
576 const [...[x]] = g(); return [x];
577 })());
578 assertEquals([], log);
579
580 log = [];
581 assertEquals([42], (() => {
582 [...[x]] = g(); return [x];
583 })());
584 assertEquals([], log);
585
586
587 log = [];
588 assertEquals([42, undefined], (() => {
589 var [...[x, y]] = g(); return [x, y];
590 })());
591 assertEquals([], log);
592
593 log = [];
594 assertEquals([42, undefined], (() => {
595 let [...[x, y]] = g(); return [x, y];
596 })());
597 assertEquals([], log);
598
599 log = [];
600 assertEquals([42, undefined], (() => {
601 const [...[x, y]] = g(); return [x, y];
602 })());
603 assertEquals([], log);
604
605 log = [];
606 assertEquals([42, undefined], (() => {
607 [...[x, y]] = g(); return [x, y];
608 })());
609 assertEquals([], log);
165 } 610 }
166 611
167 612
168 // Return method throws. 613 // Return method throws.
169 { 614 {
170 let log = []; 615 let log = [];
171 g.prototype.return = (...args) => { log.push(args); throw 23 }; 616 g.prototype.return = (...args) => { log.push(args); throw 23 };
172 617
618
619 log = [];
620 assertThrowsEquals(() => {
621 for (var x of g()) { break; }
622 }, 23);
623 assertEquals([[]], log);
624
173 log = []; 625 log = [];
174 assertThrowsEquals(() => { 626 assertThrowsEquals(() => {
175 for (let x of g()) { break; } 627 for (let x of g()) { break; }
176 }, 23); 628 }, 23);
177 assertEquals([[]], log); 629 assertEquals([[]], log);
178 630
179 log = []; 631 log = [];
180 assertThrowsEquals(() => { 632 assertThrowsEquals(() => {
633 for (const x of g()) { break; }
634 }, 23);
635 assertEquals([[]], log);
636
637 log = [];
638 assertThrowsEquals(() => {
181 for (x of g()) { break; } 639 for (x of g()) { break; }
182 }, 23); 640 }, 23);
183 assertEquals([[]], log); 641 assertEquals([[]], log);
184 642
643
644 log = [];
645 assertThrowsEquals(() => {
646 for (var x of g()) { throw 42; }
647 }, 42);
648 assertEquals([[]], log);
649
185 log = []; 650 log = [];
186 assertThrowsEquals(() => { 651 assertThrowsEquals(() => {
187 for (let x of g()) { throw 42; } 652 for (let x of g()) { throw 42; }
188 }, 42); 653 }, 42);
189 assertEquals([[]], log); 654 assertEquals([[]], log);
190 655
191 log = []; 656 log = [];
192 assertThrowsEquals(() => { 657 assertThrowsEquals(() => {
658 for (const x of g()) { throw 42; }
659 }, 42);
660 assertEquals([[]], log);
661
662 log = [];
663 assertThrowsEquals(() => {
193 for (x of g()) { throw 42; } 664 for (x of g()) { throw 42; }
194 }, 42); 665 }, 42);
195 assertEquals([[]], log); 666 assertEquals([[]], log);
196 667
668
669 log = [];
670 assertThrowsEquals(() => {
671 for (var x of g()) { return 42; }
672 }, 23);
673 assertEquals([[]], log);
674
197 log = []; 675 log = [];
198 assertThrowsEquals(() => { 676 assertThrowsEquals(() => {
199 for (let x of g()) { return 42; } 677 for (let x of g()) { return 42; }
200 }, 23); 678 }, 23);
201 assertEquals([[]], log); 679 assertEquals([[]], log);
202 680
203 log = []; 681 log = [];
204 assertThrowsEquals(() => { 682 assertThrowsEquals(() => {
683 for (const x of g()) { return 42; }
684 }, 23);
685 assertEquals([[]], log);
686
687 log = [];
688 assertThrowsEquals(() => {
205 for (x of g()) { return 42; } 689 for (x of g()) { return 42; }
206 }, 23); 690 }, 23);
207 assertEquals([[]], log); 691 assertEquals([[]], log);
208 692
693
694 log = [];
695 assertEquals(42, eval('for (var x of g()) { x; }'));
696 assertEquals([], log);
697
209 log = []; 698 log = [];
210 assertEquals(42, eval('for (let x of g()) { x; }')); 699 assertEquals(42, eval('for (let x of g()) { x; }'));
211 assertEquals([], log); 700 assertEquals([], log);
212 701
213 log = []; 702 log = [];
703 assertEquals(42, eval('for (const x of g()) { x; }'));
704 assertEquals([], log);
705
706 log = [];
214 assertEquals(42, eval('for (x of g()) { x; }')); 707 assertEquals(42, eval('for (x of g()) { x; }'));
215 assertEquals([], log); 708 assertEquals([], log);
709
710 log = [];
711 assertThrowsEquals(() => {
712 var [x] = g(); return x;
713 }, 23);
714 assertEquals([[]], log);
715
716 log = [];
717 assertThrowsEquals(() => {
718 let [x] = g(); return x;
719 }, 23);
720 assertEquals([[]], log);
721
722 log = [];
723 assertThrowsEquals(() => {
724 const [x] = g(); return x;
725 }, 23);
726 assertEquals([[]], log);
727
728 log = [];
729 assertThrowsEquals(x => {
730 [x] = g(); return x;
731 }, 23);
732 assertEquals([[]], log);
216 } 733 }
217 734
218 735
219 // Next method throws. 736 // Next method throws.
220 { 737 {
221 g.prototype.next = () => { throw 666; }; 738 g.prototype.next = () => { throw 666; };
222 g.prototype.return = () => { assertUnreachable() }; 739 g.prototype.return = () => { assertUnreachable() };
223 740
741
742 assertThrowsEquals(() => {
743 for (var x of g()) {}
744 }, 666);
745
224 assertThrowsEquals(() => { 746 assertThrowsEquals(() => {
225 for (let x of g()) {} 747 for (let x of g()) {}
226 }, 666); 748 }, 666);
227 749
228 assertThrowsEquals(() => { 750 assertThrowsEquals(() => {
751 for (const x of g()) {}
752 }, 666);
753
754 assertThrowsEquals(() => {
229 for (x of g()) {} 755 for (x of g()) {}
230 }, 666); 756 }, 666);
231 } 757 }
232 758
233 759
234 // Nested loops. 760 // Nested loops.
235 { 761 {
236 function* g1() { yield 1; yield 2; throw 3; } 762 function* g1() { yield 1; yield 2; throw 3; }
237 function* g2() { yield -1; yield -2; throw -3; } 763 function* g2() { yield -1; yield -2; throw -3; }
238 764
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 for (let x of g1()) { 890 for (let x of g1()) {
365 try { 891 try {
366 for (let y of g2()) { 892 for (let y of g2()) {
367 } 893 }
368 } catch (_) {} 894 } catch (_) {}
369 if (x == 2) break; 895 if (x == 2) break;
370 } 896 }
371 }, 5); 897 }, 5);
372 assertEquals([1], log); 898 assertEquals([1], log);
373 } 899 }
OLDNEW
« src/parsing/pattern-rewriter.cc ('K') | « test/cctest/interpreter/bytecode_expectations/ForOf.golden ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698