Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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(); |
| OLD | NEW |