2003/11/17 01:53:25
[org.ibex.core.git] / src / org / xwt / js / JSMath.java
index 91a8a9e..7a27f28 100644 (file)
@@ -10,35 +10,6 @@ public class JSMath extends JSCallable {
 
     public static JSMath singleton = new JSMath();
 
-    public Object call(Object method, JSArray args) {
-        if (method == null) throw new JS.Exn("you cannot call this object");
-        //#switch(method)
-        case "ceil": return new Long((long)java.lang.Math.ceil(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "floor": return new Long((long)java.lang.Math.floor(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "round": return new Long((long)java.lang.Math.round(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "min": return new Double(java.lang.Math.min(JS.toNumber(args.elementAt(0)).doubleValue(),
-                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
-        case "max": return new Double(java.lang.Math.max(JS.toNumber(args.elementAt(0)).doubleValue(),
-                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
-        case "pow": return new Double(java.lang.Math.pow(JS.toNumber(args.elementAt(0)).doubleValue(),
-                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
-        case "atan2": return new Double(java.lang.Math.atan2(JS.toNumber(args.elementAt(0)).doubleValue(),
-                                                             JS.toNumber(args.elementAt(1)).doubleValue()));
-        case "abs": return new Double(java.lang.Math.abs(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "sin": return new Double(java.lang.Math.sin(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "cos": return new Double(java.lang.Math.cos(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "tan": return new Double(java.lang.Math.tan(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "asin": return new Double(java.lang.Math.asin(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "acos": return new Double(java.lang.Math.acos(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "atan": return new Double(java.lang.Math.atan(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "sqrt": return new Double(java.lang.Math.sqrt(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "exp": return new Double(java.lang.Math.exp(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "log": return new Double(java.lang.Math.log(JS.toNumber(args.elementAt(0)).doubleValue()));
-        case "random": return new Double(java.lang.Math.random());
-        //#end
-        return null;
-    }
-
     private static final Double E       = new Double(java.lang.Math.E);
     private static final Double PI      = new Double(java.lang.Math.PI);
     private static final Double LN10    = new Double(java.lang.Math.log(10));
@@ -48,9 +19,48 @@ public class JSMath extends JSCallable {
     private static final Double SQRT1_2 = new Double(1/java.lang.Math.sqrt(2));
     private static final Double SQRT2   = new Double(java.lang.Math.sqrt(2));
 
+    public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) {
+        switch(nargs) {
+            case 0: {
+                //#switch(method)
+                case "random": return new Double(java.lang.Math.random());
+                //#end
+                break;
+            }
+            case 1: {
+                //#switch(method)
+                case "ceil": return new Long((long)java.lang.Math.ceil(toDouble(a0)));
+                case "floor": return new Long((long)java.lang.Math.floor(toDouble(a0)));
+                case "round": return new Long((long)java.lang.Math.round(toDouble(a0)));
+                case "abs": return new Double(java.lang.Math.abs(toDouble(a0)));
+                case "sin": return new Double(java.lang.Math.sin(toDouble(a0)));
+                case "cos": return new Double(java.lang.Math.cos(toDouble(a0)));
+                case "tan": return new Double(java.lang.Math.tan(toDouble(a0)));
+                case "asin": return new Double(java.lang.Math.asin(toDouble(a0)));
+                case "acos": return new Double(java.lang.Math.acos(toDouble(a0)));
+                case "atan": return new Double(java.lang.Math.atan(toDouble(a0)));
+                case "sqrt": return new Double(java.lang.Math.sqrt(toDouble(a0)));
+                case "exp": return new Double(java.lang.Math.exp(toDouble(a0)));
+                case "log": return new Double(java.lang.Math.log(toDouble(a0)));
+                //#end
+                break;
+            }
+            case 2: {
+                //#switch(method)
+                case "min": return new Double(java.lang.Math.min(toDouble(a0), toDouble(a1)));
+                case "max": return new Double(java.lang.Math.max(toDouble(a0), toDouble(a1)));
+                case "pow": return new Double(java.lang.Math.pow(toDouble(a0), toDouble(a1)));
+                case "atan2": return new Double(java.lang.Math.atan2(toDouble(a0), toDouble(a1)));
+                //#end
+                break;
+            }
+        }
+        return super.callMethod(method, a0, a1, a2, rest, nargs);
+    }
+
     public void put(Object key, Object val) { return; }
 
-    public Object get(Object key, Object val) {
+    public Object get(Object key) {
         //#switch(key)
         case "E": return E;
         case "LN10": return LN10;
@@ -60,7 +70,25 @@ public class JSMath extends JSCallable {
         case "PI": return PI;
         case "SQRT1_2": return SQRT1_2;
         case "SQRT2": return SQRT2;
+        case "ceil": return METHOD;
+        case "floor": return METHOD;
+        case "round": return METHOD;
+        case "min": return METHOD;
+        case "max": return METHOD;
+        case "pow": return METHOD;
+        case "atan2": return METHOD;
+        case "abs": return METHOD;
+        case "sin": return METHOD;
+        case "cos": return METHOD;
+        case "tan": return METHOD;
+        case "asin": return METHOD;
+        case "acos": return METHOD;
+        case "atan": return METHOD;
+        case "sqrt": return METHOD;
+        case "exp": return METHOD;
+        case "log": return METHOD;
+        case "random": return METHOD;
         //#end
-        return null;
+        return super.get(key);
     }
 }