import java.util.*;
/** The minimum set of functionality required for objects which are manipulated by JavaScript */
-public interface JS extends Pausable {
+public interface JS {
/** Returns an enumeration of the keys in this object. */
public JS.Enumeration keys() throws JSExn;
public void delTrap(JS key, JS function) throws JSExn;
public Trap getTrap(JS key) throws JSExn;
- // FIXME: consider renaming/removing these
+ // FEATURE: consider renaming/removing these
public JS unclone();
public String coerceToString() throws JSExn;
throw new JSExn("method not found: " + JSU.str(method) + " class="+this.getClass().getName());
}
public String[] getFormalArgs() { return emptystr; }
+ public String coerceToString() throws JSExn { throw new JSExn("cannot coerce a "+getClass().getName()+" to a string"); }
- public JS putAndTriggerTraps(JS key, JS val) throws JSExn { throw new JSExn(
- "'" + key + "' is trap read only on class ["+ getClass().getName() +"]"); }
- public JS getAndTriggerTraps(JS key) throws JSExn { return null; } // FIXME throw errors?
+ public JS putAndTriggerTraps(JS key, JS val) throws JSExn {
+ throw new JSExn("'" + key + "' is trap read only on class ["+ getClass().getName() +"]"); }
+ public JS getAndTriggerTraps(JS key) throws JSExn { return null; }
public JS justTriggerTraps(JS key, JS value) throws JSExn { return null; }
-
public void addTrap(JS key, JS function) throws JSExn {
Log.warn(this, "'" + JSU.str(key) + "' is not trappable on class ["+ getClass().getName() +"]"); }
public void delTrap(JS key, JS function) throws JSExn {
Log.warn(this, "'" + JSU.str(key) + "' trap is read only on class ["+ getClass().getName() +"]"); }
- public Trap getTrap(JS key) throws JSExn {
- //Log.warn(this, "'" + JSU.str(key) + "' is not trappable on class ["+ getClass().getName() +"]");
- return null;
- }
- public String coerceToString() throws JSExn {
- throw new JSExn("cannot coerce a " + getClass().getName() + " to a string"); }
+ public Trap getTrap(JS key) throws JSExn { return null; }
}
public interface Cloneable {}
public String coerceToString() throws JSExn { return clonee.coerceToString(); }
}
- public static class Obj extends Basket.HashMap implements JS {
+ public static class Obj extends Basket.Hash implements JS {
private static final String[] emptystr = new String[0];
private static final Placeholder holder = new Placeholder();
public Obj() { super(3, 4, 0.75F); }
public JS unclone() { return this; }
+ public String[] getFormalArgs() { return emptystr; }
public JS call(JS method, JS[] args) throws JSExn {
- if (method==null) throw new JSExn("cannot call a " + getClass().getName());
- throw new JSExn("method not found: " + JSU.str(method)); }
- public String[] getFormalArgs() { return emptystr; }
+ throw new JSExn(method==null ? "cannot call a " + getClass().getName() : "method not found: " + JSU.str(method)); }
public Enumeration keys() throws JSExn {
final Object[] keys = super.dumpkeys();
}
public void addTrap(JS key, JS f) throws JSExn {
- if (f.getFormalArgs() == null || f.getFormalArgs().length > 1) throw new JSExn(
- "traps must take either one argument (write) or no arguments (read)");
+ if (f.getFormalArgs() == null || f.getFormalArgs().length > 1)
+ throw new JSExn("traps must take either one argument (write) or no arguments (read)");
for (Trap t = (Trap)super.get(key, 1); t != null; t = t.next())
if (t.function().equals(f)) return;
super.put(key, new TrapHolder(this, key, f, (Trap)super.get(key, 1)), 1);
public Trap getTrap(JS key) throws JSExn { return (Trap)super.get(key, 1); }
- public String coerceToString() throws JSExn {
- throw new JSExn("cannot coerce a " + getClass().getName() + " to a string"); }
+ public String coerceToString() throws JSExn { throw new JSExn("cannot coerce a "+getClass().getName()+" to a string"); }
private static final class Placeholder implements Serializable {}
public Trap next();
public Trap nextRead();
public Trap nextWrite();
-
- public Trap read(); // FIXME reconsider these function names
+ public Trap read(); // FEATURE reconsider these function names
public Trap write();
}