more trap cleanup, brian back putAndTrigger...
[org.ibex.core.git] / src / org / ibex / js / JS.java
index c13d2a0..ad13a40 100644 (file)
@@ -300,17 +300,21 @@ public abstract class JS {
     /** performs a put, triggering traps if present; traps are run in an unpauseable interpreter */
     public void putAndTriggerTraps(JS key, JS value) throws JSExn {
         Trap t = getTrap(key);
-        throw new Error("FIXME");
-        /*if (t != null) t.invoke(value);
-        elese put(key, value);*/
+        if(t == null || (t = t.writeTrap()) == null) put(key,value);
+        else new Interpreter(t,value,false).resume();
     }
 
     /** performs a get, triggering traps if present; traps are run in an unpauseable interpreter */
     public JS getAndTriggerTraps(JS key) throws JSExn {
         Trap t = getTrap(key);
-        throw new Error("FIXME");
-        /*if (t != null) return t.invoke();
-        else return get(key);*/
+        if (t == null || (t = t.readTrap()) == null) return get(key);
+        else return new Interpreter(t,null,false).resume();
+    }
+    
+    public JS justTriggerTraps(JS key, JS value) throws JSExn {
+        Trap t = getTrap(key);
+        if(t == null || (t = t.writeTrap()) == null) return value;
+        else return new Interpreter(t,value,true).resume();
     }
 
     /** adds a trap, avoiding duplicates */