2003/11/16 08:28:10
[org.ibex.core.git] / src / org / xwt / js / JSContext.java
index e707326..ec73e94 100644 (file)
@@ -30,7 +30,21 @@ public class JSContext {
     Vec stack = new Vec();        ///< the object stack
     int pc = 0;                   ///< the program counter
 
-    public static void invokePauseable(JSFunction function) { new JSContext(function, true).invoke(new JSArray()); }
+    /** can be paused */
+    public static void invokePauseable(JSFunction function) {
+        new JSContext(function, true).invoke(new JSArray());
+    }
+
+    /** cannot be paused */
+    public static void invokeTrap(JSTrap.JSTrappable t, Object key, Object value) {
+        JSFunction invoker = new JSFunction("trap invoker", 0, null);
+        invoker.add(-1, ByteCodes.PUT, null);
+        JSContext cx = new JSContext(invoker, false);
+        cx.stack.push(t);
+        cx.stack.push(key);
+        cx.stack.push(value);
+        cx.resume();
+    }
 
     JSContext(JSFunction f, boolean pauseable) {
         this.pauseable = pauseable;
@@ -41,7 +55,7 @@ public class JSContext {
     void invoke(JSArray args) {
         JSFunction tf = f;
         f = null;
-        stack.push(new JSFunction.CallMarker(this));
+        stack.push(new Interpreter.CallMarker(this));
         f = tf;
         stack.push(args);
         resume();
@@ -65,7 +79,7 @@ public class JSContext {
         JSContext old = (JSContext)threadToJSContext.get(t);
         threadToJSContext.put(t, this);
         try {
-            JSFunction.eval(this);
+            Interpreter.eval(this);
         } finally {
             if (old == null) threadToJSContext.remove(t);
             else threadToJSContext.put(t, old);