843b6646b1
This is a reland of 2b0ac2fb9f
The layout test that caused this revert was fixed with:
https://crrev.com/c/1627386
Original change's description:
> [array] Move Array#sort pre-processing to Torque
>
> This CL removes the "PrepareElementsForSort" runtime function, and
> replaces it with a simpler version in Torque. The biggest difference
> is that certain sparse configurations no longer have a fast-path.
>
> The Torque pre-processing step replaces the existing Torque mechanism that
> copied already pre-processed elements into the "work" FixedArray. The Torque
> compacting works as follows:
> - Iterate all elements from 0 to {length}
> - If the element is the hole: Do nothing.
> - If the element is "undefined": Increment undefined counter.
> - In all other cases, push the element into the "work" FixedArray.
>
> Then the "work" FixedArray is sorted as before. Writing the elements from
> the "work" array back into the receiver, after sorting, has three steps:
> 1. Copy the sorted elements from the "work" FixedArray to the receiver.
> 2. Add previously counted number of "undefined" to the receiver.
> 3. Depending on the backing store either delete properties or
> set them to the Hole up to {length}.
>
> Bug: v8:8714
> Change-Id: I14eccb7cfd2e4618bce2a85cba0689d7e0380ad2
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1619756
> Commit-Queue: Simon Zünd <szuend@chromium.org>
> Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
> Reviewed-by: Jakob Gruber <jgruber@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#61812}
TBR: jgruber@chromium.org
Bug: v8:8714
Change-Id: If7613f6e5f37c5e0d649e8192195594bc6c32100
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1627977
Commit-Queue: Simon Zünd <szuend@chromium.org>
Auto-Submit: Simon Zünd <szuend@chromium.org>
Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61827}
75 lines
1.8 KiB
JavaScript
75 lines
1.8 KiB
JavaScript
// Copyright 2019 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
|
|
// crbug.com/923466
|
|
__v_5 = [ -1073741825, -2147483648];
|
|
__v_5.sort();
|
|
|
|
// crbug.com/923642
|
|
new RegExp("(abcd){2148473648,}", "");
|
|
|
|
// crbug.com/923626
|
|
new Date(2146399200000).toString();
|
|
new Date(2146940400000).toString();
|
|
new Date(2147481600000).toString();
|
|
new Date(2148022800000).toString();
|
|
|
|
// crbug.com/927212
|
|
assertThrows(() => (2n).toString(-2147483657), RangeError);
|
|
|
|
// crbug.com/927894
|
|
var typed_array = new Uint8Array(16);
|
|
typed_array.fill(0, -1.7976931348623157e+308);
|
|
|
|
// crbug.com/927996
|
|
var float_array = new Float32Array(1);
|
|
float_array[0] = 1e51;
|
|
|
|
// crbug.com/930086
|
|
(function() {
|
|
try {
|
|
// Build up a 536870910-character string (just under 2**30).
|
|
var string = "ff";
|
|
var long_string = "0x";
|
|
for (var i = 2; i < 29; i++) {
|
|
string = string + string;
|
|
long_string += string;
|
|
}
|
|
assertThrows(() => BigInt(long_string), SyntaxError);
|
|
} catch (e) {
|
|
/* 32-bit architectures have a lower string length limit. */
|
|
}
|
|
})();
|
|
|
|
// crbug.com/932679
|
|
(function() {
|
|
const buffer = new DataView(new ArrayBuffer(2));
|
|
function __f_14159(buffer) {
|
|
try { return buffer.getUint16(Infinity, true); } catch(e) { return 0; }
|
|
}
|
|
__f_14159(buffer);
|
|
%OptimizeFunctionOnNextCall(__f_14159);
|
|
__f_14159(buffer);
|
|
})();
|
|
|
|
// crbug.com/937652
|
|
(function() {
|
|
function f() {
|
|
for (var i = 0; i < 1; i++) {
|
|
var shift = 1;
|
|
for (var j = 0; j < 2; ++j) {
|
|
if (shift == shift) shift = 0;
|
|
var x = 1;
|
|
print((x << shift | x >>> 32 - shift));
|
|
}
|
|
}
|
|
}
|
|
f();
|
|
f();
|
|
%OptimizeFunctionOnNextCall(f);
|
|
f();
|
|
})();
|