Title: [214345] trunk
- Revision
- 214345
- Author
- [email protected]
- Date
- 2017-03-24 07:30:13 -0700 (Fri, 24 Mar 2017)
Log Message
[JSC] Use jsNontrivialString agressively for ToString(Int52)
https://bugs.webkit.org/show_bug.cgi?id=170002
Reviewed by Sam Weinig.
JSTests:
* stress/to-string-int52.js: Added.
(shouldBe):
(toString10):
(expected):
Source/_javascript_Core:
We use the same logic used for Int32 to use jsNontvirialString.
After single character check, produced string is always longer than 1.
Thus, we can use jsNontrivialString.
* runtime/NumberPrototype.cpp:
(JSC::int52ToString):
Modified Paths
Added Paths
Diff
Modified: trunk/JSTests/ChangeLog (214344 => 214345)
--- trunk/JSTests/ChangeLog 2017-03-24 13:59:02 UTC (rev 214344)
+++ trunk/JSTests/ChangeLog 2017-03-24 14:30:13 UTC (rev 214345)
@@ -1,5 +1,17 @@
2017-03-23 Yusuke Suzuki <[email protected]>
+ [JSC] Use jsNontrivialString agressively for ToString(Int52)
+ https://bugs.webkit.org/show_bug.cgi?id=170002
+
+ Reviewed by Sam Weinig.
+
+ * stress/to-string-int52.js: Added.
+ (shouldBe):
+ (toString10):
+ (expected):
+
+2017-03-23 Yusuke Suzuki <[email protected]>
+
[JSC][DFG] Make addShouldSpeculateAnyInt more conservative to avoid regression caused by Double <-> Int52 conversions
https://bugs.webkit.org/show_bug.cgi?id=169998
Added: trunk/JSTests/stress/to-string-int52.js (0 => 214345)
--- trunk/JSTests/stress/to-string-int52.js (rev 0)
+++ trunk/JSTests/stress/to-string-int52.js 2017-03-24 14:30:13 UTC (rev 214345)
@@ -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 fiatInt52(value).toString(radix);
+}
+noInline(toString);
+
+function toString10(value)
+{
+ return `${fiatInt52(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: trunk/Source/_javascript_Core/ChangeLog (214344 => 214345)
--- trunk/Source/_javascript_Core/ChangeLog 2017-03-24 13:59:02 UTC (rev 214344)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-03-24 14:30:13 UTC (rev 214345)
@@ -1,5 +1,19 @@
2017-03-23 Yusuke Suzuki <[email protected]>
+ [JSC] Use jsNontrivialString agressively for ToString(Int52)
+ https://bugs.webkit.org/show_bug.cgi?id=170002
+
+ Reviewed by Sam Weinig.
+
+ We use the same logic used for Int32 to use jsNontvirialString.
+ After single character check, produced string is always longer than 1.
+ Thus, we can use jsNontrivialString.
+
+ * runtime/NumberPrototype.cpp:
+ (JSC::int52ToString):
+
+2017-03-23 Yusuke Suzuki <[email protected]>
+
[JSC] Use WeakRandom for SamplingProfiler interval fluctuation
https://bugs.webkit.org/show_bug.cgi?id=170045
Modified: trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp (214344 => 214345)
--- trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp 2017-03-24 13:59:02 UTC (rev 214344)
+++ trunk/Source/_javascript_Core/runtime/NumberPrototype.cpp 2017-03-24 14:30:13 UTC (rev 214345)
@@ -542,8 +542,15 @@
JSString* int52ToString(VM& vm, int64_t value, int32_t radix)
{
ASSERT(!(radix < 2 || radix > 36));
+ // A negative value casted to unsigned would be bigger than 36 (the max radix).
+ if (static_cast<uint64_t>(value) < static_cast<uint64_t>(radix)) {
+ ASSERT(value <= 36);
+ ASSERT(value >= 0);
+ return vm.smallStrings.singleCharacterString(radixDigits[value]);
+ }
+
if (radix == 10)
- return jsString(&vm, vm.numericStrings.add(static_cast<double>(value)));
+ return jsNontrivialString(&vm, vm.numericStrings.add(static_cast<double>(value)));
// Position the decimal point at the center of the string, set
// the startOfResultString pointer to point at the decimal point.
@@ -552,7 +559,7 @@
char* startOfResultString = decimalPoint;
*decimalPoint = '\0';
- return jsString(&vm, int52ToStringWithRadix(startOfResultString, value, radix));
+ return jsNontrivialString(&vm, int52ToStringWithRadix(startOfResultString, value, radix));
}
JSString* numberToString(VM& vm, double doubleValue, int32_t radix)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes