Index: src/math.js |
diff --git a/src/math.js b/src/math.js |
index cc478d344895361648b0bdba55a7bc5a96822e8d..2da38779e7cc31a1f7fcd29c9c83e83f1cbdb7cd 100644 |
--- a/src/math.js |
+++ b/src/math.js |
@@ -8,19 +8,23 @@ |
// in runtime.js: |
// var $Object = global.Object; |
-// Keep reference to original values of some global properties. This |
-// has the added benefit that the code in this file is isolated from |
-// changes to these properties. |
-var $floor = MathFloor; |
-var $abs = MathAbs; |
- |
// Instance class name can only be set on functions. That is the only |
// purpose for MathConstructor. |
function MathConstructor() {} |
var $Math = new MathConstructor(); |
+var rngstate; // Initialized to a Uint32Array during genesis. |
+ |
+var $abs; |
+var $exp; |
+var $floor; |
+var $max; |
+var $min; |
+ |
// ------------------------------------------------------------------- |
+(function() { |
+ |
// ECMA 262 - 15.8.2.1 |
function MathAbs(x) { |
if (%_IsSmi(x)) return x >= 0 ? x : -x; |
@@ -142,7 +146,6 @@ function MathPow(x, y) { |
} |
// ECMA 262 - 15.8.2.14 |
-var rngstate; // Initialized to a Uint32Array during genesis. |
function MathRandom() { |
var r0 = (MathImul(18030, rngstate[0] & 0xFFFF) + (rngstate[0] >>> 16)) | 0; |
rngstate[0] = r0; |
@@ -303,75 +306,71 @@ function CubeRoot(x) { |
// ------------------------------------------------------------------- |
-function SetUpMath() { |
- %CheckIsBootstrapping(); |
- |
- %InternalSetPrototype($Math, $Object.prototype); |
- %AddNamedProperty(global, "Math", $Math, DONT_ENUM); |
- %FunctionSetInstanceClassName(MathConstructor, 'Math'); |
- |
- %AddNamedProperty($Math, symbolToStringTag, "Math", READ_ONLY | DONT_ENUM); |
- |
- // Set up math constants. |
- InstallConstants($Math, $Array( |
- // ECMA-262, section 15.8.1.1. |
- "E", 2.7182818284590452354, |
- // ECMA-262, section 15.8.1.2. |
- "LN10", 2.302585092994046, |
- // ECMA-262, section 15.8.1.3. |
- "LN2", 0.6931471805599453, |
- // ECMA-262, section 15.8.1.4. |
- "LOG2E", 1.4426950408889634, |
- "LOG10E", 0.4342944819032518, |
- "PI", 3.1415926535897932, |
- "SQRT1_2", 0.7071067811865476, |
- "SQRT2", 1.4142135623730951 |
- )); |
- |
- // Set up non-enumerable functions of the Math object and |
- // set their names. |
- InstallFunctions($Math, DONT_ENUM, $Array( |
- "random", MathRandom, |
- "abs", MathAbs, |
- "acos", MathAcosJS, |
- "asin", MathAsinJS, |
- "atan", MathAtanJS, |
- "ceil", MathCeil, |
- "cos", MathCos, // implemented by third_party/fdlibm |
- "exp", MathExp, |
- "floor", MathFloor, |
- "log", MathLog, |
- "round", MathRound, |
- "sin", MathSin, // implemented by third_party/fdlibm |
- "sqrt", MathSqrt, |
- "tan", MathTan, // implemented by third_party/fdlibm |
- "atan2", MathAtan2JS, |
- "pow", MathPow, |
- "max", MathMax, |
- "min", MathMin, |
- "imul", MathImul, |
- "sign", MathSign, |
- "trunc", MathTrunc, |
- "sinh", MathSinh, // implemented by third_party/fdlibm |
- "cosh", MathCosh, // implemented by third_party/fdlibm |
- "tanh", MathTanh, |
- "asinh", MathAsinh, |
- "acosh", MathAcosh, |
- "atanh", MathAtanh, |
- "log10", MathLog10, // implemented by third_party/fdlibm |
- "log2", MathLog2, // implemented by third_party/fdlibm |
- "hypot", MathHypot, |
- "fround", MathFroundJS, |
- "clz32", MathClz32, |
- "cbrt", MathCbrt, |
- "log1p", MathLog1p, // implemented by third_party/fdlibm |
- "expm1", MathExpm1 // implemented by third_party/fdlibm |
- )); |
- |
- %SetInlineBuiltinFlag(MathCeil); |
- %SetInlineBuiltinFlag(MathRandom); |
- %SetInlineBuiltinFlag(MathSin); |
- %SetInlineBuiltinFlag(MathCos); |
-} |
+%CheckIsBootstrapping(); |
+ |
+%InternalSetPrototype($Math, $Object.prototype); |
+%AddNamedProperty(global, "Math", $Math, DONT_ENUM); |
+%FunctionSetInstanceClassName(MathConstructor, 'Math'); |
+ |
+%AddNamedProperty($Math, symbolToStringTag, "Math", READ_ONLY | DONT_ENUM); |
+ |
+// Set up math constants. |
+InstallConstants($Math, $Array( |
+ // ECMA-262, section 15.8.1.1. |
+ "E", 2.7182818284590452354, |
+ // ECMA-262, section 15.8.1.2. |
+ "LN10", 2.302585092994046, |
+ // ECMA-262, section 15.8.1.3. |
+ "LN2", 0.6931471805599453, |
+ // ECMA-262, section 15.8.1.4. |
+ "LOG2E", 1.4426950408889634, |
+ "LOG10E", 0.4342944819032518, |
+ "PI", 3.1415926535897932, |
+ "SQRT1_2", 0.7071067811865476, |
+ "SQRT2", 1.4142135623730951 |
+)); |
+ |
+// Set up non-enumerable functions of the Math object and |
+// set their names. |
+InstallFunctions($Math, DONT_ENUM, $Array( |
+ "random", MathRandom, |
+ "abs", MathAbs, |
+ "acos", MathAcosJS, |
+ "asin", MathAsinJS, |
+ "atan", MathAtanJS, |
+ "ceil", MathCeil, |
+ "exp", MathExp, |
+ "floor", MathFloor, |
+ "log", MathLog, |
+ "round", MathRound, |
+ "sqrt", MathSqrt, |
+ "atan2", MathAtan2JS, |
+ "pow", MathPow, |
+ "max", MathMax, |
+ "min", MathMin, |
+ "imul", MathImul, |
+ "sign", MathSign, |
+ "trunc", MathTrunc, |
+ "tanh", MathTanh, |
+ "asinh", MathAsinh, |
+ "acosh", MathAcosh, |
+ "atanh", MathAtanh, |
+ "hypot", MathHypot, |
+ "fround", MathFroundJS, |
+ "clz32", MathClz32, |
+ "cbrt", MathCbrt |
+)); |
+ |
+%SetInlineBuiltinFlag(MathCeil); |
+%SetInlineBuiltinFlag(MathRandom); |
+ |
+// Keep reference to original values of some global properties. This |
+// has the added benefit that the code in this file is isolated from |
+// changes to these properties. |
+$abs = MathAbs; |
+$exp = MathExp; |
+$floor = MathFloor; |
+$max = MathMax; |
+$min = MathMin; |
-SetUpMath(); |
+})(); |