Title: [183928] trunk/Source/_javascript_Core
Revision
183928
Author
akl...@apple.com
Date
2015-05-07 08:56:40 -0700 (Thu, 07 May 2015)

Log Message

Special-case Int32 values in JSON.stringify().
<https://webkit.org/b/144731>

Reviewed by Michael Saboff.

Add a fast path for serializing Int32 values to JSON. This is far faster than dragging
simple integers through the full-blown dtoa() machinery.

~50% speedup on Kraken/json-stringify-tinderbox.

* runtime/JSONObject.cpp:
(JSC::Stringifier::appendStringifiedValue):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (183927 => 183928)


--- trunk/Source/_javascript_Core/ChangeLog	2015-05-07 14:12:17 UTC (rev 183927)
+++ trunk/Source/_javascript_Core/ChangeLog	2015-05-07 15:56:40 UTC (rev 183928)
@@ -1,3 +1,18 @@
+2015-05-07  Andreas Kling  <akl...@apple.com>
+
+        Special-case Int32 values in JSON.stringify().
+        <https://webkit.org/b/144731>
+
+        Reviewed by Michael Saboff.
+
+        Add a fast path for serializing Int32 values to JSON. This is far faster than dragging
+        simple integers through the full-blown dtoa() machinery.
+
+        ~50% speedup on Kraken/json-stringify-tinderbox.
+
+        * runtime/JSONObject.cpp:
+        (JSC::Stringifier::appendStringifiedValue):
+
 2015-05-06  Ryosuke Niwa  <rn...@webkit.org>
 
         ToT WebKit crashes while loading ES6 compatibility table

Modified: trunk/Source/_javascript_Core/runtime/JSONObject.cpp (183927 => 183928)


--- trunk/Source/_javascript_Core/runtime/JSONObject.cpp	2015-05-07 14:12:17 UTC (rev 183927)
+++ trunk/Source/_javascript_Core/runtime/JSONObject.cpp	2015-05-07 15:56:40 UTC (rev 183928)
@@ -390,11 +390,15 @@
     }
 
     if (value.isNumber()) {
-        double number = value.asNumber();
-        if (!std::isfinite(number))
-            builder.appendLiteral("null");
-        else
-            builder.appendECMAScriptNumber(number);
+        if (value.isInt32())
+            builder.appendNumber(value.asInt32());
+        else {
+            double number = value.asNumber();
+            if (!std::isfinite(number))
+                builder.appendLiteral("null");
+            else
+                builder.appendECMAScriptNumber(number);
+        }
         return StringifySucceeded;
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to