Title: [281686] trunk
Revision
281686
Author
[email protected]
Date
2021-08-26 22:42:41 -0700 (Thu, 26 Aug 2021)

Log Message

Float32Arrays.sort() return undefined when length < 2
https://bugs.webkit.org/show_bug.cgi?id=229575

Reviewed by Saam Barati.

JSTests:

* stress/typed-array-sort-small.js: Added.
(shouldBe):
(throw.new.Error):

Source/_javascript_Core:

TypedArray#sort should return |this| even when we don't perform sorting.

* builtins/TypedArrayPrototype.js:
(sort):

Modified Paths

Added Paths

Diff

Modified: trunk/JSTests/ChangeLog (281685 => 281686)


--- trunk/JSTests/ChangeLog	2021-08-27 04:58:53 UTC (rev 281685)
+++ trunk/JSTests/ChangeLog	2021-08-27 05:42:41 UTC (rev 281686)
@@ -1,5 +1,16 @@
 2021-08-26  Yusuke Suzuki  <[email protected]>
 
+        Float32Arrays.sort() return undefined when length < 2
+        https://bugs.webkit.org/show_bug.cgi?id=229575
+
+        Reviewed by Saam Barati.
+
+        * stress/typed-array-sort-small.js: Added.
+        (shouldBe):
+        (throw.new.Error):
+
+2021-08-26  Yusuke Suzuki  <[email protected]>
+
         [JSC] op_put_private_name should use modern IC and remove ByValInfo
         https://bugs.webkit.org/show_bug.cgi?id=229544
 

Added: trunk/JSTests/stress/typed-array-sort-small.js (0 => 281686)


--- trunk/JSTests/stress/typed-array-sort-small.js	                        (rev 0)
+++ trunk/JSTests/stress/typed-array-sort-small.js	2021-08-27 05:42:41 UTC (rev 281686)
@@ -0,0 +1,138 @@
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+{
+    let array = new Int8Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int16Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int32Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint16Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint32Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8ClampedArray([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float32Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float64Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigInt64Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigUint64Array([]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int8Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int16Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int32Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint16Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint32Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8ClampedArray([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float32Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float64Array([1]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigInt64Array([1n]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigUint64Array([1n]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int8Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int16Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Int32Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint16Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint32Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Uint8ClampedArray([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float32Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new Float64Array([1, 2]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigInt64Array([1n, 2n]);
+    shouldBe(array.sort(), array);
+}
+{
+    let array = new BigUint64Array([1n, 2n]);
+    shouldBe(array.sort(), array);
+}
+

Modified: trunk/Source/_javascript_Core/ChangeLog (281685 => 281686)


--- trunk/Source/_javascript_Core/ChangeLog	2021-08-27 04:58:53 UTC (rev 281685)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-08-27 05:42:41 UTC (rev 281686)
@@ -1,5 +1,17 @@
 2021-08-26  Yusuke Suzuki  <[email protected]>
 
+        Float32Arrays.sort() return undefined when length < 2
+        https://bugs.webkit.org/show_bug.cgi?id=229575
+
+        Reviewed by Saam Barati.
+
+        TypedArray#sort should return |this| even when we don't perform sorting.
+
+        * builtins/TypedArrayPrototype.js:
+        (sort):
+
+2021-08-26  Yusuke Suzuki  <[email protected]>
+
         [JSC] op_put_private_name should use modern IC and remove ByValInfo
         https://bugs.webkit.org/show_bug.cgi?id=229544
 

Modified: trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js (281685 => 281686)


--- trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js	2021-08-27 04:58:53 UTC (rev 281685)
+++ trunk/Source/_javascript_Core/builtins/TypedArrayPrototype.js	2021-08-27 05:42:41 UTC (rev 281686)
@@ -235,7 +235,7 @@
 
     var length = @typedArrayLength(this);
     if (length < 2)
-        return;
+        return this;
 
     // typedArraySort is not safe when the other thread is modifying content. So if |this| is SharedArrayBuffer,
     // use JS-implemented sorting.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to