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

Side by Side Diff: test/mjsunit/harmony/generators-iteration.js

Issue 136003003: Closed generator returns a completed object instead of throwing a error (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Rev 2 Created 6 years, 11 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
« src/ia32/full-codegen-ia32.cc ('K') | « src/x64/full-codegen-x64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 17 matching lines...) Expand all
28 // Flags: --harmony-generators --expose-gc 28 // Flags: --harmony-generators --expose-gc
29 29
30 // Test generator iteration. 30 // Test generator iteration.
31 31
32 var GeneratorFunction = (function*(){yield 1;}).__proto__.constructor; 32 var GeneratorFunction = (function*(){yield 1;}).__proto__.constructor;
33 33
34 function assertIteratorResult(value, done, result) { 34 function assertIteratorResult(value, done, result) {
35 assertEquals({ value: value, done: done}, result); 35 assertEquals({ value: value, done: done}, result);
36 } 36 }
37 37
38 function assertIteratorIsClosed(iter) {
39 assertIteratorResult(undefined, true, iter.next());
40 assertDoesNotThrow(function() { iter.next(); });
41 }
42
43 function assertThrownIteratorIsClosed(iter) {
44 // TODO(yusukesuzuki): Since status of a thrown generator is "executing",
45 // following tests are failed.
46 // https://code.google.com/p/v8/issues/detail?id=3096
47 // assertIteratorIsClosed(iter);
48 }
49
38 function TestGeneratorResultPrototype() { 50 function TestGeneratorResultPrototype() {
39 function* g() { yield 1; } 51 function* g() { yield 1; }
40 var iter = g(); 52 var iter = g();
41 var result = iter.next(); 53 var result = iter.next();
42 54
43 assertSame(Object.prototype, Object.getPrototypeOf(result)); 55 assertSame(Object.prototype, Object.getPrototypeOf(result));
44 property_names = Object.getOwnPropertyNames(result); 56 property_names = Object.getOwnPropertyNames(result);
45 property_names.sort(); 57 property_names.sort();
46 assertEquals(["done", "value"], property_names); 58 assertEquals(["done", "value"], property_names);
47 assertIteratorResult(1, false, result); 59 assertIteratorResult(1, false, result);
48 } 60 }
49 TestGeneratorResultPrototype() 61 TestGeneratorResultPrototype()
50 62
51 function TestGenerator(g, expected_values_for_next, 63 function TestGenerator(g, expected_values_for_next,
52 send_val, expected_values_for_send) { 64 send_val, expected_values_for_send) {
53 function testNext(thunk) { 65 function testNext(thunk) {
54 var iter = thunk(); 66 var iter = thunk();
55 for (var i = 0; i < expected_values_for_next.length; i++) { 67 for (var i = 0; i < expected_values_for_next.length; i++) {
56 assertIteratorResult(expected_values_for_next[i], 68 assertIteratorResult(expected_values_for_next[i],
57 i == expected_values_for_next.length - 1, 69 i == expected_values_for_next.length - 1,
58 iter.next()); 70 iter.next());
59 } 71 }
60 assertThrows(function() { iter.next(); }, Error); 72 assertIteratorIsClosed(iter);
61 } 73 }
62 function testSend(thunk) { 74 function testSend(thunk) {
63 var iter = thunk(); 75 var iter = thunk();
64 for (var i = 0; i < expected_values_for_send.length; i++) { 76 for (var i = 0; i < expected_values_for_send.length; i++) {
65 assertIteratorResult(expected_values_for_send[i], 77 assertIteratorResult(expected_values_for_send[i],
66 i == expected_values_for_send.length - 1, 78 i == expected_values_for_send.length - 1,
67 iter.next(send_val)); 79 iter.next(send_val));
68 } 80 }
69 assertThrows(function() { iter.next(send_val); }, Error); 81 assertIteratorIsClosed(iter);
70 } 82 }
71 function testThrow(thunk) { 83 function testThrow(thunk) {
72 for (var i = 0; i < expected_values_for_next.length; i++) { 84 for (var i = 0; i < expected_values_for_next.length; i++) {
73 var iter = thunk(); 85 var iter = thunk();
74 for (var j = 0; j < i; j++) { 86 for (var j = 0; j < i; j++) {
75 assertIteratorResult(expected_values_for_next[j], 87 assertIteratorResult(expected_values_for_next[j],
76 j == expected_values_for_next.length - 1, 88 j == expected_values_for_next.length - 1,
77 iter.next()); 89 iter.next());
78 } 90 }
79 function Sentinel() {} 91 function Sentinel() {}
80 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); 92 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel);
81 assertThrows(function () { iter.next(); }, Error); 93 assertThrownIteratorIsClosed(iter);
82 } 94 }
83 } 95 }
84 96
85 testNext(g); 97 testNext(g);
86 testSend(g); 98 testSend(g);
87 testThrow(g); 99 testThrow(g);
88 100
89 testNext(function*() { return yield* g(); }); 101 testNext(function*() { return yield* g(); });
90 testSend(function*() { return yield* g(); }); 102 testSend(function*() { return yield* g(); });
91 testThrow(function*() { return yield* g(); }); 103 testThrow(function*() { return yield* g(); });
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 TestDelegatingYield(); 398 TestDelegatingYield();
387 399
388 function TestTryCatch(instantiate) { 400 function TestTryCatch(instantiate) {
389 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } 401 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; }
390 function Sentinel() {} 402 function Sentinel() {}
391 403
392 function Test1(iter) { 404 function Test1(iter) {
393 assertIteratorResult(1, false, iter.next()); 405 assertIteratorResult(1, false, iter.next());
394 assertIteratorResult(2, false, iter.next()); 406 assertIteratorResult(2, false, iter.next());
395 assertIteratorResult(3, false, iter.next()); 407 assertIteratorResult(3, false, iter.next());
396 assertIteratorResult(undefined, true, iter.next()); 408 assertIteratorIsClosed(iter);
397 assertThrows(function() { iter.next(); }, Error);
398 } 409 }
399 Test1(instantiate(g)); 410 Test1(instantiate(g));
400 411
401 function Test2(iter) { 412 function Test2(iter) {
402 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 413 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
403 assertThrows(function() { iter.next(); }, Error); 414 assertThrownIteratorIsClosed(iter);
404 } 415 }
405 Test2(instantiate(g)); 416 Test2(instantiate(g));
406 417
407 function Test3(iter) { 418 function Test3(iter) {
408 assertIteratorResult(1, false, iter.next()); 419 assertIteratorResult(1, false, iter.next());
409 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 420 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
410 assertThrows(function() { iter.next(); }, Error); 421 assertThrownIteratorIsClosed(iter);
411 } 422 }
412 Test3(instantiate(g)); 423 Test3(instantiate(g));
413 424
414 function Test4(iter) { 425 function Test4(iter) {
415 assertIteratorResult(1, false, iter.next()); 426 assertIteratorResult(1, false, iter.next());
416 assertIteratorResult(2, false, iter.next()); 427 assertIteratorResult(2, false, iter.next());
417 var exn = new Sentinel; 428 var exn = new Sentinel;
418 assertIteratorResult(exn, false, iter.throw(exn)); 429 assertIteratorResult(exn, false, iter.throw(exn));
419 assertIteratorResult(3, false, iter.next()); 430 assertIteratorResult(3, false, iter.next());
420 assertIteratorResult(undefined, true, iter.next()); 431 assertIteratorIsClosed(iter);
421 assertThrows(function() { iter.next(); }, Error);
422 } 432 }
423 Test4(instantiate(g)); 433 Test4(instantiate(g));
424 434
425 function Test5(iter) { 435 function Test5(iter) {
426 assertIteratorResult(1, false, iter.next()); 436 assertIteratorResult(1, false, iter.next());
427 assertIteratorResult(2, false, iter.next()); 437 assertIteratorResult(2, false, iter.next());
428 var exn = new Sentinel; 438 var exn = new Sentinel;
429 assertIteratorResult(exn, false, iter.throw(exn)); 439 assertIteratorResult(exn, false, iter.throw(exn));
430 assertIteratorResult(3, false, iter.next()); 440 assertIteratorResult(3, false, iter.next());
431 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 441 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
432 assertThrows(function() { iter.next(); }, Error); 442 assertThrownIteratorIsClosed(iter);
433
434 } 443 }
435 Test5(instantiate(g)); 444 Test5(instantiate(g));
436 445
437 function Test6(iter) { 446 function Test6(iter) {
438 assertIteratorResult(1, false, iter.next()); 447 assertIteratorResult(1, false, iter.next());
439 assertIteratorResult(2, false, iter.next()); 448 assertIteratorResult(2, false, iter.next());
440 var exn = new Sentinel; 449 var exn = new Sentinel;
441 assertIteratorResult(exn, false, iter.throw(exn)); 450 assertIteratorResult(exn, false, iter.throw(exn));
442 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 451 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
443 assertThrows(function() { iter.next(); }, Error); 452 assertThrownIteratorIsClosed(iter);
444 } 453 }
445 Test6(instantiate(g)); 454 Test6(instantiate(g));
446 455
447 function Test7(iter) { 456 function Test7(iter) {
448 assertIteratorResult(1, false, iter.next()); 457 assertIteratorResult(1, false, iter.next());
449 assertIteratorResult(2, false, iter.next()); 458 assertIteratorResult(2, false, iter.next());
450 assertIteratorResult(3, false, iter.next()); 459 assertIteratorResult(3, false, iter.next());
451 assertIteratorResult(undefined, true, iter.next()); 460 assertIteratorIsClosed(iter);
452 assertThrows(function() { iter.next(); }, Error);
453 } 461 }
454 Test7(instantiate(g)); 462 Test7(instantiate(g));
455 } 463 }
456 TestTryCatch(function (g) { return g(); }); 464 TestTryCatch(function (g) { return g(); });
457 TestTryCatch(function* (g) { return yield* g(); }); 465 TestTryCatch(function* (g) { return yield* g(); });
458 466
459 function TestTryFinally(instantiate) { 467 function TestTryFinally(instantiate) {
460 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } 468 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; }
461 function Sentinel() {} 469 function Sentinel() {}
462 function Sentinel2() {} 470 function Sentinel2() {}
463 471
464 function Test1(iter) { 472 function Test1(iter) {
465 assertIteratorResult(1, false, iter.next()); 473 assertIteratorResult(1, false, iter.next());
466 assertIteratorResult(2, false, iter.next()); 474 assertIteratorResult(2, false, iter.next());
467 assertIteratorResult(3, false, iter.next()); 475 assertIteratorResult(3, false, iter.next());
468 assertIteratorResult(4, false, iter.next()); 476 assertIteratorResult(4, false, iter.next());
469 assertIteratorResult(undefined, true, iter.next()); 477 assertIteratorIsClosed(iter);
470 assertThrows(function() { iter.next(); }, Error);
471 } 478 }
472 Test1(instantiate(g)); 479 Test1(instantiate(g));
473 480
474 function Test2(iter) { 481 function Test2(iter) {
475 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 482 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
476 assertThrows(function() { iter.next(); }, Error); 483 assertThrownIteratorIsClosed(iter);
477 } 484 }
478 Test2(instantiate(g)); 485 Test2(instantiate(g));
479 486
480 function Test3(iter) { 487 function Test3(iter) {
481 assertIteratorResult(1, false, iter.next()); 488 assertIteratorResult(1, false, iter.next());
482 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 489 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
483 assertThrows(function() { iter.next(); }, Error); 490 assertThrownIteratorIsClosed(iter);
484 } 491 }
485 Test3(instantiate(g)); 492 Test3(instantiate(g));
486 493
487 function Test4(iter) { 494 function Test4(iter) {
488 assertIteratorResult(1, false, iter.next()); 495 assertIteratorResult(1, false, iter.next());
489 assertIteratorResult(2, false, iter.next()); 496 assertIteratorResult(2, false, iter.next());
490 assertIteratorResult(3, false, iter.throw(new Sentinel)); 497 assertIteratorResult(3, false, iter.throw(new Sentinel));
491 assertThrows(function() { iter.next(); }, Sentinel); 498 assertThrows(function() { iter.next(); }, Sentinel);
492 assertThrows(function() { iter.next(); }, Error); 499 assertThrownIteratorIsClosed(iter);
493
494 } 500 }
495 Test4(instantiate(g)); 501 Test4(instantiate(g));
496 502
497 function Test5(iter) { 503 function Test5(iter) {
498 assertIteratorResult(1, false, iter.next()); 504 assertIteratorResult(1, false, iter.next());
499 assertIteratorResult(2, false, iter.next()); 505 assertIteratorResult(2, false, iter.next());
500 assertIteratorResult(3, false, iter.throw(new Sentinel)); 506 assertIteratorResult(3, false, iter.throw(new Sentinel));
501 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); 507 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
502 assertThrows(function() { iter.next(); }, Error); 508 assertThrownIteratorIsClosed(iter);
503 } 509 }
504 Test5(instantiate(g)); 510 Test5(instantiate(g));
505 511
506 function Test6(iter) { 512 function Test6(iter) {
507 assertIteratorResult(1, false, iter.next()); 513 assertIteratorResult(1, false, iter.next());
508 assertIteratorResult(2, false, iter.next()); 514 assertIteratorResult(2, false, iter.next());
509 assertIteratorResult(3, false, iter.next()); 515 assertIteratorResult(3, false, iter.next());
510 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 516 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
511 assertThrows(function() { iter.next(); }, Error); 517 assertThrownIteratorIsClosed(iter);
512 } 518 }
513 Test6(instantiate(g)); 519 Test6(instantiate(g));
514 520
515 function Test7(iter) { 521 function Test7(iter) {
516 assertIteratorResult(1, false, iter.next()); 522 assertIteratorResult(1, false, iter.next());
517 assertIteratorResult(2, false, iter.next()); 523 assertIteratorResult(2, false, iter.next());
518 assertIteratorResult(3, false, iter.next()); 524 assertIteratorResult(3, false, iter.next());
519 assertIteratorResult(4, false, iter.next()); 525 assertIteratorResult(4, false, iter.next());
520 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 526 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
521 assertThrows(function() { iter.next(); }, Error); 527 assertThrownIteratorIsClosed(iter);
522 } 528 }
523 Test7(instantiate(g)); 529 Test7(instantiate(g));
524 530
525 function Test8(iter) { 531 function Test8(iter) {
526 assertIteratorResult(1, false, iter.next()); 532 assertIteratorResult(1, false, iter.next());
527 assertIteratorResult(2, false, iter.next()); 533 assertIteratorResult(2, false, iter.next());
528 assertIteratorResult(3, false, iter.next()); 534 assertIteratorResult(3, false, iter.next());
529 assertIteratorResult(4, false, iter.next()); 535 assertIteratorResult(4, false, iter.next());
530 assertIteratorResult(undefined, true, iter.next()); 536 assertIteratorIsClosed(iter);
531 assertThrows(function() { iter.next(); }, Error);
532
533 } 537 }
534 Test8(instantiate(g)); 538 Test8(instantiate(g));
535 } 539 }
536 TestTryFinally(function (g) { return g(); }); 540 TestTryFinally(function (g) { return g(); });
537 TestTryFinally(function* (g) { return yield* g(); }); 541 TestTryFinally(function* (g) { return yield* g(); });
538 542
539 function TestNestedTry(instantiate) { 543 function TestNestedTry(instantiate) {
540 function* g() { 544 function* g() {
541 try { 545 try {
542 yield 1; 546 yield 1;
543 try { yield 2; } catch (e) { yield e; } 547 try { yield 2; } catch (e) { yield e; }
544 yield 3; 548 yield 3;
545 } finally { 549 } finally {
546 yield 4; 550 yield 4;
547 } 551 }
548 yield 5; 552 yield 5;
549 } 553 }
550 function Sentinel() {} 554 function Sentinel() {}
551 function Sentinel2() {} 555 function Sentinel2() {}
552 556
553 function Test1(iter) { 557 function Test1(iter) {
554 assertIteratorResult(1, false, iter.next()); 558 assertIteratorResult(1, false, iter.next());
555 assertIteratorResult(2, false, iter.next()); 559 assertIteratorResult(2, false, iter.next());
556 assertIteratorResult(3, false, iter.next()); 560 assertIteratorResult(3, false, iter.next());
557 assertIteratorResult(4, false, iter.next()); 561 assertIteratorResult(4, false, iter.next());
558 assertIteratorResult(5, false, iter.next()); 562 assertIteratorResult(5, false, iter.next());
559 assertIteratorResult(undefined, true, iter.next()); 563 assertIteratorIsClosed(iter);
560 assertThrows(function() { iter.next(); }, Error);
561 } 564 }
562 Test1(instantiate(g)); 565 Test1(instantiate(g));
563 566
564 function Test2(iter) { 567 function Test2(iter) {
565 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 568 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
566 assertThrows(function() { iter.next(); }, Error); 569 assertThrownIteratorIsClosed(iter);
567 } 570 }
568 Test2(instantiate(g)); 571 Test2(instantiate(g));
569 572
570 function Test3(iter) { 573 function Test3(iter) {
571 assertIteratorResult(1, false, iter.next()); 574 assertIteratorResult(1, false, iter.next());
572 assertIteratorResult(4, false, iter.throw(new Sentinel)); 575 assertIteratorResult(4, false, iter.throw(new Sentinel));
573 assertThrows(function() { iter.next(); }, Sentinel); 576 assertThrows(function() { iter.next(); }, Sentinel);
574 assertThrows(function() { iter.next(); }, Error); 577 assertThrownIteratorIsClosed(iter);
575 } 578 }
576 Test3(instantiate(g)); 579 Test3(instantiate(g));
577 580
578 function Test4(iter) { 581 function Test4(iter) {
579 assertIteratorResult(1, false, iter.next()); 582 assertIteratorResult(1, false, iter.next());
580 assertIteratorResult(4, false, iter.throw(new Sentinel)); 583 assertIteratorResult(4, false, iter.throw(new Sentinel));
581 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); 584 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
582 assertThrows(function() { iter.next(); }, Error); 585 assertThrownIteratorIsClosed(iter);
583 } 586 }
584 Test4(instantiate(g)); 587 Test4(instantiate(g));
585 588
586 function Test5(iter) { 589 function Test5(iter) {
587 assertIteratorResult(1, false, iter.next()); 590 assertIteratorResult(1, false, iter.next());
588 assertIteratorResult(2, false, iter.next()); 591 assertIteratorResult(2, false, iter.next());
589 var exn = new Sentinel; 592 var exn = new Sentinel;
590 assertIteratorResult(exn, false, iter.throw(exn)); 593 assertIteratorResult(exn, false, iter.throw(exn));
591 assertIteratorResult(3, false, iter.next()); 594 assertIteratorResult(3, false, iter.next());
592 assertIteratorResult(4, false, iter.next()); 595 assertIteratorResult(4, false, iter.next());
593 assertIteratorResult(5, false, iter.next()); 596 assertIteratorResult(5, false, iter.next());
594 assertIteratorResult(undefined, true, iter.next()); 597 assertIteratorIsClosed(iter);
595 assertThrows(function() { iter.next(); }, Error);
596
597 } 598 }
598 Test5(instantiate(g)); 599 Test5(instantiate(g));
599 600
600 function Test6(iter) { 601 function Test6(iter) {
601 assertIteratorResult(1, false, iter.next()); 602 assertIteratorResult(1, false, iter.next());
602 assertIteratorResult(2, false, iter.next()); 603 assertIteratorResult(2, false, iter.next());
603 var exn = new Sentinel; 604 var exn = new Sentinel;
604 assertIteratorResult(exn, false, iter.throw(exn)); 605 assertIteratorResult(exn, false, iter.throw(exn));
605 assertIteratorResult(4, false, iter.throw(new Sentinel2)); 606 assertIteratorResult(4, false, iter.throw(new Sentinel2));
606 assertThrows(function() { iter.next(); }, Sentinel2); 607 assertThrows(function() { iter.next(); }, Sentinel2);
607 assertThrows(function() { iter.next(); }, Error); 608 assertThrownIteratorIsClosed(iter);
608 } 609 }
609 Test6(instantiate(g)); 610 Test6(instantiate(g));
610 611
611 function Test7(iter) { 612 function Test7(iter) {
612 assertIteratorResult(1, false, iter.next()); 613 assertIteratorResult(1, false, iter.next());
613 assertIteratorResult(2, false, iter.next()); 614 assertIteratorResult(2, false, iter.next());
614 var exn = new Sentinel; 615 var exn = new Sentinel;
615 assertIteratorResult(exn, false, iter.throw(exn)); 616 assertIteratorResult(exn, false, iter.throw(exn));
616 assertIteratorResult(3, false, iter.next()); 617 assertIteratorResult(3, false, iter.next());
617 assertIteratorResult(4, false, iter.throw(new Sentinel2)); 618 assertIteratorResult(4, false, iter.throw(new Sentinel2));
618 assertThrows(function() { iter.next(); }, Sentinel2); 619 assertThrows(function() { iter.next(); }, Sentinel2);
619 assertThrows(function() { iter.next(); }, Error); 620 assertThrownIteratorIsClosed(iter);
620
621 } 621 }
622 Test7(instantiate(g)); 622 Test7(instantiate(g));
623 623
624 // That's probably enough. 624 // That's probably enough.
625 } 625 }
626 TestNestedTry(function (g) { return g(); }); 626 TestNestedTry(function (g) { return g(); });
627 TestNestedTry(function* (g) { return yield* g(); }); 627 TestNestedTry(function* (g) { return yield* g(); });
628 628
629 function TestRecursion() { 629 function TestRecursion() {
630 function TestNextRecursion() { 630 function TestNextRecursion() {
631 function* g() { yield iter.next(); } 631 function* g() { yield iter.next(); }
632 var iter = g(); 632 var iter = g();
633 return iter.next(); 633 return iter.next();
634 } 634 }
635 function TestSendRecursion() { 635 function TestSendRecursion() {
636 function* g() { yield iter.next(42); } 636 function* g() { yield iter.next(42); }
637 var iter = g(); 637 var iter = g();
638 return iter.next(); 638 return iter.next();
639 } 639 }
640 function TestThrowRecursion() { 640 function TestThrowRecursion() {
641 function* g() { yield iter.throw(1); } 641 function* g() { yield iter.throw(1); }
642 var iter = g(); 642 var iter = g();
643 return iter.next(); 643 return iter.next();
644 } 644 }
645 assertThrows(TestNextRecursion, Error); 645 assertThrows(TestNextRecursion, Error);
646 assertThrows(TestSendRecursion, Error); 646 assertThrows(TestSendRecursion, Error);
647 assertThrows(TestThrowRecursion, Error); 647 assertThrows(TestThrowRecursion, Error);
648 } 648 }
649 TestRecursion(); 649 TestRecursion();
OLDNEW
« src/ia32/full-codegen-ia32.cc ('K') | « src/x64/full-codegen-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698