1 package io.jawk.jrt;
2
3 /*-
4 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5 * Jawk
6 * ჻჻჻჻჻჻
7 * Copyright (C) 2006 - 2026 MetricsHub
8 * ჻჻჻჻჻჻
9 * This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Lesser Public License for more details.
18 *
19 * You should have received a copy of the GNU General Lesser Public
20 * License along with this program. If not, see
21 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
23 */
24
25 /**
26 * A runtime exception thrown by Jawk. It is provided
27 * to conveniently distinguish between Jawk runtime
28 * exceptions and other runtime exceptions.
29 *
30 * @author Danny Daglas
31 */
32 public class AwkRuntimeException extends RuntimeException {
33
34 private static final long serialVersionUID = 1L;
35
36 /** Source line associated with the failure, or {@code -1} when unknown. */
37 private final int lineNumber;
38
39 /**
40 * <p>
41 * Constructor for AwkRuntimeException.
42 * </p>
43 *
44 * @param msg a {@link java.lang.String} object
45 */
46 public AwkRuntimeException(String msg) {
47 super(msg);
48 this.lineNumber = -1;
49 }
50
51 /**
52 * Creates a runtime exception with a message and root cause but without a
53 * specific source line.
54 *
55 * @param msg Failure message
56 * @param cause Root cause
57 */
58 public AwkRuntimeException(String msg, Throwable cause) {
59 super(msg, cause);
60 this.lineNumber = -1;
61 }
62
63 /**
64 * <p>
65 * Constructor for AwkRuntimeException.
66 * </p>
67 *
68 * @param lineno a int
69 * @param msg a {@link java.lang.String} object
70 */
71 public AwkRuntimeException(int lineno, String msg) {
72 super(msg);
73 this.lineNumber = lineno;
74 }
75
76 /**
77 * Creates a runtime exception tied to a source line and a root cause.
78 *
79 * @param lineno AWK source line associated with the failure
80 * @param msg Failure message
81 * @param cause Root cause
82 */
83 public AwkRuntimeException(int lineno, String msg, Throwable cause) {
84 super(msg, cause);
85 this.lineNumber = lineno;
86 }
87
88 /**
89 * Returns the line number associated with this exception or {@code -1} if
90 * unavailable.
91 *
92 * @return the offending line number or {@code -1}
93 */
94 public int getLineNumber() {
95 return lineNumber;
96 }
97 }