X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSExn.java;h=e01b769cf453f07e1904dfc22f04f180c18052d4;hb=ce791e4058158295bce9cf7b6698c2b565d571d7;hp=8d1a758ee1c6aa503f3e3e7e7f29cc2014fd8a0a;hpb=3591b88b94a6bb378af3d4abe6eb5233ce583104;p=org.ibex.core.git diff --git a/src/org/ibex/js/JSExn.java b/src/org/ibex/js/JSExn.java index 8d1a758..e01b769 100644 --- a/src/org/ibex/js/JSExn.java +++ b/src/org/ibex/js/JSExn.java @@ -2,30 +2,54 @@ package org.ibex.js; import org.ibex.util.*; +import java.io.*; /** An exception which can be thrown and caught by JavaScript code */ public class JSExn extends Exception { private Vec backtrace = new Vec(); - private Object js = null; - public JSExn(Object js) { this.js = js; } - public String toString() { return "JSExn: " + js; } - public String getMessage() { return toString(); } - public Object getObject() { return js; } - public void addBacktrace(String sourceName, int lineNo) { backtrace.addElement(sourceName + ":" + lineNo); } - public String backtrace() { - StringBuffer sb = new StringBuffer(1024); - for(int i=0;i=0; i--) { + JS element = stack.elementAt(i); + if (element instanceof Interpreter.CallMarker) { + Interpreter.CallMarker cm = (Interpreter.CallMarker)element; + if (cm.f != null) + addBacktrace(cm.f.sourceName + ":" + cm.f.line[cm.pc-1]); + /*if (cm.scope != null && cm.scope instanceof Trap.TrapScope) + addBacktrace("trap on property \"" + ((Trap.TrapScope)cm.scope).t.name + "\"");*/ + } + } + } + public void printStackTrace() { printStackTrace(System.err); } + public void printStackTrace(PrintWriter pw) { + for(int i=0; i