package org.ibex.js;
/** The JavaScript Math object */
-public class JSMath extends JS {
+class JSMath extends JS {
+ private static final JS E = JS.N(java.lang.Math.E);
+ private static final JS PI = JS.N(java.lang.Math.PI);
+ private static final JS LN10 = JS.N(java.lang.Math.log(10));
+ private static final JS LN2 = JS.N(java.lang.Math.log(2));
+ private static final JS LOG10E = JS.N(1/java.lang.Math.log(10));
+ private static final JS LOG2E = JS.N(1/java.lang.Math.log(2));
+ private static final JS SQRT1_2 = JS.N(1/java.lang.Math.sqrt(2));
+ private static final JS SQRT2 = JS.N(java.lang.Math.sqrt(2));
- public static JSMath singleton = new JSMath();
-
- 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));
- private static final Double LN2 = new Double(java.lang.Math.log(2));
- private static final Double LOG10E = new Double(1/java.lang.Math.log(10));
- private static final Double LOG2E = new Double(1/java.lang.Math.log(2));
- 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) throws JSExn {
+ public JS callMethod(JS method, JS a0, JS a1, JS a2, JS[] rest, int nargs) throws JSExn {
switch(nargs) {
case 0: {
- //#switch(method)
- case "random": return new Double(java.lang.Math.random());
+ //#switch(JS.toString(method))
+ case "random": return JS.N(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)));
+ //#switch(JS.toString(method))
+ case "ceil": return JS.N((long)java.lang.Math.ceil(toDouble(a0)));
+ case "floor": return JS.N((long)java.lang.Math.floor(toDouble(a0)));
+ case "round": return JS.N((long)java.lang.Math.round(toDouble(a0)));
+ case "abs": return JS.N(java.lang.Math.abs(toDouble(a0)));
+ case "sin": return JS.N(java.lang.Math.sin(toDouble(a0)));
+ case "cos": return JS.N(java.lang.Math.cos(toDouble(a0)));
+ case "tan": return JS.N(java.lang.Math.tan(toDouble(a0)));
+ case "asin": return JS.N(java.lang.Math.asin(toDouble(a0)));
+ case "acos": return JS.N(java.lang.Math.acos(toDouble(a0)));
+ case "atan": return JS.N(java.lang.Math.atan(toDouble(a0)));
+ case "sqrt": return JS.N(java.lang.Math.sqrt(toDouble(a0)));
+ case "exp": return JS.N(java.lang.Math.exp(toDouble(a0)));
+ case "log": return JS.N(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)));
+ //#switch(JS.toString(method))
+ case "min": return JS.N(java.lang.Math.min(toDouble(a0), toDouble(a1)));
+ case "max": return JS.N(java.lang.Math.max(toDouble(a0), toDouble(a1)));
+ case "pow": return JS.N(java.lang.Math.pow(toDouble(a0), toDouble(a1)));
+ case "atan2": return JS.N(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) { }
-
- public Object get(Object key) throws JSExn {
- //#switch(key)
+ public JS get(JS key) throws JSExn {
+ //#switch(JS.toString(key))
case "E": return E;
case "LN10": return LN10;
case "LN2": return LN2;