X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjs%2FJSArray.java;h=d0cd550e333f5dca8d53fb4e40858e79a2840fc9;hp=2171e4dd259bd23f7508135c519675a64e0aeac0;hb=85c8f402be33df8440511492fb597fba9c2eb45f;hpb=e471904257ff52be6a0b77cd5946cb4219e36da5 diff --git a/src/org/ibex/js/JSArray.java b/src/org/ibex/js/JSArray.java index 2171e4d..d0cd550 100644 --- a/src/org/ibex/js/JSArray.java +++ b/src/org/ibex/js/JSArray.java @@ -24,40 +24,38 @@ public class JSArray extends JS.BT { }*/ public JS callMethod(JS method, JS a0, JS a1, JS a2, JS[] rest, int nargs) throws JSExn { - if(isString(method)) { - //#switch(JS.toString(method)) - case "pop": { - int oldSize = size(); - if(oldSize == 0) return null; - return removeElementAt(oldSize-1); - } - case "reverse": return reverse(); - case "toString": return join(","); - case "shift": - if(length() == 0) return null; - return removeElementAt(0); - 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": { - int oldSize = size(); - for(int i=0; i= size()) return null; return elementAt(i); } - if(isString(key)) { - //#switch(JS.toString(key)) - case "pop": return METHOD; - case "reverse": return METHOD; - case "toString": return METHOD; - case "shift": return METHOD; - case "join": return METHOD; - case "sort": return METHOD; - case "slice": return METHOD; - case "push": return METHOD; - case "unshift": return METHOD; - case "splice": return METHOD; - case "length": return N(size()); - //#end - } + //#jswitch(key) + case "pop": return METHOD; + case "reverse": return METHOD; + case "toString": return METHOD; + case "shift": return METHOD; + case "join": return METHOD; + case "sort": return METHOD; + case "slice": return METHOD; + case "push": return METHOD; + case "unshift": return METHOD; + case "splice": return METHOD; + case "length": return N(size()); + //#end return super.get(key); } @@ -185,33 +181,31 @@ public class JSArray extends JS.BT { a.setElementAt(elementAt(start+i),i); return a; } - + private static final Vec.CompareFunc defaultSort = new Vec.CompareFunc() { public int compare(Object a, Object b) { try { return JS.toString((JS)a).compareTo(JS.toString((JS)b)); - } catch(JSExn e) { - // FIXME: See emca about this - throw new RuntimeException(e.toString()); - } + } catch(JSExn e) { throw new JSExn.Wrapper(e); } } }; private JS sort(JS tmp) throws JSExn { Vec vec = toVec(); - if(tmp instanceof JS) { - final JS jsFunc = (JS) tmp; - vec.sort(new Vec.CompareFunc() { - public int compare(Object a, Object b) { - try { - return JS.toInt(jsFunc.call((JS)a, (JS)b, null, null, 2)); - } catch (JSExn e) { - // FIXME: Check ecma to see what we should do here - throw new RuntimeException(e.toString()); + try { + if(tmp instanceof JS) { + final JS jsFunc = (JS) tmp; + vec.sort(new Vec.CompareFunc() { + public int compare(Object a, Object b) { + try { + return JS.toInt(jsFunc.call((JS)a, (JS)b, null, null, 2)); + } catch(JSExn e) { throw new JSExn.Wrapper(e); } } - } - }); - } else { - vec.sort(defaultSort); + }); + } else { + vec.sort(defaultSort); + } + } catch(JSExn.Wrapper e) { + throw e.refill(); } setFromVec(vec); return this;