OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function(global, utils) { | 5 (function(global, utils) { |
6 "use strict"; | 6 "use strict"; |
7 | 7 |
8 %CheckIsBootstrapping(); | 8 %CheckIsBootstrapping(); |
9 | 9 |
10 // ------------------------------------------------------------------- | 10 // ------------------------------------------------------------------- |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 // ECMA 262 - 15.8.2.5 | 33 // ECMA 262 - 15.8.2.5 |
34 // The naming of y and x matches the spec, as does the order in which | 34 // The naming of y and x matches the spec, as does the order in which |
35 // ToNumber (valueOf) is called. | 35 // ToNumber (valueOf) is called. |
36 function MathAtan2JS(y, x) { | 36 function MathAtan2JS(y, x) { |
37 y = +y; | 37 y = +y; |
38 x = +x; | 38 x = +x; |
39 return %MathAtan2(y, x); | 39 return %MathAtan2(y, x); |
40 } | 40 } |
41 | 41 |
42 // ECMA 262 - 15.8.2.6 | |
43 function MathCeil(x) { | |
44 return -%math_floor(-x); | |
45 } | |
46 | |
47 // ECMA 262 - 15.8.2.8 | 42 // ECMA 262 - 15.8.2.8 |
48 function MathExp(x) { | 43 function MathExp(x) { |
49 return %MathExpRT(TO_NUMBER(x)); | 44 return %MathExpRT(TO_NUMBER(x)); |
50 } | 45 } |
51 | 46 |
52 // ECMA 262 - 15.8.2.10 | 47 // ECMA 262 - 15.8.2.10 |
53 function MathLog(x) { | 48 function MathLog(x) { |
54 return %_MathLogRT(TO_NUMBER(x)); | 49 return %_MathLogRT(TO_NUMBER(x)); |
55 } | 50 } |
56 | 51 |
(...skipping 17 matching lines...) Expand all Loading... |
74 } | 69 } |
75 | 70 |
76 function MathRandomRaw() { | 71 function MathRandomRaw() { |
77 if (nextRandomIndex <= kRandomNumberStart) { | 72 if (nextRandomIndex <= kRandomNumberStart) { |
78 randomNumbers = %GenerateRandomNumbers(randomNumbers); | 73 randomNumbers = %GenerateRandomNumbers(randomNumbers); |
79 nextRandomIndex = randomNumbers.length; | 74 nextRandomIndex = randomNumbers.length; |
80 } | 75 } |
81 return %_DoubleLo(randomNumbers[--nextRandomIndex]) & 0x3FFFFFFF; | 76 return %_DoubleLo(randomNumbers[--nextRandomIndex]) & 0x3FFFFFFF; |
82 } | 77 } |
83 | 78 |
84 // ECMA 262 - 15.8.2.15 | |
85 function MathRound(x) { | |
86 return %RoundNumber(TO_NUMBER(x)); | |
87 } | |
88 | |
89 // ES6 draft 09-27-13, section 20.2.2.28. | 79 // ES6 draft 09-27-13, section 20.2.2.28. |
90 function MathSign(x) { | 80 function MathSign(x) { |
91 x = +x; | 81 x = +x; |
92 if (x > 0) return 1; | 82 if (x > 0) return 1; |
93 if (x < 0) return -1; | 83 if (x < 0) return -1; |
94 // -0, 0 or NaN. | 84 // -0, 0 or NaN. |
95 return x; | 85 return x; |
96 } | 86 } |
97 | 87 |
98 // ES6 draft 09-27-13, section 20.2.2.34. | |
99 function MathTrunc(x) { | |
100 x = +x; | |
101 if (x > 0) return %math_floor(x); | |
102 if (x < 0) return -%math_floor(-x); | |
103 // -0, 0 or NaN. | |
104 return x; | |
105 } | |
106 | |
107 // ES6 draft 09-27-13, section 20.2.2.5. | 88 // ES6 draft 09-27-13, section 20.2.2.5. |
108 function MathAsinh(x) { | 89 function MathAsinh(x) { |
109 x = TO_NUMBER(x); | 90 x = TO_NUMBER(x); |
110 // Idempotent for NaN, +/-0 and +/-Infinity. | 91 // Idempotent for NaN, +/-0 and +/-Infinity. |
111 if (x === 0 || !NUMBER_IS_FINITE(x)) return x; | 92 if (x === 0 || !NUMBER_IS_FINITE(x)) return x; |
112 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1)); | 93 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1)); |
113 // This is to prevent numerical errors caused by large negative x. | 94 // This is to prevent numerical errors caused by large negative x. |
114 return -MathLog(-x + %math_sqrt(x * x + 1)); | 95 return -MathLog(-x + %math_sqrt(x * x + 1)); |
115 } | 96 } |
116 | 97 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 "PI", 3.1415926535897932, | 193 "PI", 3.1415926535897932, |
213 "SQRT1_2", 0.7071067811865476, | 194 "SQRT1_2", 0.7071067811865476, |
214 "SQRT2", 1.4142135623730951 | 195 "SQRT2", 1.4142135623730951 |
215 ]); | 196 ]); |
216 | 197 |
217 // Set up non-enumerable functions of the Math object and | 198 // Set up non-enumerable functions of the Math object and |
218 // set their names. | 199 // set their names. |
219 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ | 200 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ |
220 "random", MathRandom, | 201 "random", MathRandom, |
221 "abs", MathAbs, | 202 "abs", MathAbs, |
222 "ceil", MathCeil, | |
223 "exp", MathExp, | 203 "exp", MathExp, |
224 "log", MathLog, | 204 "log", MathLog, |
225 "round", MathRound, | |
226 "atan2", MathAtan2JS, | 205 "atan2", MathAtan2JS, |
227 "pow", MathPowJS, | 206 "pow", MathPowJS, |
228 "sign", MathSign, | 207 "sign", MathSign, |
229 "trunc", MathTrunc, | |
230 "asinh", MathAsinh, | 208 "asinh", MathAsinh, |
231 "acosh", MathAcosh, | 209 "acosh", MathAcosh, |
232 "atanh", MathAtanh, | 210 "atanh", MathAtanh, |
233 "hypot", MathHypot, | 211 "hypot", MathHypot, |
234 "clz32", MathClz32JS, | 212 "clz32", MathClz32JS, |
235 "cbrt", MathCbrt | 213 "cbrt", MathCbrt |
236 ]); | 214 ]); |
237 | 215 |
238 %SetForceInlineFlag(MathAbs); | 216 %SetForceInlineFlag(MathAbs); |
239 %SetForceInlineFlag(MathAtan2JS); | 217 %SetForceInlineFlag(MathAtan2JS); |
240 %SetForceInlineFlag(MathCeil); | |
241 %SetForceInlineFlag(MathClz32JS); | 218 %SetForceInlineFlag(MathClz32JS); |
242 %SetForceInlineFlag(MathRandom); | 219 %SetForceInlineFlag(MathRandom); |
243 %SetForceInlineFlag(MathSign); | 220 %SetForceInlineFlag(MathSign); |
244 %SetForceInlineFlag(MathTrunc); | |
245 | 221 |
246 // ------------------------------------------------------------------- | 222 // ------------------------------------------------------------------- |
247 // Exports | 223 // Exports |
248 | 224 |
249 utils.Export(function(to) { | 225 utils.Export(function(to) { |
250 to.MathAbs = MathAbs; | 226 to.MathAbs = MathAbs; |
251 to.MathExp = MathExp; | 227 to.MathExp = MathExp; |
252 to.IntRandom = MathRandomRaw; | 228 to.IntRandom = MathRandomRaw; |
253 }); | 229 }); |
254 | 230 |
255 }) | 231 }) |
OLD | NEW |