2003/11/17 01:53:25
[org.ibex.core.git] / src / org / xwt / js / JSCallable.java
index 8865f3b..c9c09d0 100644 (file)
@@ -1,35 +1,18 @@
 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 {
-        if (method != null) {
-            Object meth = get(method);
-            if (meth == null) throw new JS.Exn("attempt to invoke the null method");
-            if (!(meth instanceof JSCallable)) throw new JS.Exn("cannot call a " + meth.getClass().getName());
-            switch (args.size()) {
-                case 0: return ((JSCallable)meth).call0(null);
-                case 1: return ((JSCallable)meth).call1(null, args.elementAt(0));
-                case 2: return ((JSCallable)meth).call2(null, args.elementAt(0), args.elementAt(1));
-                default: return ((JSCallable)meth).call(null, args);
-            }
-        }
-        throw new JS.Exn("cannot invoke method " + method + " on object " + this.getClass().getName() + " 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");
     }
+
 }