package org.xwt.js;
/** anything that is callable with the () operator and wasn't compiled from JS code */
-public abstract class JSCallable extends JSObj {
- public Object call0(Object method) throws JS.Exn {
- JSArray args = new JSArray();
- return call(method, args);
- }
- public Object call1(Object method, Object arg1) throws JS.Exn {
- JSArray args = new JSArray();
- args.addElement(arg1);
- return call(method, args);
- }
- public Object call2(Object method, Object arg1, Object arg2) throws JS.Exn {
- JSArray args = new JSArray();
- args.addElement(arg1);
- args.addElement(arg2);
- return call(method, args);
+public abstract class JSCallable extends JS {
+
+ // return this from get() if the key was actually a method.
+ public static final Object METHOD = new Object();
+
+ public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) {
+ throw new JS.Exn("attempted to call an undefined method");
}
- public Object call(Object method, JSArray args) throws JS.Exn {
- throw new JS.Exn("cannot invoke this method with " + args.size() + " arguments");
+
+ public Object call(Object a0, Object a1, Object a2, Object[] rest, int nargs) {
+ throw new JS.Exn("you cannot call this object");
}
+
}