Reviewed by Sam.
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 03:17:11 +0000 (03:17 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 29 Dec 2007 03:17:11 +0000 (03:17 +0000)
        More changes to make number code readable

        * kjs/number_object.cpp:
        (KJS::integer_part_noexp):
        (KJS::numberToFixed):
        (KJS::numberToExponential):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29018 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/number_object.cpp

index eca8c497aafece68e58a8e1289b94a2cf4836c9e..f9f8bc71fd8b1db0ad7c2f8e1d9f5f09cf4f6e9a 100644 (file)
@@ -1,3 +1,14 @@
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        More changes to make number code readable
+
+        * kjs/number_object.cpp:
+        (KJS::integer_part_noexp):
+        (KJS::numberToFixed):
+        (KJS::numberToExponential):
+
 2007-12-28  Eric Seidel  <eric@webkit.org>
 
         Reviewed by Sam.
index cd836d4b8e1396b38f8bb16a8f9f337ac94c059a..088fd73b593d89ac771124f74db465b4af300c8f 100644 (file)
@@ -75,10 +75,11 @@ static UString integer_part_noexp(double d)
     int decimalPoint;
     int sign;
     char* result = kjs_dtoa(d, 0, 0, &decimalPoint, &sign, NULL);
+    bool resultIsInfOrNan = (decimalPoint == 9999);
     size_t length = strlen(result);
 
     UString str = sign ? "-" : "";
-    if (decimalPoint == 9999)
+    if (resultIsInfOrNan)
         str += result;
     else if (decimalPoint <= 0)
         str += "0";
@@ -198,31 +199,32 @@ static JSValue* numberToFixed(ExecState* exec, JSValue* v, const List& args)
     if (!(df >= 0 && df <= 20))
         return throwError(exec, RangeError, "toFixed() digits argument must be between 0 and 20");
     int f = (int)df;
-    
+
     double x = v->toNumber(exec);
     if (isnan(x))
         return jsString("NaN");
-    
-    UString s = "";
+
+    UString s;
     if (x < 0) {
-        s += "-";
+        s.append('-');
         x = -x;
     }
-    
+
     if (x >= pow(10.0, 21.0))
-        return jsString(s+UString::from(x));
-    
-    double n = floor(x*pow(10.0, f));
-    if (fabs(n / pow(10.0, f) - x) >= fabs((n + 1) / pow(10.0, f) - x))
+        return jsString(s + UString::from(x));
+
+    const double tenToTheF = pow(10.0, f);
+    double n = floor(x * tenToTheF);
+    if (fabs(n / tenToTheF - x) >= fabs((n + 1) / tenToTheF - x))
         n++;
-    
+
     UString m = integer_part_noexp(n);
-    
+
     int k = m.size();
     if (k <= f) {
-        UString z = "";
+        UString z;
         for (int i = 0; i < f + 1 - k; i++)
-            z += "0";
+            z.append('0');
         m = z + m;
         k = f + 1;
         ASSERT(k == m.size());
@@ -267,8 +269,9 @@ static JSValue* numberToExponential(ExecState* exec, JSValue* v, const List& arg
     if (!includeAllDigits) {
         double logx = floor(log10(fabs(x)));
         x /= pow(10.0, logx);
-        double fx = floor(x * pow(10.0, f)) / pow(10.0, f);
-        double cx = ceil(x * pow(10.0, f)) / pow(10.0, f);
+        const double tenToTheF = pow(10.0, f);
+        double fx = floor(x * tenToTheF) / tenToTheF;
+        double cx = ceil(x * tenToTheF) / tenToTheF;
 
         if (fabs(fx - x) < fabs(cx - x))
             x = fx;
@@ -278,22 +281,21 @@ static JSValue* numberToExponential(ExecState* exec, JSValue* v, const List& arg
         decimalAdjust = static_cast<int>(logx);
     }
 
-    char buf[80];
-    int decimalPoint;
-    int sign;
-
     if (isnan(x))
         return jsString("NaN");
 
+    int decimalPoint;
+    int sign;
     char* result = kjs_dtoa(x, 0, 0, &decimalPoint, &sign, NULL);
     size_t length = strlen(result);
     decimalPoint += decimalAdjust;
 
     int i = 0;
+    char buf[80];
     if (sign)
         buf[i++] = '-';
 
-    if (decimalPoint == 999)
+    if (decimalPoint == 999) // ? 9999 is the magical "result is Inf or NaN" value.  what's 999??
         strcpy(buf + i, result);
     else {
         buf[i++] = result[0];