X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FInterpreter.java;h=ce83f696fc22df44cdfcbdf20768327ac173b3b0;hp=92b29a4657f0c646a848351e9c8ee0beeb77325e;hb=b1a58aeb4adfade0697650583ec5801fa6e88d5e;hpb=1e2ac9c2eef012a3e77133817803878bacfa91b8 diff --git a/src/org/ibex/js/Interpreter.java b/src/org/ibex/js/Interpreter.java index 92b29a4..ce83f69 100644 --- a/src/org/ibex/js/Interpreter.java +++ b/src/org/ibex/js/Interpreter.java @@ -235,21 +235,13 @@ class Interpreter implements ByteCodes, Tokens { } else { t = ((JS)target).getTrap(key); } - while (t != null && t.f.numFormalArgs == 0) t = t.next; // find the first write trap - if (t != null) { - stack.push(new CallMarker(this)); - JSArray args = new JSArray(); - args.addElement(val); - stack.push(args); - } } if (t != null) { - stack.pop(); stack.push(new CallMarker(this)); - stack.push(target); JSArray args = new JSArray(); args.addElement(val); + stack.push(args); f = t.f; scope = new Trap.TrapScope(f.parentScope, t, val); pc = -1; @@ -368,7 +360,8 @@ class Interpreter implements ByteCodes, Tokens { } case THROW: - throw new JSExn(stack.pop()); + throw new JSExn(stack.pop(), stack, f, pc, scope); + /* FIXME case MAKE_GRAMMAR: { final Grammar r = (Grammar)arg; @@ -510,7 +503,6 @@ class Interpreter implements ByteCodes, Tokens { } } catch(JSExn e) { - if(f.op[pc] != FINALLY_DONE) e.addBacktrace(f.sourceName,f.line[pc]); while(stack.size() > 0) { Object o = stack.pop(); if (o instanceof CatchMarker || o instanceof TryMarker) { @@ -535,12 +527,6 @@ class Interpreter implements ByteCodes, Tokens { pc = ((TryMarker)o).finallyLoc - 1; continue OUTER; } - } else if(o instanceof CallMarker) { - CallMarker cm = (CallMarker) o; - if(cm.f == null) - e.addBacktrace("",0); // This might not even be worth mentioning - else - e.addBacktrace(cm.f.sourceName,cm.f.line[cm.pc-1]); } } throw e; @@ -691,7 +677,7 @@ class Interpreter implements ByteCodes, Tokens { static Object getFromPrimitive(Object o, Object key) throws JSExn { boolean returnJS = false; if (o instanceof Boolean) { - throw new JSExn("cannot call methods on Booleans"); + throw new JSExn("Booleans do not have properties"); } else if (o instanceof Number) { if (key.equals("toPrecision") || key.equals("toExponential") || key.equals("toFixed")) returnJS = true;