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) {
+ if(cx == null) cx = Interpreter.current();
+ if(cx == null) return;
addBacktrace(cx.f.sourceName + ":" + cx.f.line[cx.pc]);
cx.stack.backtrace(this);
}
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());