// Static Interpreter Control Methods ///////////////////////////////////////////////////////////////
+ /** log a message with the current JavaScript sourceName/line */
+ public static void log(Object o, Object message) { log(message); }
+ public static void log(Object message) { Log.echo(JS.getSourceName() + ":" + JS.getLine(), message); }
+
public static int getLine() {
Interpreter c = Interpreter.current();
return c == null || c.f == null || c.pc < 0 || c.pc >= c.f.size ? -1 : c.f.line[c.pc];
return c == null || c.f == null ? null : c.f.sourceName;
}
- public static class PausedException extends Exception { PausedException() { } }
-
- public static void invokePauseable(JSFunction function) throws JS.PausedException, JSExn {
- Interpreter i = new Interpreter(function, true, new JSArray());
- int oldpausecount = i.pausecount;
- i.resume();
- if (i.pausecount > oldpausecount) throw new PausedException();
- }
-
public static class NotPauseableException extends Exception { NotPauseableException() { } }
/** returns a callback which will restart the context; expects a value to be pushed onto the stack when unpaused */
return new JS.UnpauseCallback(i);
}
- public static class UnpauseCallback {
+ public static class UnpauseCallback implements Scheduler.Task {
Interpreter i;
UnpauseCallback(Interpreter i) { this.i = i; }
+ public void perform() throws JSExn { unpause(null); }
public void unpause(Object o) throws JSExn {
// FIXME: if o instanceof JSExn, throw it into the JSworld
i.stack.push(o);