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

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

Issue 14582007: Implement yield* (delegating yield) (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Created 7 years, 7 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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 throw (yield (1 + (yield 2) + 3)) 300 throw (yield (1 + (yield 2) + 3))
301 } catch (e) { 301 } catch (e) {
302 if (typeof e == 'object') throw e; 302 if (typeof e == 'object') throw e;
303 return e + (yield (4 + (yield 5) + 6)); 303 return e + (yield (4 + (yield 5) + 6));
304 } 304 }
305 }, 305 },
306 [2, NaN, 5, NaN, NaN], 306 [2, NaN, 5, NaN, NaN],
307 "foo", 307 "foo",
308 [2, "1foo3", 5, "4foo6", "foofoo"]); 308 [2, "1foo3", 5, "4foo6", "foofoo"]);
309 309
310 // Delegating yield
311 TestGenerator(
312 function* g26() {
313 function* g() { var x = yield 1; yield 2; yield x; return 3; }
314 yield* g();
315 },
316 [1, 2, undefined, undefined],
317 "foo",
318 [1, 2, "foo", undefined]);
319
310 function TestTryCatch() { 320 function TestTryCatch() {
311 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } 321 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; }
312 function Sentinel() {} 322 function Sentinel() {}
313 var iter; 323 var iter;
314 324
315 iter = g(); 325 iter = g();
316 assertIteratorResult(1, false, iter.next()); 326 assertIteratorResult(1, false, iter.next());
317 assertIteratorResult(2, false, iter.next()); 327 assertIteratorResult(2, false, iter.next());
318 assertIteratorResult(3, false, iter.next()); 328 assertIteratorResult(3, false, iter.next());
319 assertIteratorResult(undefined, true, iter.next()); 329 assertIteratorResult(undefined, true, iter.next());
(...skipping 19 matching lines...) Expand all
339 349
340 iter = g(); 350 iter = g();
341 assertIteratorResult(1, false, iter.next()); 351 assertIteratorResult(1, false, iter.next());
342 assertIteratorResult(2, false, iter.next()); 352 assertIteratorResult(2, false, iter.next());
343 var exn = new Sentinel; 353 var exn = new Sentinel;
344 assertIteratorResult(exn, false, iter.throw(exn)); 354 assertIteratorResult(exn, false, iter.throw(exn));
345 assertIteratorResult(3, false, iter.next()); 355 assertIteratorResult(3, false, iter.next());
346 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 356 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
347 assertThrows(function() { iter.next(); }, Error); 357 assertThrows(function() { iter.next(); }, Error);
348 358
359 // ***
349 iter = g(); 360 iter = g();
350 assertIteratorResult(1, false, iter.next()); 361 assertIteratorResult(1, false, iter.next());
351 assertIteratorResult(2, false, iter.next()); 362 assertIteratorResult(2, false, iter.next());
352 var exn = new Sentinel; 363 var exn = new Sentinel;
353 assertIteratorResult(exn, false, iter.throw(exn)); 364 assertIteratorResult(exn, false, iter.throw(exn));
354 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 365 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
355 assertThrows(function() { iter.next(); }, Error); 366 assertThrows(function() { iter.next(); }, Error);
356 367
357 iter = g(); 368 iter = g();
358 assertIteratorResult(1, false, iter.next()); 369 assertIteratorResult(1, false, iter.next());
359 assertIteratorResult(2, false, iter.next()); 370 assertIteratorResult(2, false, iter.next());
360 assertIteratorResult(3, false, iter.next()); 371 assertIteratorResult(3, false, iter.next());
361 assertIteratorResult(undefined, true, iter.next()); 372 assertIteratorResult(undefined, true, iter.next());
362 assertThrows(function() { iter.next(); }, Error); 373 assertThrows(function() { iter.next(); }, Error);
374
375 // same as *** above with delegate
rossberg 2013/05/13 11:14:56 Would be cool if all these Test functions were fac
376 iter = (function* () { yield* g(); })();
377 assertIteratorResult(1, false, iter.next());
378 assertIteratorResult(2, false, iter.next());
379 var exn = new Sentinel;
380 assertIteratorResult(exn, false, iter.throw(exn));
381 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
382 assertThrows(function() { iter.next(); }, Error);
363 } 383 }
364 TestTryCatch(); 384 TestTryCatch();
365 385
366 function TestTryFinally() { 386 function TestTryFinally() {
367 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } 387 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; }
368 function Sentinel() {} 388 function Sentinel() {}
369 function Sentinel2() {} 389 function Sentinel2() {}
370 var iter; 390 var iter;
371 391
372 iter = g(); 392 iter = g();
(...skipping 13 matching lines...) Expand all
386 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 406 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
387 assertThrows(function() { iter.next(); }, Error); 407 assertThrows(function() { iter.next(); }, Error);
388 408
389 iter = g(); 409 iter = g();
390 assertIteratorResult(1, false, iter.next()); 410 assertIteratorResult(1, false, iter.next());
391 assertIteratorResult(2, false, iter.next()); 411 assertIteratorResult(2, false, iter.next());
392 assertIteratorResult(3, false, iter.throw(new Sentinel)); 412 assertIteratorResult(3, false, iter.throw(new Sentinel));
393 assertThrows(function() { iter.next(); }, Sentinel); 413 assertThrows(function() { iter.next(); }, Sentinel);
394 assertThrows(function() { iter.next(); }, Error); 414 assertThrows(function() { iter.next(); }, Error);
395 415
416 // ***
396 iter = g(); 417 iter = g();
397 assertIteratorResult(1, false, iter.next()); 418 assertIteratorResult(1, false, iter.next());
398 assertIteratorResult(2, false, iter.next()); 419 assertIteratorResult(2, false, iter.next());
399 assertIteratorResult(3, false, iter.throw(new Sentinel)); 420 assertIteratorResult(3, false, iter.throw(new Sentinel));
400 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); 421 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
401 assertThrows(function() { iter.next(); }, Error); 422 assertThrows(function() { iter.next(); }, Error);
402 423
403 iter = g(); 424 iter = g();
404 assertIteratorResult(1, false, iter.next()); 425 assertIteratorResult(1, false, iter.next());
405 assertIteratorResult(2, false, iter.next()); 426 assertIteratorResult(2, false, iter.next());
406 assertIteratorResult(3, false, iter.next()); 427 assertIteratorResult(3, false, iter.next());
407 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 428 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
408 assertThrows(function() { iter.next(); }, Error); 429 assertThrows(function() { iter.next(); }, Error);
409 430
410 iter = g(); 431 iter = g();
411 assertIteratorResult(1, false, iter.next()); 432 assertIteratorResult(1, false, iter.next());
412 assertIteratorResult(2, false, iter.next()); 433 assertIteratorResult(2, false, iter.next());
413 assertIteratorResult(3, false, iter.next()); 434 assertIteratorResult(3, false, iter.next());
414 assertIteratorResult(4, false, iter.next()); 435 assertIteratorResult(4, false, iter.next());
415 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); 436 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
416 assertThrows(function() { iter.next(); }, Error); 437 assertThrows(function() { iter.next(); }, Error);
417 438
418 iter = g(); 439 iter = g();
419 assertIteratorResult(1, false, iter.next()); 440 assertIteratorResult(1, false, iter.next());
420 assertIteratorResult(2, false, iter.next()); 441 assertIteratorResult(2, false, iter.next());
421 assertIteratorResult(3, false, iter.next()); 442 assertIteratorResult(3, false, iter.next());
422 assertIteratorResult(4, false, iter.next()); 443 assertIteratorResult(4, false, iter.next());
423 assertIteratorResult(undefined, true, iter.next()); 444 assertIteratorResult(undefined, true, iter.next());
424 assertThrows(function() { iter.next(); }, Error); 445 assertThrows(function() { iter.next(); }, Error);
446
447 // same as *** above with delegate
448 iter = (function* () { yield* g(); })();
449 assertIteratorResult(1, false, iter.next());
450 assertIteratorResult(2, false, iter.next());
451 assertIteratorResult(3, false, iter.throw(new Sentinel));
452 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
453 assertThrows(function() { iter.next(); }, Error);
425 } 454 }
426 TestTryFinally(); 455 TestTryFinally();
427 456
428 function TestNestedTry() { 457 function TestNestedTry() {
429 function* g() { 458 function* g() {
430 try { 459 try {
431 yield 1; 460 yield 1;
432 try { yield 2; } catch (e) { yield e; } 461 try { yield 2; } catch (e) { yield e; }
433 yield 3; 462 yield 3;
434 } finally { 463 } finally {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 assertIteratorResult(1, false, iter.next()); 498 assertIteratorResult(1, false, iter.next());
470 assertIteratorResult(2, false, iter.next()); 499 assertIteratorResult(2, false, iter.next());
471 var exn = new Sentinel; 500 var exn = new Sentinel;
472 assertIteratorResult(exn, false, iter.throw(exn)); 501 assertIteratorResult(exn, false, iter.throw(exn));
473 assertIteratorResult(3, false, iter.next()); 502 assertIteratorResult(3, false, iter.next());
474 assertIteratorResult(4, false, iter.next()); 503 assertIteratorResult(4, false, iter.next());
475 assertIteratorResult(5, false, iter.next()); 504 assertIteratorResult(5, false, iter.next());
476 assertIteratorResult(undefined, true, iter.next()); 505 assertIteratorResult(undefined, true, iter.next());
477 assertThrows(function() { iter.next(); }, Error); 506 assertThrows(function() { iter.next(); }, Error);
478 507
508 // ***
479 iter = g(); 509 iter = g();
480 assertIteratorResult(1, false, iter.next()); 510 assertIteratorResult(1, false, iter.next());
481 assertIteratorResult(2, false, iter.next()); 511 assertIteratorResult(2, false, iter.next());
482 var exn = new Sentinel; 512 var exn = new Sentinel;
483 assertIteratorResult(exn, false, iter.throw(exn)); 513 assertIteratorResult(exn, false, iter.throw(exn));
484 assertIteratorResult(4, false, iter.throw(new Sentinel2)); 514 assertIteratorResult(4, false, iter.throw(new Sentinel2));
485 assertThrows(function() { iter.next(); }, Sentinel2); 515 assertThrows(function() { iter.next(); }, Sentinel2);
486 assertThrows(function() { iter.next(); }, Error); 516 assertThrows(function() { iter.next(); }, Error);
487 517
488 iter = g(); 518 iter = g();
489 assertIteratorResult(1, false, iter.next()); 519 assertIteratorResult(1, false, iter.next());
490 assertIteratorResult(2, false, iter.next()); 520 assertIteratorResult(2, false, iter.next());
491 var exn = new Sentinel; 521 var exn = new Sentinel;
492 assertIteratorResult(exn, false, iter.throw(exn)); 522 assertIteratorResult(exn, false, iter.throw(exn));
493 assertIteratorResult(3, false, iter.next()); 523 assertIteratorResult(3, false, iter.next());
494 assertIteratorResult(4, false, iter.throw(new Sentinel2)); 524 assertIteratorResult(4, false, iter.throw(new Sentinel2));
495 assertThrows(function() { iter.next(); }, Sentinel2); 525 assertThrows(function() { iter.next(); }, Sentinel2);
496 assertThrows(function() { iter.next(); }, Error); 526 assertThrows(function() { iter.next(); }, Error);
497 527
528 // same as *** above with delegate
529 iter = (function* () { yield* g(); })();
530 assertIteratorResult(1, false, iter.next());
531 assertIteratorResult(2, false, iter.next());
532 var exn = new Sentinel;
533 assertIteratorResult(exn, false, iter.throw(exn));
534 assertIteratorResult(4, false, iter.throw(new Sentinel2));
535 assertThrows(function() { iter.next(); }, Sentinel2);
536 assertThrows(function() { iter.next(); }, Error);
537
498 // That's probably enough. 538 // That's probably enough.
499 } 539 }
500 TestNestedTry(); 540 TestNestedTry();
501 541
502 function TestRecursion() { 542 function TestRecursion() {
503 function TestNextRecursion() { 543 function TestNextRecursion() {
504 function* g() { yield iter.next(); } 544 function* g() { yield iter.next(); }
505 var iter = g(); 545 var iter = g();
506 return iter.next(); 546 return iter.next();
507 } 547 }
508 function TestSendRecursion() { 548 function TestSendRecursion() {
509 function* g() { yield iter.send(42); } 549 function* g() { yield iter.send(42); }
510 var iter = g(); 550 var iter = g();
511 return iter.next(); 551 return iter.next();
512 } 552 }
513 function TestThrowRecursion() { 553 function TestThrowRecursion() {
514 function* g() { yield iter.throw(1); } 554 function* g() { yield iter.throw(1); }
515 var iter = g(); 555 var iter = g();
516 return iter.next(); 556 return iter.next();
517 } 557 }
518 assertThrows(TestNextRecursion, Error); 558 assertThrows(TestNextRecursion, Error);
519 assertThrows(TestSendRecursion, Error); 559 assertThrows(TestSendRecursion, Error);
520 assertThrows(TestThrowRecursion, Error); 560 assertThrows(TestThrowRecursion, Error);
521 } 561 }
522 TestRecursion(); 562 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