1 // Copyright 2000-2005 the Contributors, as shown in the revision logs.
2 // Licensed under the Apache Public Source License 2.0 ("the License").
3 // You may not use this file except in compliance with the License.
7 /** The JavaScript Math object */
8 class JSMath extends JS.Immutable {
9 private static final JS.Method METHOD = new JS.Method();
11 private static final JS E = Script.N(java.lang.Math.E);
12 private static final JS PI = Script.N(java.lang.Math.PI);
13 private static final JS LN10 = Script.N(java.lang.Math.log(10));
14 private static final JS LN2 = Script.N(java.lang.Math.log(2));
15 private static final JS LOG10E = Script.N(1/java.lang.Math.log(10));
16 private static final JS LOG2E = Script.N(1/java.lang.Math.log(2));
17 private static final JS SQRT1_2 = Script.N(1/java.lang.Math.sqrt(2));
18 private static final JS SQRT2 = Script.N(java.lang.Math.sqrt(2));
20 public JS call(JS method, JS[] args) throws JSExn {
23 //#switch(Script.toString(method))
24 case "random": return Script.N(java.lang.Math.random());
29 //#switch(Script.toString(method))
30 case "ceil": return Script.N((long)java.lang.Math.ceil(Script.toDouble(args[0])));
31 case "floor": return Script.N((long)java.lang.Math.floor(Script.toDouble(args[0])));
32 case "round": return Script.N((long)java.lang.Math.round(Script.toDouble(args[0])));
33 case "abs": return Script.N(java.lang.Math.abs(Script.toDouble(args[0])));
34 case "sin": return Script.N(java.lang.Math.sin(Script.toDouble(args[0])));
35 case "cos": return Script.N(java.lang.Math.cos(Script.toDouble(args[0])));
36 case "tan": return Script.N(java.lang.Math.tan(Script.toDouble(args[0])));
37 case "asin": return Script.N(java.lang.Math.asin(Script.toDouble(args[0])));
38 case "acos": return Script.N(java.lang.Math.acos(Script.toDouble(args[0])));
39 case "atan": return Script.N(java.lang.Math.atan(Script.toDouble(args[0])));
40 case "sqrt": return Script.N(java.lang.Math.sqrt(Script.toDouble(args[0])));
41 case "exp": return Script.N(java.lang.Math.exp(Script.toDouble(args[0])));
42 case "log": return Script.N(java.lang.Math.log(Script.toDouble(args[0])));
47 //#switch(Script.toString(method))
48 case "min": return Script.N(java.lang.Math.min(Script.toDouble(args[0]), Script.toDouble(args[1])));
49 case "max": return Script.N(java.lang.Math.max(Script.toDouble(args[0]), Script.toDouble(args[1])));
50 case "pow": return Script.N(java.lang.Math.pow(Script.toDouble(args[0]), Script.toDouble(args[1])));
51 case "atan2": return Script.N(java.lang.Math.atan2(Script.toDouble(args[0]), Script.toDouble(args[1])));
56 return super.call(method, args);
59 public JS get(JS key) throws JSExn {
60 //#switch(Script.toString(key))
62 case "LN10": return LN10;
63 case "LN2": return LN2;
64 case "LOG10E": return LOG10E;
65 case "LOG2E": return LOG2E;
67 case "SQRT1_2": return SQRT1_2;
68 case "SQRT2": return SQRT2;
69 case "ceil": return METHOD;
70 case "floor": return METHOD;
71 case "round": return METHOD;
72 case "min": return METHOD;
73 case "max": return METHOD;
74 case "pow": return METHOD;
75 case "atan2": return METHOD;
76 case "abs": return METHOD;
77 case "sin": return METHOD;
78 case "cos": return METHOD;
79 case "tan": return METHOD;
80 case "asin": return METHOD;
81 case "acos": return METHOD;
82 case "atan": return METHOD;
83 case "sqrt": return METHOD;
84 case "exp": return METHOD;
85 case "log": return METHOD;
86 case "random": return METHOD;
88 return super.get(key);