2004/01/03 04:27:27
[org.ibex.core.git] / src / org / xwt / js / JSArray.java
index c918bda..2f5f04d 100644 (file)
@@ -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 {