X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fjs%2FJSArray.java;h=2f5f04d8e7b3aeb3aa774e599e21814f6d9b9aa8;hb=6261c41b2ac9d182d8c3541e8e0e5fd00062fa43;hp=880e64fecc5b14806d570cba53b46ca37ae9a8aa;hpb=67eeff476179a91ae930ea89cbecde22132ca532;p=org.ibex.core.git diff --git a/src/org/xwt/js/JSArray.java b/src/org/xwt/js/JSArray.java index 880e64f..2f5f04d 100644 --- a/src/org/xwt/js/JSArray.java +++ b/src/org/xwt/js/JSArray.java @@ -6,7 +6,7 @@ import java.io.*; import java.util.*; /** A JavaScript JSArray */ -public class JSArray extends JSCallable { +public class JSArray extends JS { private Vec vec = new Vec(); public JSArray() { } public JSArray(int size) { vec.setSize(size); } @@ -22,52 +22,65 @@ public class JSArray extends JSCallable { return Integer.parseInt(s); } - public Object call(Object method, JSArray args) { - if(method.equals("push")) { - for(int i=0;i 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=0;i--) - vec.addElement(oldVec.elementAt(i)); + for(int i=size-1;i>=0;i--) vec.addElement(oldVec.elementAt(i)); return this; } - private Object slice(JSArray args) { + private Object slice(int start, int end) { int length = length(); - int start = JS.toInt(args.length() < 1 ? null : args.elementAt(0)); - int end = args.length() < 2 ? length : JS.toInt(args.elementAt(1)); if(start < 0) start = length+start; if(end < 0) end = length+end; if(start < 0) start = 0; @@ -145,16 +151,20 @@ public class JSArray extends JSCallable { return JS.toString(a).compareTo(JS.toString(b)); } }; - private Object sort(JSArray args) { - Object tmp = args.length() < 1 ? null : args.elementAt(0); - if(tmp instanceof JSCallable) { + private Object sort(Object tmp) throws JSExn { + if(tmp instanceof JS) { final JSArray funcArgs = new JSArray(2); - final JSCallable jsFunc = (JSCallable) tmp; + final JS jsFunc = (JS) tmp; vec.sort(new Vec.CompareFunc() { public int compare(Object a, Object b) { - funcArgs.setElementAt(a,0); - funcArgs.setElementAt(b,1); - return JS.toInt(jsFunc.call(null, funcArgs)); + try { + funcArgs.setElementAt(a,0); + funcArgs.setElementAt(b,1); + return JS.toInt(jsFunc.call(a, b, null, null, 2)); + } catch (Exception e) { + // FIXME + throw new JSRuntimeExn(e.toString()); + } } }); } else {