/** 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 */