Title: [101187] trunk/Source/_javascript_Core
Revision
101187
Author
msab...@apple.com
Date
2011-11-25 22:15:20 -0800 (Fri, 25 Nov 2011)

Log Message

String.prototype.toLower should be optimized for 8 bit strings
https://bugs.webkit.org/show_bug.cgi?id=73154

Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has
been optimized for 8 bit strings.

This is worth ~7% to sunspider string.tagcloud.

Reviewed by Filip Pizlo.

* runtime/StringPrototype.cpp:
(JSC::stringProtoFuncToLowerCase):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (101186 => 101187)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-26 06:01:06 UTC (rev 101186)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-26 06:15:20 UTC (rev 101187)
@@ -1,5 +1,20 @@
 2011-11-25  Michael Saboff  <msab...@apple.com>
 
+        String.prototype.toLower should be optimized for 8 bit strings
+        https://bugs.webkit.org/show_bug.cgi?id=73154
+
+        Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has
+        been optimized for 8 bit strings.
+
+        This is worth ~7% to sunspider string.tagcloud.
+
+        Reviewed by Filip Pizlo.
+
+        * runtime/StringPrototype.cpp:
+        (JSC::stringProtoFuncToLowerCase):
+
+2011-11-25  Michael Saboff  <msab...@apple.com>
+
         Array.toString always uses StringImpl::characters()
         https://bugs.webkit.org/show_bug.cgi?id=72969
 

Modified: trunk/Source/_javascript_Core/runtime/StringPrototype.cpp (101186 => 101187)


--- trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2011-11-26 06:01:06 UTC (rev 101186)
+++ trunk/Source/_javascript_Core/runtime/StringPrototype.cpp	2011-11-26 06:15:20 UTC (rev 101187)
@@ -1189,32 +1189,7 @@
     if (!sSize)
         return JSValue::encode(sVal);
 
-    const UChar* sData = s.characters();
-    Vector<UChar> buffer(sSize);
-
-    UChar ored = 0;
-    for (int i = 0; i < sSize; i++) {
-        UChar c = sData[i];
-        ored |= c;
-        buffer[i] = toASCIILower(c);
-    }
-    if (!(ored & ~0x7f))
-        return JSValue::encode(jsString(exec, UString::adopt(buffer)));
-
-    bool error;
-    int length = Unicode::toLower(buffer.data(), sSize, sData, sSize, &error);
-    if (error) {
-        buffer.resize(length);
-        length = Unicode::toLower(buffer.data(), length, sData, sSize, &error);
-        if (error)
-            return JSValue::encode(sVal);
-    }
-    if (length == sSize) {
-        if (memcmp(buffer.data(), sData, length * sizeof(UChar)) == 0)
-            return JSValue::encode(sVal);
-    } else
-        buffer.resize(length);
-    return JSValue::encode(jsString(exec, UString::adopt(buffer)));
+    return JSValue::encode(jsString(exec, UString(s.impl()->lower())));
 }
 
 EncodedJSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to