summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/basic/finally-implicit-return.js
blob: 3bbd78d3804ec865fad94eacf9ec710eaf7d0e11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 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);