Timothy Flynn
0e6ee925f0
Meta+LibJS: Update simdutf to version 7.3.3
...
This contains a fix for handling invalid trailing padding characters.
2025-07-16 17:03:15 +02:00
Timothy Flynn
efa9737cf7
AK+LibJS: Do not set UTF-16 code point length to its code unit length
2025-06-25 22:20:47 +02:00
Viktor Szépe
19f88f96dc
Everywhere: Fix typos - act III
CI / macOS, arm64, Sanitizer_CI, Clang (push) Waiting to run
CI / Linux, x86_64, Fuzzers_CI, Clang (push) Waiting to run
CI / Linux, x86_64, Sanitizer_CI, GNU (push) Waiting to run
CI / Linux, x86_64, Sanitizer_CI, Clang (push) Waiting to run
Package the js repl as a binary artifact / macOS, arm64 (push) Waiting to run
Package the js repl as a binary artifact / Linux, x86_64 (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-06-16 14:20:48 +01:00
R-Goc
9ec26058d1
LibTest/Tests: Build and run test-js on windows
...
This commit allows test-js to build and run, also in CI.
Co-authored-by: Andrew Kaster <andrew@ladybird.org>
2025-06-05 22:00:55 -06:00
Timothy Flynn
128675770c
LibJS: Implement Intl.Locale.prototype.variants
...
This is a normative change in the ECMA-402 spec. See:
e8c995a
2025-06-04 17:11:35 -04:00
Aliaksandr Kalenik
1274f4e2f7
LibJS: Optimize Function.prototype.apply()
...
CI / Lagom (arm64, Sanitizer_CI, false, macOS, macos-15, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, Linux, blacksmith-16vcpu-ubuntu-2404, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, Linux, blacksmith-16vcpu-ubuntu-2404, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, Linux, blacksmith-16vcpu-ubuntu-2404, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macOS, macOS-arm64, macos-15) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, Linux, Linux-x86_64, blacksmith-8vcpu-ubuntu-2404) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
...by avoiding `CreateListFromArrayLike` in cases when we could directly
use elements of underlying object's indexed properties storage.
Makes this program go 2.1x faster:
```js
function target(a, b, c) {
return a + b + c;
}
const args = [1, 2, 3];
let result = 0;
(function() {
for (let i = 0; i < 10_000_000; i++) {
result += target.apply(null, args);
}
})();
```
2025-06-03 17:16:01 +02:00
Timothy Flynn
8145572180
LibJS+LibUnicode: Support ambiguous time zone transitions
...
CI / Lagom (arm64, Sanitizer_CI, false, macOS, macos-15, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, Linux, blacksmith-16vcpu-ubuntu-2404, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, Linux, blacksmith-16vcpu-ubuntu-2404, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, Linux, blacksmith-16vcpu-ubuntu-2404, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macOS, macOS-arm64, macos-15) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, Linux, Linux-x86_64, blacksmith-8vcpu-ubuntu-2404) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
For example, time zone transitions can result in repeated or skipped
wall times. Temporal wants us to handle these transitions.
2025-06-03 09:09:21 +12:00
Timothy Flynn
c8b4dc4847
LibJS: Require strict matching with a precise ZonedDateTime offset
...
This is a normative change in the Temporal proposal. See:
1117eaf
2025-06-03 09:09:21 +12:00
Timothy Flynn
f091047159
LibJS+LibUnicode: Implement retrieval of collator keyword values
...
Completely missed this when implementing Intl.Collator!
2025-06-03 09:03:33 +12:00
Timothy Flynn
5e40db5a17
AK: Remove some now-unnecessary workarounds for simdutf base64 usage
2025-06-01 08:03:00 -04:00
Timothy Flynn
8e5cc74eb1
LibJS: Add notation to Intl.PluralRules
...
This is a normative change in the ECMA-402 spec. See:
a7ff535
2025-05-27 10:39:25 -04:00
Manuel Zahariev
addff9e35d
LibJS: Unit tests for non-standard date formats
2025-05-26 18:48:09 +02:00
Manuel Zahariev
973110c046
LibJS: Convert date_parse_string to use DateParser
2025-05-26 18:48:09 +02:00
Aliaksandr Kalenik
bd6750aaa5
LibJS: Skip prototype chain lookup in internal_set()
for arrays
...
...when Array.prototype and Object.prototype are intact.
If `internal_set()` is called on an array exotic object with a numeric
PropertyKey, and:
- the prototype chain has not been modified (i.e., there are no getters
or setters for indexed properties), and
- the array is not the target of a Proxy object,
then we can directly store the value in the receiver's indexed
properties, without checking whether it already exists somewhere in the
prototype chain.
1.7x improvement on the following program:
```js
function f() {
let a = [];
let i = 0;
while (i < 10_000_000) {
a.push(i);
i++;
}
}
f();
```
2025-05-23 14:51:32 +02:00
Shannon Booth
5495531118
LibJS: Implement 'less than' for a String over code units
...
...Instead of code points.
2025-05-17 08:00:59 -04:00
Timothy Flynn
8a80ff7b3b
AK+LibJS: Use simdutf for all base64 operations
...
We were previously unable to use simdutf for base64 decoding operations
other than "loose". Upstream has added support for the "strict" and
"stop-before-partial" operations, so let's make use of them!
2025-05-03 11:21:10 -04:00
Timothy Flynn
4d70f6ce1c
LibJS: Ensure iterator parameter validation closes underlying iterator
...
This is a normative change in the ECMA-262 spec. See:
9552f29
f2bad00
2025-04-29 07:33:08 -04:00
Timothy Flynn
568524f8ba
LibJS: Close sync iterator when async wrapper yields rejection
...
This is a normative change in the ECMA-262 spec. See:
ff129b1
2025-04-29 07:33:08 -04:00
aplefull
223c9c91e6
LibJS: Implement rawJSON and isRawJSON functions
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-04-24 09:33:49 -04:00
Jess
83e46b3728
LibRegex: Fix crash when parse result exceeds max cache size
...
Before, If the cache was empty we would try and evict non-existant
entries and crash. So the fix is to make sure that we don't saturate
the cache with a single parse result.
2025-04-04 16:10:25 +02:00
Jess
f3a937ee76
LibJS: Fix integer overflow in target_offset
of TypedArray.set()
2025-03-25 07:45:42 +00:00
Tim Ledbetter
ed62aa6224
Revert "LibJS: Reduce number of proxy traps called during for..in…
...
…iteration"
This reverts commit 357eeba49c
.
2025-03-21 11:44:21 -05:00
Andreas Kling
357eeba49c
LibJS: Reduce number of proxy traps called during for..in iteration
...
Before this change, we would enumerate all the keys with
[[OwnPropertyKeys]], and then do [[GetOwnPropertyDescriptor]] twice for
each key as we went through them.
We now only do one [[GetOwnPropertyDescriptor]] per key, which
drastically reduces the number of proxy traps when those are involved.
The new trap sequence matches what you get with V8, so I don't think
anyone will be unpleasantly surprised here.
2025-03-20 17:50:02 -05:00
Andreas Kling
660d533b50
LibJS: Don't assume [[GetOwnPropertyDescriptor]] always succeeds
...
It can fail if we're talking to a badly-behaved proxy when enumerating
object properties for iteration.
2025-03-20 12:51:21 -05:00
Jess
12cbefbee7
LibJS+LibCrypto: Use a bitwise approach for BigInt's as*IntN methods
...
This speeds up expressions such as `BigInt.asIntN(0x4000000000000, 1n)`
(#3615 ). And those involving very large bigints.
2025-03-20 09:44:12 +01:00
Timothy Flynn
00d00b84d3
LibJS: Ensure relevant extension keys are included in ICU locale data
...
This is a normative change in the ECMA-402 spec. See:
7508197
In our implementation, we don't have the affected AOs directly, as we
delegate to ICU. So instead, we must ensure we provide ICU a locale with
the relevant extension keys present.
2025-03-18 11:47:23 -04:00
Timothy Flynn
37b8ba96f1
LibJS: Use currency digits for NumberFormat only for standard notation
...
This is a normative change in the ECMA-402 spec. See:
9140da2
2025-03-18 11:47:23 -04:00
aplefull
80b2c11c81
LibJS: Implement Math.sumPrecise
2025-03-03 21:46:22 +01:00
aplefull
53cdb04ee8
LibJS: Fix parseFloat(-0) returning -0 instead of +0
...
The optimization that skips the string conversion for number values was
causing -0 to be returned as-is. This patch adds a check for this case.
2025-03-02 11:30:34 -05:00
Timothy Flynn
080d32c7d0
LibJS: Use Intl.DurationFormat for Temporal.Duration.p.toLocaleString
...
This is an normative change in the Temporal proposal. See:
ffb4fb5
2025-03-01 14:49:20 +01:00
Timothy Flynn
8f51d1dd04
LibJS: Integrate Temporal.Duration into Intl.DurationFormat
...
This is a normative change in the Temporal proposal. See:
2d97205
2025-03-01 14:49:20 +01:00
Ali Mohammad Pur
ea3b7efd91
LibRegex: Treat the UnicodeSets flag as Unicode
...
Fixes /.../v not being interpreted as a unicode pattern.
2025-02-28 14:31:45 -05:00
Jess
8ed7dee0f0
LibJS: Propogate allocation errors in BigInt constructor functions
2025-02-19 09:00:59 -05:00
Luke Wilde
105096e75a
LibJS: Stop executing successful regex if it's past the end of the input
...
If the regex always matches the input, even if it's past the end, then
we need to stop execution of the regex when it's past the end. This
corresponds to step 13.a and prevents it from infinitely looping.
Reduced from: d98672060f/packages/react-i18n/src/utilities/money.ts (L10-L14)
2025-02-16 09:22:37 +01:00
Psychpsyo
f92d037752
LibJS: Parse dates like "Jan 15, 2025"
2025-02-14 06:27:37 -05:00
jg99
51434c2ed0
LibJS: Parse dates like "1 Jan 2001 00:00:00 GMT"
2025-02-05 15:06:54 -07:00
Luke Wilde
30507681f7
LibJS: Parse dates like "2021-04-21T15:00:00+0000"
...
This is used on figma.com
2025-01-21 21:36:05 +01:00
Luke Wilde
3ab4efb7ef
LibJS: Parse dates like "2025-01-13 00:00:00.000"
...
This is used on figma.com.
2025-01-21 21:36:05 +01:00
Timothy Flynn
6a564376fc
Meta+LibUnicode+LibJS: Upgrade to ICU 76.1
...
This updates our local ICU overlay port to use ICU 76.1. This includes
Unicode 16 and CLDR 46.
Upstream vcpkg is not able to supply versions past 74 yet due to various
dependency issues, but we are able to use this version ourselves. The
overlay port now includes a patch to revert ICU's dependence on autoconf
2.72 for now, as this version is not yet available on all systems.
All of the test changes were cross-referenced with Firefox to ensure
correctness.
2025-01-18 17:56:40 -05:00
Timothy Flynn
0763997591
LibJS: Ensure tests using the "ar" locale use the "arab" number system
...
In ICU 76, the default was changed from "arab" to "latn". See:
c149724509
The whole point of these tests was to use a non-Latin numbering system.
This patch ensures that is the case to make following patches easier to
grok.
2025-01-18 17:56:40 -05:00
Timothy Flynn
26c2484c2f
LibJS: Implement the AsyncDisposableStack interface
...
This is very similar to the DisposableStack interface, except disposal
of resources is promise-based.
2025-01-17 20:46:32 +01:00
Timothy Flynn
59162c8155
LibJS: Adjust ad-hoc clamping behavior in RegulateISODate
...
Instead of clamping to the limits allowed by ISOYearMonthWithinLimits,
clamp to the limits allowed by the type we are converting to (i32). This
allows some callers to then reject years outside that range.
2025-01-17 10:08:06 +01:00
Timothy Flynn
d5b26183f3
LibJS: Convert errant MUST to TRY in Temporal.PlainDateTime.with
2025-01-17 10:08:06 +01:00
Shannon Booth
5aeae5e583
LibJS: Parse dates like "Wednesday, Jan 15, 2025"
...
This was getting called on abc.com
2025-01-15 10:42:29 +01:00
Nicolas Ramz
423d106fd8
LibJS: Support date strings of the form "Thu, 09 Jan 2025 23:00:00"
2025-01-08 18:45:43 +01:00
Shannon Booth
c804d08d34
LibJS: Parse dates like "2025-01-02 14:00:00+0000"
...
This was getting spammed in the console by a website in the wild.
2025-01-03 14:43:13 -08:00
Timothy Flynn
962441b3cf
LibJS: Avoid internal assertion accessing detached TA internal slots
...
This defers accessing TA internal slots until we know we have a valid,
attached TA. Our implementation has assertions that guard against this.
2024-12-13 07:09:39 -08:00
Timothy Flynn
234f218803
LibJS: Ensure GetDateTimeFormat returns nonnull for the best format
...
This is an editorial change in the Temporal proposal. See:
8a52801
2024-12-06 11:13:10 -05:00
Timothy Flynn
6dfa6993e5
LibJS: Add workaround for invalid ISODateTimes in DifferenceISODateTime
...
The assertions can be hit when Temporal.Duration.prototype.round / total
are provided a PlainDate at the very limits of valid date-times. Tests
were recently added to test262 which trip these assertions, thus we are
now crashing in those tests. Let's throw a RangeError instead, as this
is the behavior expected by the tests.
2024-12-05 15:29:08 -05:00
Timothy Flynn
db87f173fb
LibJS: Implement the RegExp.escape proposal
...
https://tc39.es/proposal-regex-escaping/
2024-12-05 13:56:21 +01:00