updated Makefile.common
[org.ibex.core.git] / src / org / ibex / js / JSExn.java
index 4f5fb31..2afcef1 100644 (file)
@@ -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());