Title: [214781] releases/WebKitGTK/webkit-2.16
Revision
214781
Author
carlo...@webkit.org
Date
2017-04-03 06:00:16 -0700 (Mon, 03 Apr 2017)

Log Message

Merge r214272 - [JSC] Use jsNontrivialString for Number toString operations
https://bugs.webkit.org/show_bug.cgi?id=169965

Reviewed by Mark Lam.

JSTests:

* stress/to-string-int32.js: Added.
(shouldBe):
(toString10):
(expected):

Source/_javascript_Core:

After single character check, produced string is always longer than 1.
Thus, we can use jsNontrivialString.

* runtime/NumberPrototype.cpp:
(JSC::int32ToStringInternal):

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog (214780 => 214781)


--- releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-04-03 12:59:28 UTC (rev 214780)
+++ releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-04-03 13:00:16 UTC (rev 214781)
@@ -1,3 +1,15 @@
+2017-03-22  Yusuke Suzuki  <utatane....@gmail.com>
+
+        [JSC] Use jsNontrivialString for Number toString operations
+        https://bugs.webkit.org/show_bug.cgi?id=169965
+
+        Reviewed by Mark Lam.
+
+        * stress/to-string-int32.js: Added.
+        (shouldBe):
+        (toString10):
+        (expected):
+
 2017-03-21  Yusuke Suzuki  <utatane....@gmail.com>
 
         [JSC] Optimize Number.prototype.toString on Int32 / Int52 / Double

Added: releases/WebKitGTK/webkit-2.16/JSTests/stress/to-string-int32.js (0 => 214781)


--- releases/WebKitGTK/webkit-2.16/JSTests/stress/to-string-int32.js	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.16/JSTests/stress/to-string-int32.js	2017-04-03 13:00:16 UTC (rev 214781)
@@ -0,0 +1,59 @@
+function shouldBe(actual, expected)
+{
+    if (actual !== expected)
+        throw new Error(`bad value: expected:(${expected}),actual:(${actual})`);
+}
+
+function toString(value, radix)
+{
+    return value.toString(radix);
+}
+noInline(toString);
+
+function toString10(value)
+{
+    return `${value}`;
+}
+noInline(toString10);
+
+function expected(num, radix)
+{
+    let characters = "0123456789abcdefghijklmnopqrstuvwxyz";
+    let result = "";
+    let negative = false;
+    if (num < 0) {
+        negative = true;
+        num = -num;
+    }
+
+    do {
+        const index = num % radix;
+        result = characters[index] + result;
+        num = (num - index) / radix;
+    } while (num);
+
+    if (negative)
+        return '-' + result;
+    return result;
+}
+
+for (var i = 0; i < 1e4; ++i) {
+    toString(i, 10);
+    toString(i, 36);
+    toString10(i);
+}
+
+for (var radix = 2; radix < 37; ++radix) {
+    for (var lessThanRadix = -2000; lessThanRadix < radix; ++lessThanRadix)
+        shouldBe(toString(lessThanRadix, radix), expected(lessThanRadix, radix));
+    for (var greaterThanRadix = radix; greaterThanRadix < 2000; ++greaterThanRadix)
+        shouldBe(toString(greaterThanRadix, radix), expected(greaterThanRadix, radix));
+}
+
+{
+    var radix = 10;
+    for (var lessThanRadix = -2000; lessThanRadix < radix; ++lessThanRadix)
+        shouldBe(toString10(lessThanRadix), expected(lessThanRadix, radix));
+    for (var greaterThanRadix = radix; greaterThanRadix < 2000; ++greaterThanRadix)
+        shouldBe(toString10(greaterThanRadix), expected(greaterThanRadix, radix));
+}

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog (214780 => 214781)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-04-03 12:59:28 UTC (rev 214780)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-04-03 13:00:16 UTC (rev 214781)
@@ -1,3 +1,16 @@
+2017-03-22  Yusuke Suzuki  <utatane....@gmail.com>
+
+        [JSC] Use jsNontrivialString for Number toString operations
+        https://bugs.webkit.org/show_bug.cgi?id=169965
+
+        Reviewed by Mark Lam.
+
+        After single character check, produced string is always longer than 1.
+        Thus, we can use jsNontrivialString.
+
+        * runtime/NumberPrototype.cpp:
+        (JSC::int32ToStringInternal):
+
 2017-03-21  Mark Lam  <mark....@apple.com>
 
         The DFG Integer Check Combining phase should force an OSR exit for CheckInBounds on a negative constant min bound.

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/NumberPrototype.cpp (214780 => 214781)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/NumberPrototype.cpp	2017-04-03 12:59:28 UTC (rev 214780)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/NumberPrototype.cpp	2017-04-03 13:00:16 UTC (rev 214781)
@@ -499,7 +499,7 @@
     return radix;
 }
 
-static inline JSString* int32ToStringInternal(VM& vm, int32_t value, int32_t radix)
+static ALWAYS_INLINE JSString* int32ToStringInternal(VM& vm, int32_t value, int32_t radix)
 {
     ASSERT(!(radix < 2 || radix > 36));
     // A negative value casted to unsigned would be bigger than 36 (the max radix).
@@ -509,11 +509,10 @@
         return vm.smallStrings.singleCharacterString(radixDigits[value]);
     }
 
-    if (radix == 10) {
-        return jsString(&vm, vm.numericStrings.add(value));
-    }
+    if (radix == 10)
+        return jsNontrivialString(&vm, vm.numericStrings.add(value));
 
-    return jsString(&vm, toStringWithRadix(value, radix));
+    return jsNontrivialString(&vm, toStringWithRadix(value, radix));
 
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to