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 11 matching lines...) Expand all Loading... |
22 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); | 22 var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol"); |
23 | 23 |
24 //------------------------------------------------------------------- | 24 //------------------------------------------------------------------- |
25 | 25 |
26 // ECMA 262 - 15.8.2.1 | 26 // ECMA 262 - 15.8.2.1 |
27 function MathAbs(x) { | 27 function MathAbs(x) { |
28 x = +x; | 28 x = +x; |
29 return (x > 0) ? x : 0 - x; | 29 return (x > 0) ? x : 0 - x; |
30 } | 30 } |
31 | 31 |
32 // ECMA 262 - 15.8.2.13 | |
33 function MathPowJS(x, y) { | |
34 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y)); | |
35 } | |
36 | |
37 // ECMA 262 - 15.8.2.14 | 32 // ECMA 262 - 15.8.2.14 |
38 function MathRandom() { | 33 function MathRandom() { |
39 // While creating a startup snapshot, %GenerateRandomNumbers returns a | 34 // While creating a startup snapshot, %GenerateRandomNumbers returns a |
40 // normal array containing a single random number, and has to be called for | 35 // normal array containing a single random number, and has to be called for |
41 // every new random number. | 36 // every new random number. |
42 // Otherwise, it returns a pre-populated typed array of random numbers. The | 37 // Otherwise, it returns a pre-populated typed array of random numbers. The |
43 // first two elements are reserved for the PRNG state. | 38 // first two elements are reserved for the PRNG state. |
44 if (nextRandomIndex <= kRandomNumberStart) { | 39 if (nextRandomIndex <= kRandomNumberStart) { |
45 randomNumbers = %GenerateRandomNumbers(randomNumbers); | 40 randomNumbers = %GenerateRandomNumbers(randomNumbers); |
46 if (%_IsTypedArray(randomNumbers)) { | 41 if (%_IsTypedArray(randomNumbers)) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 var summand = n * n - compensation; | 107 var summand = n * n - compensation; |
113 var preliminary = sum + summand; | 108 var preliminary = sum + summand; |
114 compensation = (preliminary - sum) - summand; | 109 compensation = (preliminary - sum) - summand; |
115 sum = preliminary; | 110 sum = preliminary; |
116 } | 111 } |
117 return %math_sqrt(sum) * max; | 112 return %math_sqrt(sum) * max; |
118 } | 113 } |
119 | 114 |
120 // ------------------------------------------------------------------- | 115 // ------------------------------------------------------------------- |
121 | 116 |
122 %InstallToContext([ | |
123 "math_pow", MathPowJS, | |
124 ]); | |
125 | |
126 %AddNamedProperty(GlobalMath, toStringTagSymbol, "Math", READ_ONLY | DONT_ENUM); | 117 %AddNamedProperty(GlobalMath, toStringTagSymbol, "Math", READ_ONLY | DONT_ENUM); |
127 | 118 |
128 // Set up math constants. | 119 // Set up math constants. |
129 utils.InstallConstants(GlobalMath, [ | 120 utils.InstallConstants(GlobalMath, [ |
130 "PI", 3.1415926535897932, | 121 "PI", 3.1415926535897932, |
131 "SQRT1_2", 0.7071067811865476, | 122 "SQRT1_2", 0.7071067811865476, |
132 "SQRT2", 1.4142135623730951 | 123 "SQRT2", 1.4142135623730951 |
133 ]); | 124 ]); |
134 | 125 |
135 // Set up non-enumerable functions of the Math object and | 126 // Set up non-enumerable functions of the Math object and |
136 // set their names. | 127 // set their names. |
137 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ | 128 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ |
138 "random", MathRandom, | 129 "random", MathRandom, |
139 "abs", MathAbs, | 130 "abs", MathAbs, |
140 "pow", MathPowJS, | |
141 "sign", MathSign, | 131 "sign", MathSign, |
142 "asinh", MathAsinh, | 132 "asinh", MathAsinh, |
143 "acosh", MathAcosh, | 133 "acosh", MathAcosh, |
144 "hypot", MathHypot, | 134 "hypot", MathHypot, |
145 ]); | 135 ]); |
146 | 136 |
147 %SetForceInlineFlag(MathRandom); | 137 %SetForceInlineFlag(MathRandom); |
148 %SetForceInlineFlag(MathSign); | 138 %SetForceInlineFlag(MathSign); |
149 | 139 |
150 // ------------------------------------------------------------------- | 140 // ------------------------------------------------------------------- |
151 // Exports | 141 // Exports |
152 | 142 |
153 utils.Export(function(to) { | 143 utils.Export(function(to) { |
154 to.MathAbs = MathAbs; | 144 to.MathAbs = MathAbs; |
155 to.IntRandom = MathRandomRaw; | 145 to.IntRandom = MathRandomRaw; |
156 }); | 146 }); |
157 | 147 |
158 }) | 148 }) |
OLD | NEW |