X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSExn.java;h=2afcef188c89e25c0192151c2739d3f34d26628a;hp=4f5fb31490f6ac15033e7333a2009fcf1fd0c4b3;hb=3f8aa5300e178e8975b0edc896a5a9d303e7bdf3;hpb=e471904257ff52be6a0b77cd5946cb4219e36da5 diff --git a/src/org/ibex/js/JSExn.java b/src/org/ibex/js/JSExn.java index 4f5fb31..2afcef1 100644 --- 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)); } - 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); } @@ -33,6 +33,16 @@ public class JSExn extends Exception { 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());