Reviewed by Sam Weinig.
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Nov 2007 08:05:03 +0000 (08:05 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 13 Nov 2007 08:05:03 +0000 (08:05 +0000)
        Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
        base64 spends 1.1% of total time checking for special Infinity case

        Use a fast character test instead of calling strncmp.

        1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
        Sharks reports only .1%. Who are you going to believe? Huh?

        * kjs/ustring.cpp:
        (KJS::UString::toDouble):

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/ustring.cpp

index 876b7299fb7866ad3aa75da1351cc74815338d75..e3ec065a3bda16a6d5ab2427e5fce1dede795b3e 100644 (file)
@@ -1,3 +1,18 @@
+2007-11-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
+        base64 spends 1.1% of total time checking for special Infinity case
+        
+        Use a fast character test instead of calling strncmp.
+        
+        1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
+        Sharks reports only .1%. Who are you going to believe? Huh?
+
+        * kjs/ustring.cpp:
+        (KJS::UString::toDouble):
+
 2007-11-12  Eric Seidel  <eric@webkit.org>
 
         Reviewed by Oliver.
index 2b4b54cb83ecfcaec8811c7ff2b26e65d3565b7b..7a94e61d38e411b87859189b6d47786a138338bd 100644 (file)
@@ -1001,7 +1001,7 @@ double UString::toDouble(bool tolerateTrailingJunk, bool tolerateEmptyString) co
       // converts the string "inf" with any capitalization to infinity,
       // whereas the ECMA spec requires that it be converted to NaN.
 
-      if (strncmp(c, "Infinity", 8) == 0) {
+      if (c[0] == 'I' && c[1] == 'n' && c[2] == 'f' && c[3] == 'i' && c[4] == 'n' && c[5] == 'i' && c[6] == 't' && c[7] == 'y') {
         d = sign * Inf;
         c += 8;
       } else if ((d == Inf || d == -Inf) && *c != 'I' && *c != 'i')