| Index: src/harmony-math.js
|
| diff --git a/src/harmony-math.js b/src/harmony-math.js
|
| index d57a10404259eec07094930e61fd161fb58c6428..7856917890b5f3f4c0369a8731c6892a8ef57346 100644
|
| --- a/src/harmony-math.js
|
| +++ b/src/harmony-math.js
|
| @@ -59,8 +59,7 @@ function MathSinh(x) {
|
| // ES6 draft 09-27-13, section 20.2.2.12.
|
| function MathCosh(x) {
|
| if (!IS_NUMBER(x)) x = NonNumberToNumber(x);
|
| - // Idempotent for NaN and +/-Infinity.
|
| - if (!NUMBER_IS_FINITE(x)) return x;
|
| + if (!NUMBER_IS_FINITE(x)) return MathAbs(x);
|
| return (MathExp(x) + MathExp(-x)) / 2;
|
| }
|
|
|
| @@ -110,19 +109,19 @@ function MathAtanh(x) {
|
| }
|
|
|
|
|
| -//ES6 draft 09-27-13, section 20.2.2.21.
|
| +// ES6 draft 09-27-13, section 20.2.2.21.
|
| function MathLog10(x) {
|
| return MathLog(x) * 0.434294481903251828; // log10(x) = log(x)/log(10).
|
| }
|
|
|
|
|
| -//ES6 draft 09-27-13, section 20.2.2.22.
|
| +// ES6 draft 09-27-13, section 20.2.2.22.
|
| function MathLog2(x) {
|
| return MathLog(x) * 1.442695040888963407; // log2(x) = log(x)/log(2).
|
| }
|
|
|
|
|
| -//ES6 draft 09-27-13, section 20.2.2.17.
|
| +// ES6 draft 09-27-13, section 20.2.2.17.
|
| function MathHypot(x, y) { // Function length is 2.
|
| // We may want to introduce fast paths for two arguments and when
|
| // normalization to avoid overflow is not necessary. For now, we
|
| @@ -155,6 +154,44 @@ function MathHypot(x, y) { // Function length is 2.
|
| }
|
|
|
|
|
| +// ES6 draft 09-27-13, section 20.2.2.16.
|
| +function MathFround(x) {
|
| + return %Math_fround(TO_NUMBER_INLINE(x));
|
| +}
|
| +
|
| +
|
| +function MathClz32(x) {
|
| + x = ToUint32(TO_NUMBER_INLINE(x));
|
| + if (x == 0) return 32;
|
| + var result = 0;
|
| + // Binary search.
|
| + if ((x & 0xFFFF0000) === 0) { x <<= 16; result += 16; };
|
| + if ((x & 0xFF000000) === 0) { x <<= 8; result += 8; };
|
| + if ((x & 0xF0000000) === 0) { x <<= 4; result += 4; };
|
| + if ((x & 0xC0000000) === 0) { x <<= 2; result += 2; };
|
| + if ((x & 0x80000000) === 0) { x <<= 1; result += 1; };
|
| + return result;
|
| +}
|
| +
|
| +
|
| +//ES6 draft 09-27-13, section 20.2.2.9.
|
| +function MathCbrt(x) {
|
| + return %Math_cbrt(TO_NUMBER_INLINE(x));
|
| +}
|
| +
|
| +
|
| +//ES6 draft 09-27-13, section 20.2.2.14.
|
| +function MathExpm1(x) {
|
| + return %Math_expm1(TO_NUMBER_INLINE(x));
|
| +}
|
| +
|
| +
|
| +//ES6 draft 09-27-13, section 20.2.2.20.
|
| +function MathLog1p(x) {
|
| + return %Math_log1p(TO_NUMBER_INLINE(x));
|
| +}
|
| +
|
| +
|
| function ExtendMath() {
|
| %CheckIsBootstrapping();
|
|
|
| @@ -170,8 +207,14 @@ function ExtendMath() {
|
| "atanh", MathAtanh,
|
| "log10", MathLog10,
|
| "log2", MathLog2,
|
| - "hypot", MathHypot
|
| + "hypot", MathHypot,
|
| + "fround", MathFround,
|
| + "clz32", MathClz32,
|
| + "cbrt", MathCbrt,
|
| + "log1p", MathLog1p,
|
| + "expm1", MathExpm1
|
| ));
|
| }
|
|
|
| +
|
| ExtendMath();
|
|
|