Linus Groh
4b70ddf5a0
LibJS: Let Array.prototype.toSpliced throw RangeError for len <= 2^53-1
...
This aligns it with the spec again, it was clarified that the additional
range check before ArrayCreate is intentional:
https://github.com/tc39/proposal-change-array-by-copy/issues/94
Also cast the final variable to an u64 instead of size_t after we have
determined that it is safe to do so, as that's what Array::create()
takes now.
2022-07-04 10:10:11 +02:00
Linus Groh
5927cdd9c5
LibJS: Use u64 for the length parameter in Array::create()
...
This doesn't matter per se as the value is immediately validated to be
in the 0 to 2^32 - 1 range, but it avoids having to cast a number that
potentially doesn't fit into a size_t into one at the call site. More
often than not, array-like lengths are only validated to be <= 2^52 - 1,
i.e. MAX_SAFE_INTEGER.
This is fully backwards compatible with existing code as a size_t always
fits into an u64, but an u64 might not always fit into a size_t.
2022-07-04 10:10:11 +02:00
Linus Groh
65eb1ee67a
LibJS: Add spec comments to ArrayCreate
2022-07-04 10:10:11 +02:00
Linus Groh
1132151f3d
LibJS: Use a template for 'Value from integral number' constructors
...
This also allows constructing from other integral types like u64, which
would have been ambiguous before (at least on i686):
```
error: call of overloaded 'Value(u64&)' is ambiguous
note: candidate: 'JS::Value::Value(i32)'
175 | explicit Value(i32 value)
| ^~~~~
note: candidate: 'JS::Value::Value(unsigned int)'
164 | explicit Value(unsigned value)
| ^~~~~
note: candidate: 'JS::Value::Value(long unsigned int)'
153 | explicit Value(unsigned long value)
| ^~~~~
note: candidate: 'JS::Value::Value(double)'
141 | explicit Value(double value)
| ^~~~~
```
2022-07-04 10:10:11 +02:00
Linus Groh
ab2574d75f
LibJS: Avoid potential overflow in Array.prototype.toSpliced()
...
The implementation no longer matches the spec text, but I believe that's
a bug anyway. No point in allowing array lengths up to 2^53 - 1 when the
ArrayCreate AO rejects anything above 2^32 - 1.
2022-07-03 13:06:44 +02:00
Obinna Ikeh
f78ef60be6
LibJS: Add %TypedArray%.prototype.toReversed
2022-07-03 01:12:32 +02:00
Idan Horowitz
1ebc5af2f0
LibJS: Set both {minimum, maximum}FractionDigits in Intl.DurationFormat
...
This is a normative change in the Intl.DurationFormat spec.
See: b293603e
2022-07-02 18:32:35 +03:00
Idan Horowitz
fb8c4a724e
LibJS: Disallow mixed-sign durations in Intl.DurationFormat
...
This is a normative change in the Intl.DurationFormat spec.
See: 89ab1855
2022-07-02 18:32:35 +03:00
Idan Horowitz
b6b8356c0c
LibJS: Implement Intl.DurationFormat.prototype.formatToParts
2022-07-01 01:00:05 +03:00
Idan Horowitz
706ff5ac83
LibJS: Implement Intl.DurationFormat.prototype.format
2022-07-01 01:00:05 +03:00
Idan Horowitz
b1fe6c3f68
LibJS: Implement the PartitionDurationFormatPattern abstract operation
2022-07-01 01:00:05 +03:00
Idan Horowitz
f4785e2468
LibUnicode: Generate data about DurationFormat-required units as well
2022-07-01 01:00:05 +03:00
Idan Horowitz
8e55eb960e
LibJS: Implement the ToDurationRecord abstract operation
2022-07-01 01:00:05 +03:00
Idan Horowitz
d9a4b3e46a
LibJS: Implement Intl.DurationFormat.prototype.resolvedOptions
2022-07-01 01:00:05 +03:00
Idan Horowitz
b20ef7d640
LibJS: Implement Intl.DurationFormat.supportedLocalesOf
2022-07-01 01:00:05 +03:00
Idan Horowitz
97fe37bcc2
LibJS: Start implementing the stage 3 Intl.DurationFormat proposal
2022-07-01 01:00:05 +03:00
Linus Groh
e1ee33ba7c
LibJS: Fix incorrect ErrorType in Temporal.PlainMonthDay constructor
2022-06-30 20:20:08 +01:00
Obinna Ikeh
4dbb2c2d44
LibJS: Add %TypedArray%.prototype.toSorted
...
This change implements typed array prototype toSorted function.
It also introduces two new TypedArray functions
2022-06-29 13:36:54 +01:00
Obinna Ikeh
ee9353702c
LibJS: Implement element comparison function for typed arrays
2022-06-29 13:36:54 +01:00
Linus Groh
ca85e157e8
LibJS: Use null-prototype objects in a few more places in Temporal
...
This is a normative change in the Temporal spec.
See: 334479f
2022-06-29 07:35:42 +01:00
Linus Groh
3720f4bd8f
LibJS: Fix production for time zone name in time zone strings
...
This is a normative change in the Temporal spec.
See:
- caf013a
- fb7cfa6
2022-06-29 07:35:42 +01:00
Linus Groh
f5669a1373
LibJS: Mark CreateTemporalDate as infallible in DifferenceISODateTime
...
This is an editorial change in the Temporal spec.
See:
- af2dc2f
- 2e9ee68
2022-06-29 07:35:42 +01:00
Linus Groh
abb3f327ad
LibJS: Mark BalanceDuration as infallible in DifferenceISODateTime
...
This is an editorial change in the Temporal spec.
See: 5fefc2f
2022-06-29 07:35:42 +01:00
Linus Groh
cee54d2725
LibJS: Replace one use of BalanceISODate with CreateISODateRecord
...
This is an editorial change in the Temporal spec.
See: 7a7ddb7
2022-06-29 07:35:42 +01:00
Linus Groh
6eab1f0212
LibJS: Assert DifferenceISODateTime is called with valid datetime values
...
This is an editorial change in the Temporal spec.
See: 143b2e2
2022-06-29 07:35:42 +01:00
Linus Groh
4ba1018273
LibJS: Replace guaranteed zero [[Days]] field with constant zero
...
This is an editorial change in the Temporal spec.
See: 68f2802
2022-06-29 07:35:42 +01:00
Linus Groh
11a6702cef
LibJS: Assert [[Days]] is zero for the balanced time in DifferenceTime
...
This is an editorial change in the Temporal spec.
See: be982fb
2022-06-29 07:35:42 +01:00
Cyber Gsus
f97e664d8f
LibJS: Check for add overflow in DataViewConstructor
...
Use the Checked type from AK to verify that offset + view_byte_length
is buffer_byte_length at most.
2022-06-27 20:51:00 +01:00
Linus Groh
93b4c3bb82
LibJS: Infer file extensions when resolving module paths
...
This allows `import "./foo"` to succeed, even if the file is actually
called `foo.js`. IDEs commonly exclude file extensions in auto-imports.
Closes #14364 .
2022-06-26 22:03:53 +01:00
Linus Groh
2b3dd87296
LibJS: Rename filepath to filename in module related code
...
This is already the parameter name of Core::File::open() and
VM::get_stored_module() - both of which this is passed to - as well as
the member name of the Module class.
2022-06-26 22:03:53 +01:00
Linus Groh
893978ea89
LibJS: Replace enumeration macro in typed_array_species_create()
...
Use the newly added TypedArrayBase::intrinsic_constructor() instead to
get the required constructor from the global object.
Also add spec comments while we're here.
2022-06-26 21:57:39 +01:00
Linus Groh
3885fa1d10
LibJS: Store fn pointer to its intrinsic constructor on TypedArrayBase
...
This represents "the intrinsic object listed in column one of Table X"
in the spec.
2022-06-26 21:57:39 +01:00
Linus Groh
ee0d5d6649
LibJS: Refactor common option reading into the GetDifferenceSettings AO
...
This is an editorial change in the Temporal spec.
See: 78abbb8
2022-06-24 22:12:03 +01:00
Linus Groh
05c5263ecc
LibJS: Mark CreateTemporalDate in AddDateTime as infallible
...
This is an editorial change in the Temporal spec.
See: cd356a6
2022-06-24 22:12:03 +01:00
Linus Groh
80663d9d3b
LibJS: Mark CreateTemporalDate in ToRelativeTemporalObject as fallible
...
This is an editorial change in the Temporal spec.
See: 09e9f9c
2022-06-24 22:12:03 +01:00
Linus Groh
3679f671b9
LibJS: Mark some calls of CreateTemporalDate as infallible
...
This is an editorial change in the Temporal spec.
See: 30344e8
2022-06-24 22:12:03 +01:00
Linus Groh
26990ab41c
LibJS: Mark PlainTime.prototype.round's CreateTemporalTime infallible
...
This is an editorial change in the Temporal spec.
See: 6b57938
2022-06-24 22:12:03 +01:00
Linus Groh
709e16004d
LibJS: Assert RoundISODateTime is called with values within the limits
...
This is an editorial change in the Temporal spec.
See: eaa7042
2022-06-24 22:12:03 +01:00
Linus Groh
f54ed48ef1
LibJS: Assert AddTime is called with a valid time
...
This is an editorial change in the Temporal spec.
See: 0ead23c
2022-06-24 22:12:03 +01:00
Linus Groh
416f94eb3b
LibJS: Add Number conversion in PrepareTemporalFields
...
This is an editorial change in the Temporal spec.
See: 687d06c
2022-06-24 22:12:03 +01:00
Linus Groh
78bfeca643
LibJS: Add Number conversion in ZonedDateTime.prototype.getISOFields()
...
This is an editorial change in the Temporal spec.
See: bc59d8d
2022-06-24 22:12:03 +01:00
Linus Groh
ea023ac62c
LibJS: Add Number conversion in AddDu/ToOrSubtractDu/FromPlainYearMonth
...
This is an editorial change in the Temporal spec.
See: 823300c
2022-06-24 22:12:03 +01:00
Linus Groh
98dc964649
LibJS: Add conversion to mathematical number in ToTemporalTimeRecord
...
This is an editorial change in the Temporal spec.
See: 9f37d10
2022-06-24 22:12:03 +01:00
Linus Groh
7138f10c30
LibJS: Check for invalid epoch ns in DisambiguatePossibleInstants
...
This is a normative change in the Temporal spec.
See: c12d20d
2022-06-24 22:12:03 +01:00
Linus Groh
7b5a7e7759
LibJS: Check for invalid epoch nanoseconds in NanosecondsToDays
...
This is a normative change in the Temporal spec.
See: f1f016e
2022-06-24 22:12:03 +01:00
Linus Groh
ddea6d451b
LibJS: Check for invalid epoch nanoseconds in InterpretISODateTimeOffset
...
This is a normative change in the Temporal spec.
See: cdfe4a5
2022-06-24 22:12:03 +01:00
Linus Groh
d10e0f0e3e
LibJS: Check for invalid epoch nanoseconds in getPossibleInstantsFor()
...
This is a normative change in the Temporal spec.
See: 439e6af
2022-06-24 22:12:03 +01:00
Linus Groh
61bdbe712e
LibJS: Remove duplicate steps for offset-only time zones
...
This is an editorial change in the Temporal spec.
See: 7813599
2022-06-24 22:12:03 +01:00
Linus Groh
34f02bed17
LibJS: Remove check for Instant range before subtracting UTC offset
...
This is a normative change in the Temporal spec.
See: 5e2fecb
2022-06-24 22:12:03 +01:00
Linus Groh
9c31fee4b5
LibJS: Remove unnecessary modulo operation in GetISOPartsFromEpoch
...
This is an editorial change in the Temporal spec.
See: fc3f80d
2022-06-24 22:12:03 +01:00