1assert_equal %q{[1, 2, 4, 5, 6, 7, 8]}, %q{$a = []; begin; ; $a << 1 2 [1,2].each{; $a << 2 3 break; $a << 3 4 }; $a << 4 5 begin; $a << 5 6 ensure; $a << 6 7 end; $a << 7 8; $a << 8 9; rescue Exception; $a << 99; end; $a} 10assert_equal %q{[1, 2, 3, 5, 6, 7, 8]}, %q{$a = []; begin; ; $a << 1 11 begin; $a << 2 12 [1,2].each do; $a << 3 13 break; $a << 4 14 end; $a << 5 15 ensure; $a << 6 16 end; $a << 7 17; $a << 8 18; rescue Exception; $a << 99; end; $a} 19assert_equal %q{ok}, %q{ 20 ["a"].inject("ng"){|x,y| 21 break :ok 22 } 23} 24assert_equal %q{ok}, %q{ 25 unless ''.respond_to? :lines 26 class String 27 def lines 28 self 29 end 30 end 31 end 32 33 ('a').lines.map{|e| 34 break :ok 35 } 36} 37assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1 38 ["a"].inject("ng"){|x,y|; $a << 2 39 break :ok; $a << 3 40 }; $a << 4 41; $a << 5 42; rescue Exception; $a << 99; end; $a} 43assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1 44 ('a'..'b').map{|e|; $a << 2 45 break :ok; $a << 3 46 }; $a << 4 47; $a << 5 48; rescue Exception; $a << 99; end; $a} 49assert_equal %q{[1, 2, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1 50 [1,2].each do; $a << 2 51 begin; $a << 3 52 break; $a << 4 53 ensure; $a << 5 54 end; $a << 6 55 end; $a << 7 56; $a << 8 57; rescue Exception; $a << 99; end; $a} 58assert_equal %q{[1, 2, 3, 4, 5, 6, 9, 10]}, %q{$a = []; begin; ; $a << 1 59 i=0; $a << 2 60 while i<3; $a << 3 61 i+=1; $a << 4 62 begin; $a << 5 63 ensure; $a << 6 64 break; $a << 7 65 end; $a << 8 66 end; $a << 9 67; $a << 10 68; rescue Exception; $a << 99; end; $a} 69assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1 70 i=0; $a << 2 71 while i<3; $a << 3 72 i+=1; $a << 4 73 begin; $a << 5 74 raise; $a << 6 75 ensure; $a << 7 76 break; $a << 8 77 end; $a << 9 78 end; $a << 10 79; $a << 11 80; rescue Exception; $a << 99; end; $a} 81assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1 82 i=0; $a << 2 83 while i<3; $a << 3 84 i+=1; $a << 4 85 begin; $a << 5 86 raise; $a << 6 87 rescue; $a << 7 88 break; $a << 8 89 end; $a << 9 90 end; $a << 10 91; $a << 11 92; rescue Exception; $a << 99; end; $a} 93assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1 94 [1,2].each do; $a << 2 95 begin; $a << 3 96 raise StandardError; $a << 4 97 ensure; $a << 5 98 break; $a << 6 99 end; $a << 7 100 end; $a << 8 101; $a << 9 102; rescue Exception; $a << 99; end; $a} 103assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1 104 [1,2].each do; $a << 2 105 begin; $a << 3 106 raise StandardError; $a << 4 107 rescue; $a << 5 108 break; $a << 6 109 end; $a << 7 110 end; $a << 8 111; $a << 9 112; rescue Exception; $a << 99; end; $a} 113assert_equal %q{[1, 2, 3, 4, 6, 8, 10, 11]}, %q{$a = []; begin; ; $a << 1 114 [1,2].each do; $a << 2 115 begin; $a << 3 116 begin; $a << 4 117 break; $a << 5 118 ensure; $a << 6 119 end; $a << 7 120 ensure; $a << 8 121 end; $a << 9 122 end; $a << 10 123; $a << 11 124; rescue Exception; $a << 99; end; $a} 125assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1 126 i = 0; $a << 2 127 while i<3; $a << 3 128 i+=1; $a << 4 129 j = 0; $a << 5 130 while j<3; $a << 6 131 j+=1; $a << 7 132 begin; $a << 8 133 raise; $a << 9 134 rescue; $a << 10 135 break; $a << 11 136 end; $a << 12 137 end; $a << 13 138 end; $a << 14 139; $a << 15 140; rescue Exception; $a << 99; end; $a} 141assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1 142 i = 0; $a << 2 143 while i<3; $a << 3 144 i+=1; $a << 4 145 j = 0; $a << 5 146 while j<3; $a << 6 147 j+=1; $a << 7 148 1.times{; $a << 8 149 begin; $a << 9 150 raise; $a << 10 151 rescue; $a << 11 152 break; $a << 12 153 end; $a << 13 154 }; $a << 14 155 end; $a << 15 156 end; $a << 16 157; $a << 17 158; rescue Exception; $a << 99; end; $a} 159assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1 160 i = 0; $a << 2 161 while i<3; $a << 3 162 i+=1; $a << 4 163 j = 0; $a << 5 164 while j<3; $a << 6 165 j+=1; $a << 7 166 begin; $a << 8 167 raise; $a << 9 168 ensure; $a << 10 169 break; $a << 11 170 end; $a << 12 171 end; $a << 13 172 end; $a << 14 173; $a << 15 174; rescue Exception; $a << 99; end; $a} 175assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1 176 i = 0; $a << 2 177 while i<3; $a << 3 178 i+=1; $a << 4 179 j = 0; $a << 5 180 while j<3; $a << 6 181 j+=1; $a << 7 182 1.times{; $a << 8 183 begin; $a << 9 184 raise; $a << 10 185 ensure; $a << 11 186 break; $a << 12 187 end; $a << 13 188 }; $a << 14 189 end; $a << 15 190 end; $a << 16 191; $a << 17 192; rescue Exception; $a << 99; end; $a} 193assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1 194 while true; $a << 2 195 begin; $a << 3 196 break; $a << 4 197 ensure; $a << 5 198 break; $a << 6 199 end; $a << 7 200 end; $a << 8 201; $a << 9 202; rescue Exception; $a << 99; end; $a} 203assert_equal %q{[1, 2, 3, 5, 99]}, %q{ 204$a = []; 205begin; ; $a << 1 206 while true; $a << 2 207 begin; $a << 3 208 break; $a << 4 209 ensure; $a << 5 210 raise; $a << 6 211 end; $a << 7 212 end; $a << 8 213; $a << 9 214; rescue Exception; $a << 99; end; $a} 215assert_equal %q{[1, 2, 3, 4, 6, 8, 9, 10, 11]}, %q{$a = []; begin; ; $a << 1 216 begin; $a << 2 217 [1,2].each do; $a << 3 218 begin; $a << 4 219 break; $a << 5 220 ensure; $a << 6 221 end; $a << 7 222 end; $a << 8 223 ensure; $a << 9 224 end; $a << 10 225; $a << 11 226; rescue Exception; $a << 99; end; $a} 227assert_equal %q{[1, 2, 4, 99]}, %q{$a = []; begin; ; $a << 1 228 begin; $a << 2 229 raise StandardError; $a << 3 230 ensure; $a << 4 231 end; $a << 5 232; $a << 6 233; rescue Exception; $a << 99; end; $a} 234assert_equal %q{[1, 2, 3, 4]}, %q{$a = []; begin; ; $a << 1 235 begin; $a << 2 236 ensure; $a << 3 237 end ; $a << 4 238; rescue Exception; $a << 99; end; $a} 239assert_equal %q{[1, 2, 3, 5, 99]}, %q{$a = []; begin; ; $a << 1 240 [1,2].each do; $a << 2 241 begin; $a << 3 242 break; $a << 4 243 ensure; $a << 5 244 raise StandardError; $a << 6 245 end; $a << 7 246 end; $a << 8 247; $a << 9 248; rescue Exception; $a << 99; end; $a} 249assert_equal %q{3}, %q{ 250 def m a, b 251 a + b 252 end 253 m(1, 254 while true 255 break 2 256 end 257 ) 258} 259assert_equal %q{4}, %q{ 260 def m a, b 261 a + b 262 end 263 m(1, 264 (i=0; while i<2 265 i+=1 266 class C 267 next 2 268 end 269 end; 3) 270 ) 271} 272assert_equal %q{34}, %q{ 273 def m a, b 274 a+b 275 end 276 m(1, 1.times{break 3}) + 277 m(10, (1.times{next 3}; 20)) 278} 279assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1 280 3.times{; $a << 2 281 class C; $a << 3 282 break; $a << 4 283 end; $a << 5 284 }; $a << 6 285; $a << 7 286; rescue Exception; $a << 99; end; $a} 287assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1 288 3.times{; $a << 2 289 class A; $a << 3 290 class B; $a << 4 291 break; $a << 5 292 end; $a << 6 293 end; $a << 7 294 }; $a << 8 295; $a << 9 296; rescue Exception; $a << 99; end; $a} 297assert_equal %q{[1, 2, 3, 2, 3, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1 298 3.times{; $a << 2 299 class C; $a << 3 300 next; $a << 4 301 end; $a << 5 302 }; $a << 6 303; $a << 7 304; rescue Exception; $a << 99; end; $a} 305assert_equal %q{[1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1 306 3.times{; $a << 2 307 class C; $a << 3 308 class D; $a << 4 309 next; $a << 5 310 end; $a << 6 311 end; $a << 7 312 }; $a << 8 313; $a << 9 314; rescue Exception; $a << 99; end; $a} 315assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1 316 while true; $a << 2 317 class C; $a << 3 318 break; $a << 4 319 end; $a << 5 320 end; $a << 6 321; $a << 7 322; rescue Exception; $a << 99; end; $a} 323assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1 324 while true; $a << 2 325 class C; $a << 3 326 class D; $a << 4 327 break; $a << 5 328 end; $a << 6 329 end; $a << 7 330 end; $a << 8 331; $a << 9 332; rescue Exception; $a << 99; end; $a} 333assert_equal %q{[1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1 334 i=0; $a << 2 335 while i<3; $a << 3 336 i+=1; $a << 4 337 class C; $a << 5 338 next 10; $a << 6 339 end; $a << 7 340 end; $a << 8 341; $a << 9 342; rescue Exception; $a << 99; end; $a} 343assert_equal %q{1}, %q{ 344 1.times{ 345 while true 346 class C 347 begin 348 break 349 ensure 350 break 351 end 352 end 353 end 354 } 355} 356assert_equal %q{[1, 2, 3, 5, 2, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1 357 [1,2].each do; $a << 2 358 begin; $a << 3 359 next; $a << 4 360 ensure; $a << 5 361 end; $a << 6 362 end; $a << 7 363; $a << 8 364; rescue Exception; $a << 99; end; $a} 365assert_equal %q{[1, 2, 6, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1 366 o = "test"; $a << 2 367 def o.test(a); $a << 3 368 return a; $a << 4 369 ensure; $a << 5 370 end; $a << 6 371 o.test(123); $a << 7 372; $a << 8 373; rescue Exception; $a << 99; end; $a} 374assert_equal %q{[1, 4, 7, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1 375 def m1 *args; $a << 2 376 ; $a << 3 377 end; $a << 4 378 def m2; $a << 5 379 m1(:a, :b, (return 1; :c)); $a << 6 380 end; $a << 7 381 m2; $a << 8 382; $a << 9 383; rescue Exception; $a << 99; end; $a} 384assert_equal %q{[1, 8, 2, 3, 4, 5, 9, 10]}, %q{$a = []; begin; ; $a << 1 385 def m(); $a << 2 386 begin; $a << 3 387 2; $a << 4 388 ensure; $a << 5 389 return 3; $a << 6 390 end; $a << 7 391 end; $a << 8 392 m; $a << 9 393; $a << 10 394; rescue Exception; $a << 99; end; $a} 395assert_equal %q{[1, 3, 11, 4, 5, 6, 7, 12, 13]}, %q{$a = []; begin; ; $a << 1 396 def m2; $a << 2 397 end; $a << 3 398 def m(); $a << 4 399 m2(begin; $a << 5 400 2; $a << 6 401 ensure; $a << 7 402 return 3; $a << 8 403 end); $a << 9 404 4; $a << 10 405 end; $a << 11 406 m(); $a << 12 407; $a << 13 408; rescue Exception; $a << 99; end; $a} 409assert_equal %q{[1, 16, 2, 3, 4, 5, 6, 7, 10, 11, 17, 18]}, %q{$a = []; begin; ; $a << 1 410 def m; $a << 2 411 1; $a << 3 412 1.times{; $a << 4 413 2; $a << 5 414 begin; $a << 6 415 3; $a << 7 416 return; $a << 8 417 4; $a << 9 418 ensure; $a << 10 419 5; $a << 11 420 end; $a << 12 421 6; $a << 13 422 }; $a << 14 423 7; $a << 15 424 end; $a << 16 425 m(); $a << 17 426; $a << 18 427; rescue Exception; $a << 99; end; $a} 428assert_equal %q{[:ok, :ok2, :last]}, %q{ 429 a = [] 430 i = 0 431 begin 432 while i < 1 433 i+=1 434 begin 435 begin 436 next 437 ensure 438 a << :ok 439 end 440 ensure 441 a << :ok2 442 end 443 end 444 ensure 445 a << :last 446 end 447 a 448} 449assert_equal %q{[:ok, :ok2, :last]}, %q{ 450 a = [] 451 i = 0 452 begin 453 while i < 1 454 i+=1 455 begin 456 begin 457 break 458 ensure 459 a << :ok 460 end 461 ensure 462 a << :ok2 463 end 464 end 465 ensure 466 a << :last 467 end 468 a 469} 470assert_equal %q{[:ok, :ok2, :last]}, %q{ 471 a = [] 472 i = 0 473 begin 474 while i < 1 475 if i>0 476 break 477 end 478 i+=1 479 begin 480 begin 481 redo 482 ensure 483 a << :ok 484 end 485 ensure 486 a << :ok2 487 end 488 end 489 ensure 490 a << :last 491 end 492 a 493} 494assert_equal %Q{ENSURE\n}, %q{ 495 def test 496 while true 497 return 498 end 499 ensure 500 puts("ENSURE") 501 end 502 test 503}, '[ruby-dev:37967]' 504 505[['[ruby-core:28129]', %q{ 506 class Bug2728 507 include Enumerable 508 define_method(:dynamic_method) do 509 "dynamically defined method" 510 end 511 def each 512 begin 513 yield :foo 514 ensure 515 dynamic_method 516 end 517 end 518 end 519 e = Bug2728.new 520}], 521 ['[ruby-core:28132]', %q{ 522 class Bug2729 523 include Enumerable 524 def each 525 begin 526 yield :foo 527 ensure 528 proc {}.call 529 end 530 end 531 end 532 e = Bug2729.new 533}], 534 ['[ruby-core:39125]', %q{ 535 class Bug5234 536 include Enumerable 537 def each 538 begin 539 yield :foo 540 ensure 541 proc 542 end 543 end 544 end 545 e = Bug5234.new 546}], 547 ['[ruby-dev:45656]', %q{ 548 class Bug6460 549 include Enumerable 550 def each 551 begin 552 yield :foo 553 ensure 554 1.times { Proc.new } 555 end 556 end 557 end 558 e = Bug6460.new 559}]].each do |bug, src| 560 assert_equal "foo", src + %q{e.detect {true}}, bug 561 assert_equal "true", src + %q{e.any? {true}}, bug 562 assert_equal "false", src + %q{e.all? {false}}, bug 563 assert_equal "true", src + %q{e.include?(:foo)}, bug 564end 565 566assert_equal "foo", %q{ 567 class Bug6460 568 def m1 569 m2 {|e| 570 return e 571 } 572 end 573 574 def m2 575 begin 576 yield :foo 577 ensure 578 begin 579 begin 580 yield :foo 581 ensure 582 Proc.new 583 raise '' 584 end 585 rescue 586 end 587 end 588 end 589 end 590 Bug6460.new.m1 591}, '[ruby-dev:46372]' 592