X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fjs%2FJSArray.java;h=2f5f04d8e7b3aeb3aa774e599e21814f6d9b9aa8;hb=6261c41b2ac9d182d8c3541e8e0e5fd00062fa43;hp=c918bda3dfda26a17d930ecc8fff89ba09993327;hpb=8c1756ef3fd42cc2f324baf47e13a83f51045efe;p=org.ibex.core.git diff --git a/src/org/xwt/js/JSArray.java b/src/org/xwt/js/JSArray.java index c918bda..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,7 +22,7 @@ public class JSArray extends JSCallable { return Integer.parseInt(s); } - public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) { + 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(); @@ -54,7 +54,7 @@ public class JSArray extends JSCallable { return super.callMethod(method, a0, a1, a2, rest, nargs); } - public Object get(Object key) throws JS.Exn { + public Object get(Object key) throws JSExn { if (key instanceof Number) { int i = intVal(key); if (i == Integer.MIN_VALUE) return super.get(key); @@ -80,7 +80,7 @@ public class JSArray extends JSCallable { return super.get(key); } - public void put(Object key, Object val) { + public void put(Object key, Object val) throws JSExn { if (key.equals("length")) vec.setSize(toNumber(val).intValue()); int i = intVal(key); if (i == Integer.MIN_VALUE) super.put(key, val); @@ -151,15 +151,20 @@ public class JSArray extends JSCallable { return JS.toString(a).compareTo(JS.toString(b)); } }; - private Object sort(Object tmp) { - 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(a, b, null, null, 2)); + 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 {