public abstract Object get(Object key) throws JS.Exn;
public abstract void put(Object key, Object val) throws JS.Exn;
public abstract Object[] keys();
- public abstract Object callMethod(Object method, JS.Array args, boolean justChecking);
-
+ public Object callMethod(Object method, Array args, boolean checkOnly) throws JS.Exn {
+ if(checkOnly) return Boolean.FALSE;
+ Object o = get(method);
+ if(o instanceof JS.Callable) {
+ return ((JS.Callable)o).call(args);
+ } else if(o == null) {
+ throw new JS.Exn("Attempted to call non-existent method: " + method);
+ } else {
+ throw new JS.Exn("Attempted to call a non-method: " +method);
+ }
+ }
+
public Number coerceToNumber() { return new Integer(0); }
public String coerceToString() { throw new JS.Exn("tried to coerce a JavaScript object to a String"); }
public boolean coerceToBoolean() { return true; }
return new Internal.CallableStub(this,key);
return entries.get(key);
}
- public Object callMethod(Object method, JS.Array args, boolean checkOnly) throws JS.Exn {
- if(checkOnly) return Boolean.FALSE;
- Object o = get(method);
- if(o instanceof JS.Callable) {
- return ((JS.Callable)o).call(args);
- } else if(o == null) {
- throw new JS.Exn("Attempted to call non-existent method: " + method);
- } else {
- throw new JS.Exn("Attempted to call a non-method: " +method);
- }
- }
}
/** An exception which can be thrown and caught by JavaScript code */