Remove unneeded indirections for java.lang.Math
Change-Id: I8e0ca436daea541e720a280d746e5e6cc21d1873
diff --git a/user/super/com/google/gwt/emul/java/lang/Math.java b/user/super/com/google/gwt/emul/java/lang/Math.java
index 26bf8f2..1800381 100644
--- a/user/super/com/google/gwt/emul/java/lang/Math.java
+++ b/user/super/com/google/gwt/emul/java/lang/Math.java
@@ -17,6 +17,7 @@
import static javaemul.internal.InternalPreconditions.checkCriticalArithmetic;
+import jsinterop.annotations.JsMethod;
import jsinterop.annotations.JsPackage;
import jsinterop.annotations.JsType;
@@ -46,29 +47,24 @@
private static final double PI_OVER_180 = PI / 180.0;
private static final double PI_UNDER_180 = 180.0 / PI;
- public static double abs(double x) {
- return NativeMath.abs(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double abs(double x);
- public static float abs(float x) {
- return (float) NativeMath.abs(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native float abs(float x);
- public static int abs(int x) {
- return x < 0 ? -x : x;
- }
+ @JsMethod(namespace = "Math")
+ public static native int abs(int x);
public static long abs(long x) {
return x < 0 ? -x : x;
}
- public static double acos(double x) {
- return NativeMath.acos(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double acos(double x);
- public static double asin(double x) {
- return NativeMath.asin(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double asin(double x);
public static int addExact(int x, int y) {
double r = (double) x + (double) y;
@@ -83,24 +79,21 @@
return r;
}
- public static double atan(double x) {
- return NativeMath.atan(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double atan(double x);
- public static double atan2(double y, double x) {
- return NativeMath.atan2(y, x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double atan2(double y, double x);
public static double cbrt(double x) {
- return x == 0 || !Double.isFinite(x) ? x : NativeMath.pow(x, 1.0 / 3.0);
+ return x == 0 || !Double.isFinite(x) ? x : pow(x, 1.0 / 3.0);
}
- public static double ceil(double x) {
- return NativeMath.ceil(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double ceil(double x);
public static double copySign(double magnitude, double sign) {
- return isNegative(sign) ? -NativeMath.abs(magnitude) : NativeMath.abs(magnitude);
+ return isNegative(sign) ? -abs(magnitude) : abs(magnitude);
}
private static boolean isNegative(double d) {
@@ -111,12 +104,11 @@
return (float) copySign((double) magnitude, (double) sign);
}
- public static double cos(double x) {
- return NativeMath.cos(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double cos(double x);
public static double cosh(double x) {
- return (NativeMath.exp(x) + NativeMath.exp(-x)) / 2;
+ return (exp(x) + exp(-x)) / 2;
}
public static int decrementExact(int x) {
@@ -129,17 +121,15 @@
return x - 1;
}
- public static double exp(double x) {
- return NativeMath.exp(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double exp(double x);
public static double expm1(double d) {
- return d == 0 ? d : NativeMath.exp(d) - 1;
+ return d == 0 ? d : exp(d) - 1;
}
- public static double floor(double x) {
- return NativeMath.floor(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double floor(double x);
public static int floorDiv(int dividend, int divisor) {
checkCriticalArithmetic(divisor != 0);
@@ -165,7 +155,7 @@
public static double hypot(double x, double y) {
return Double.isInfinite(x) || Double.isInfinite(y) ?
- Double.POSITIVE_INFINITY : NativeMath.sqrt(x * x + y * y);
+ Double.POSITIVE_INFINITY : sqrt(x * x + y * y);
}
public static int incrementExact(int x) {
@@ -178,45 +168,38 @@
return x + 1;
}
- public static double log(double x) {
- return NativeMath.log(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double log(double x);
public static double log10(double x) {
- return NativeMath.log(x) * NativeMath.LOG10E;
+ return log(x) * NativeMath.LOG10E;
}
public static double log1p(double x) {
- return x == 0 ? x : NativeMath.log(x + 1);
+ return x == 0 ? x : log(x + 1);
}
- public static double max(double x, double y) {
- return NativeMath.max(x, y);
- }
+ @JsMethod(namespace = "Math")
+ public static native double max(double x, double y);
- public static float max(float x, float y) {
- return (float) NativeMath.max(x, y);
- }
+ @JsMethod(namespace = "Math")
+ public static native float max(float x, float y);
- public static int max(int x, int y) {
- return x > y ? x : y;
- }
+ @JsMethod(namespace = "Math")
+ public static native int max(int x, int y);
public static long max(long x, long y) {
return x > y ? x : y;
}
- public static double min(double x, double y) {
- return NativeMath.min(x, y);
- }
+ @JsMethod(namespace = "Math")
+ public static native double min(double x, double y);
- public static float min(float x, float y) {
- return (float) NativeMath.min(x, y);
- }
+ @JsMethod(namespace = "Math")
+ public static native float min(float x, float y);
- public static int min(int x, int y) {
- return x < y ? x : y;
- }
+ @JsMethod(namespace = "Math")
+ public static native int min(int x, int y);
public static long min(long x, long y) {
return x < y ? x : y;
@@ -250,24 +233,22 @@
return -x;
}
- public static double pow(double x, double exp) {
- return NativeMath.pow(x, exp);
- }
+ @JsMethod(namespace = "Math")
+ public static native double pow(double x, double exp);
- public static double random() {
- return NativeMath.random();
- }
+ @JsMethod(namespace = "Math")
+ public static native double random();
public static double rint(double x) {
// Floating point has a mantissa with an accuracy of 52 bits so
// any number bigger than 2^52 is effectively a finite integer value.
// This case also filters out NaN and infinite values.
- if (NativeMath.abs(x) < (double) (1L << 52)) {
+ if (abs(x) < (double) (1L << 52)) {
double mod2 = x % 2;
if ((mod2 == -1.5) || (mod2 == 0.5)) {
- x = NativeMath.floor(x);
+ x = floor(x);
} else {
- x = NativeMath.round(x);
+ x = round(x);
}
}
return x;
@@ -297,7 +278,7 @@
public static double scalb(double d, int scaleFactor) {
if (scaleFactor >= 31 || scaleFactor <= -31) {
- return d * NativeMath.pow(2, scaleFactor);
+ return d * pow(2, scaleFactor);
} else if (scaleFactor > 0) {
return d * (1 << scaleFactor);
} else if (scaleFactor == 0) {
@@ -323,21 +304,18 @@
return (float) signum((double) f);
}
- public static double sin(double x) {
- return NativeMath.sin(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double sin(double x);
public static double sinh(double x) {
- return x == 0 ? x : (NativeMath.exp(x) - NativeMath.exp(-x)) / 2;
+ return x == 0 ? x : (exp(x) - exp(-x)) / 2;
}
- public static double sqrt(double x) {
- return NativeMath.sqrt(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double sqrt(double x);
- public static double tan(double x) {
- return NativeMath.tan(x);
- }
+ @JsMethod(namespace = "Math")
+ public static native double tan(double x);
public static double tanh(double x) {
if (x == 0.0) {
@@ -345,7 +323,7 @@
} else if (Double.isInfinite(x)) {
return signum(x);
} else {
- double e2x = NativeMath.exp(2 * x);
+ double e2x = exp(2 * x);
return (e2x - 1) / (e2x + 1);
}
}
@@ -371,23 +349,6 @@
@JsType(isNative = true, name = "Math", namespace = JsPackage.GLOBAL)
private static class NativeMath {
public static double LOG10E;
- public static native double abs(double x);
- public static native double acos(double x);
- public static native double asin(double x);
- public static native double atan(double x);
- public static native double atan2(double y, double x);
- public static native double ceil(double x);
- public static native double cos(double x);
- public static native double exp(double x);
- public static native double floor(double x);
- public static native double log(double x);
- public static native double max(double x, double y);
- public static native double min(double x, double y);
- public static native double pow(double x, double exp);
- public static native double random();
public static native double round(double x);
- public static native double sin(double x);
- public static native double sqrt(double x);
- public static native double tan(double x);
}
}