- public Object call(Object method, JSArray args) {
- if(method.equals("push")) {
- for(int i=0;i<args.length();i++)
- vec.push(args.elementAt(i));
- return new Integer(vec.size());
- }
- if(method.equals("pop")) {
- return vec.pop(); // this'll return null on size()==0
- }
- if(method.equals("shift")) {
- if(length() > 0) {
- Object o = vec.elementAt(0);
- vec.removeElementAt(0);
- return o;
- } else {
- return null;
- }
- }
- if(method.equals("unshift")) {
- // FEATURE: could be optimized a bit with some help from Vec
- for(int i=0;i<args.length();i++)
- vec.insertElementAt(args.elementAt(i),i);
- return new Integer(vec.size());
- }
- if(method.equals("slice")) return slice(args);
- if(method.equals("join")) return join(args);
- if(method.equals("reverse")) return reverse(args);
- if(method.equals("toString")) return join(",");
- if(method.equals("sort")) return sort(args);
- if(method.equals("splice")) return splice(args);
- throw new JS.Exn("unknown method " + method);
+ public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn {
+ //#switch(method)
+ case "pop": return vec.pop();
+ case "reverse": return reverse();
+ case "toString": return join(",");
+ case "shift":
+ if(length() == 0) return null;
+ Object o = vec.elementAt(0);
+ vec.removeElementAt(0);
+ return o;
+ case "join":
+ return join(nargs == 0 ? "," : JS.toString(a0));
+ case "sort":
+ return sort(nargs < 1 ? null : a0);
+ case "slice":
+ int start = toInt(nargs < 1 ? null : a0);
+ int end = nargs < 2 ? length() : toInt(a1);
+ return slice(start, end);
+ case "push":
+ for(int i=0; i<nargs; i++) vec.push(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
+ return N(vec.size());
+ case "unshift":
+ for(int i=0; i<nargs; i++) vec.insertElementAt(i==0?a0:i==1?a1:i==2?a2:rest[i-3], i);
+ return N(vec.size());
+ case "splice":
+ JSArray array = new JSArray();
+ for(int i=0; i<nargs; i++) array.addElement(i==0?a0:i==1?a1:i==2?a2:rest[i-3]);
+ return splice(array);
+ //#end
+ return super.callMethod(method, a0, a1, a2, rest, nargs);