1 // Copyright 2004 Adam Megacz, see the COPYING file for licensing [GPL ]
5 /** The JavaScript Math object */
6 public class JSMath extends JS {
8 public static JSMath singleton = new JSMath();
10 private static final JS E = JS.N(java.lang.Math.E);
11 private static final JS PI = JS.N(java.lang.Math.PI);
12 private static final JS LN10 = JS.N(java.lang.Math.log(10));
13 private static final JS LN2 = JS.N(java.lang.Math.log(2));
14 private static final JS LOG10E = JS.N(1/java.lang.Math.log(10));
15 private static final JS LOG2E = JS.N(1/java.lang.Math.log(2));
16 private static final JS SQRT1_2 = JS.N(1/java.lang.Math.sqrt(2));
17 private static final JS SQRT2 = JS.N(java.lang.Math.sqrt(2));
19 public JS callMethod(JS method_, JS a0, JS a1, JS a2, JS[] rest, int nargs) throws JSExn {
20 if(!JS.isString(method_)) return super.callMethod(method_,a0,a1,a2,rest,nargs);
21 String method = JS.toString(method_);
25 case "random": return JS.N(java.lang.Math.random());
31 case "ceil": return JS.N((long)java.lang.Math.ceil(toDouble(a0)));
32 case "floor": return JS.N((long)java.lang.Math.floor(toDouble(a0)));
33 case "round": return JS.N((long)java.lang.Math.round(toDouble(a0)));
34 case "abs": return JS.N(java.lang.Math.abs(toDouble(a0)));
35 case "sin": return JS.N(java.lang.Math.sin(toDouble(a0)));
36 case "cos": return JS.N(java.lang.Math.cos(toDouble(a0)));
37 case "tan": return JS.N(java.lang.Math.tan(toDouble(a0)));
38 case "asin": return JS.N(java.lang.Math.asin(toDouble(a0)));
39 case "acos": return JS.N(java.lang.Math.acos(toDouble(a0)));
40 case "atan": return JS.N(java.lang.Math.atan(toDouble(a0)));
41 case "sqrt": return JS.N(java.lang.Math.sqrt(toDouble(a0)));
42 case "exp": return JS.N(java.lang.Math.exp(toDouble(a0)));
43 case "log": return JS.N(java.lang.Math.log(toDouble(a0)));
49 case "min": return JS.N(java.lang.Math.min(toDouble(a0), toDouble(a1)));
50 case "max": return JS.N(java.lang.Math.max(toDouble(a0), toDouble(a1)));
51 case "pow": return JS.N(java.lang.Math.pow(toDouble(a0), toDouble(a1)));
52 case "atan2": return JS.N(java.lang.Math.atan2(toDouble(a0), toDouble(a1)));
57 return super.callMethod(method_, a0, a1, a2, rest, nargs);
60 public JS get(JS key_) throws JSExn {
61 if(!JS.isString(key_)) return super.get(key_);
62 String key = JS.toString(key_);
65 case "LN10": return LN10;
66 case "LN2": return LN2;
67 case "LOG10E": return LOG10E;
68 case "LOG2E": return LOG2E;
70 case "SQRT1_2": return SQRT1_2;
71 case "SQRT2": return SQRT2;
72 case "ceil": return METHOD;
73 case "floor": return METHOD;
74 case "round": return METHOD;
75 case "min": return METHOD;
76 case "max": return METHOD;
77 case "pow": return METHOD;
78 case "atan2": return METHOD;
79 case "abs": return METHOD;
80 case "sin": return METHOD;
81 case "cos": return METHOD;
82 case "tan": return METHOD;
83 case "asin": return METHOD;
84 case "acos": return METHOD;
85 case "atan": return METHOD;
86 case "sqrt": return METHOD;
87 case "exp": return METHOD;
88 case "log": return METHOD;
89 case "random": return METHOD;
91 return super.get(key_);