NASHORN-441.js revision 877:cf4d2252d444
1/*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * NASHORN-441 : Line numbers are incorrect in exceptions thrown from within a try block
26 *
27 * @test
28 * @run
29 */
30
31try {
32    print("try 1");
33    throw new Error("try 1");
34} catch (e) {
35    print(e, "thrown in line", e.lineNumber);
36} finally {
37    print("finally 1");
38}
39
40try {
41    try {
42        print("try 2");
43        throw new Error("try 2");
44    } finally {
45        print("finally 2");
46    }
47} catch (e) {
48    print(e, "thrown in line", e.lineNumber);
49}
50
51try {
52    print("try 3");
53} finally {
54    print("finally 3");
55}
56
57try {
58    print("try 4");
59    throw new Error("try 4");
60} catch (e if e instanceof String) {
61    print("wrong");
62}catch (e) {
63    print(e, "thrown in line", e.lineNumber);
64} finally {
65    print("finally 4");
66}
67
68try {
69    try {
70        print("try 5");
71        throw new Error("try 5");
72    } catch (e) {
73        print("rethrow 5");
74        throw e;
75    } finally {
76        print("finally 5");
77    }
78} catch (e if e instanceof Error) {
79    print(e, "thrown in line", e.lineNumber);
80}
81
82while (true) {
83    try {
84        print("try 6");
85        break;
86    } finally {
87        print("finally 6");
88    }
89}
90