projects
/
org.ibex.core.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
better JSArray.sort() exception handling
[org.ibex.core.git]
/
src
/
org
/
ibex
/
js
/
JSExn.java
diff --git
a/src/org/ibex/js/JSExn.java
b/src/org/ibex/js/JSExn.java
index
4f5fb31
..
2afcef1
100644
(file)
--- a/
src/org/ibex/js/JSExn.java
+++ b/
src/org/ibex/js/JSExn.java
@@
-9,12
+9,12
@@
public class JSExn extends Exception {
private Vec backtrace = new Vec();
private JS js;
public JSExn(String s) { this(JS.S(s)); }
private Vec backtrace = new Vec();
private JS js;
public JSExn(String s) { this(JS.S(s)); }
- public JSExn(JS js) { this(js,Interpreter.current()); }
- public JSExn(JS js, Interpreter cx) {
- this.js = js;
- if(cx != null) fill(cx);
- }
+ public JSExn(JS js) { this(js,null); }
+ public JSExn(JS js, Interpreter cx) { this.js = js; fill(cx); }
+
private void fill(Interpreter cx) {
private void fill(Interpreter cx) {
+ if(cx == null) cx = Interpreter.current();
+ if(cx == null) return;
addBacktrace(cx.f.sourceName + ":" + cx.f.line[cx.pc]);
cx.stack.backtrace(this);
}
addBacktrace(cx.f.sourceName + ":" + cx.f.line[cx.pc]);
cx.stack.backtrace(this);
}
@@
-33,6
+33,16
@@
public class JSExn extends Exception {
void addBacktrace(String line) { backtrace.addElement(line); }
void addBacktrace(String line) { backtrace.addElement(line); }
+ public static class Wrapper extends RuntimeException {
+ public final JSExn e;
+ public Wrapper(JSExn e) { this.e = e; }
+ public JSExn refill() {
+ e.addBacktrace("[foreign code]");
+ e.fill(null);
+ return e;
+ }
+ }
+
public static class IO extends JSExn {
public IO(java.io.IOException ioe) {
super("ibex.io: " + ioe.toString());
public static class IO extends JSExn {
public IO(java.io.IOException ioe) {
super("ibex.io: " + ioe.toString());