X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FTrap.java;h=df51b5317974ab988ce053fe6400d28523c30467;hb=10950dd1b8e91c45197b9ad487b5e8d86e4aee5c;hp=f33f75a96610786fe83434a3350d9cfa603d6144;hpb=e072ecc212b652dd55fb932cd7ed715e65dcfd2b;p=org.ibex.core.git diff --git a/src/org/xwt/Trap.java b/src/org/xwt/Trap.java index f33f75a..df51b53 100644 --- a/src/org/xwt/Trap.java +++ b/src/org/xwt/Trap.java @@ -97,15 +97,24 @@ public class Trap { private Trap() { } public Object perform() throws JS.Exn { - if (f.getNumFormalArgs() > 0) return cascade(); - return f.call(new TrapArgs(this)); + try { + if (f.getNumFormalArgs() > 0) return cascade(); + return f.call(new TrapArgs(this)); + } catch (Exception e) { + Log.log(this, "Exception thrown from within trap: " + e); + return null; + } } public void perform(Object val) throws JS.Exn { - if (f.getNumFormalArgs() == 0) cascade(val); - TrapArgs ta = new TrapArgs(this, val); - Object ret = f.call(ta); - if (ret != Boolean.FALSE && !ta.cascadeHappened) cascade(val); + try { + if (f.getNumFormalArgs() == 0) cascade(val); + TrapArgs ta = new TrapArgs(this, val); + Object ret = f.call(ta); + if (ret != Boolean.FALSE && !ta.cascadeHappened) cascade(val); + } catch (Exception e) { + Log.log(this, "Exception thrown from within trap: " + e); + } } public Object cascade() { @@ -135,6 +144,7 @@ public class Trap { if (key.equals("trapee")) return t.trapee; if (key.equals("trapname")) return t.name; if (key.equals("cascade")) return t.cascade(); + if (key.equals("callee")) return t.f; return super.get(key); } }