| // Implicit return at the end of a function should return |undefined|, |
| // even if we initially set another return value and then executed a finally |
| // block. |
| |
| function test1() { |
| try { |
| try { |
| return 3; |
| } finally { |
| throw 4; |
| } |
| } catch (e) {} |
| } |
| assertEq(test1(), undefined); |
| |
| function test2() { |
| L: try { |
| return 3; |
| } finally { |
| break L; |
| } |
| } |
| assertEq(test2(), undefined); |
| |
| function test3() { |
| for (var i=0; i<2; i++) { |
| try { |
| return 5; |
| } finally { |
| continue; |
| } |
| } |
| } |
| assertEq(test3(), undefined); |
| |
| // "return;" should work the same way. |
| function test4() { |
| L: try { |
| return 6; |
| } finally { |
| break L; |
| } |
| return; |
| } |
| assertEq(test4(), undefined); |