1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-25 22:15:06 +00:00
Commit graph

2598 commits

Author SHA1 Message Date
Timothy Flynn
cd4ee46b70 LibJS: Populate roundingPriority in Intl.PluralRules.resolvedOptions
This is inherited from Intl.NumberFormat.
2022-07-13 19:22:26 +01:00
Timothy Flynn
33698b9615 LibJS+js: Parse new constructor options from Intl.NumberFormat V3
This contains minimal changes to parse newly added and modified options
from the Intl.NumberFormat V3 proposal, while maintaining main spec
behavior in Intl.NumberFormat.prototype.format. The parsed options are
reflected only in Intl.NumberFormat.prototype.resolvedOptions and the js
REPL.
2022-07-13 19:22:26 +01:00
sin-ack
c8585b77d2 Everywhere: Replace single-char StringView op. arguments with chars
This prevents us from needing a sv suffix, and potentially reduces the
need to run generic code for a single character (as contains,
starts_with, ends_with etc. for a char will be just a length and
equality check).

No functional changes.
2022-07-12 23:11:35 +02:00
sin-ack
3f3f45580a Everywhere: Add sv suffix to strings relying on StringView(char const*)
Each of these strings would previously rely on StringView's char const*
constructor overload, which would call __builtin_strlen on the string.
Since we now have operator ""sv, we can replace these with much simpler
versions. This opens the door to being able to remove
StringView(char const*).

No functional changes.
2022-07-12 23:11:35 +02:00
sin-ack
3d656ba600 LibJS: Emit StringViews for ErrorType instances
This removes the need for calculating each string's length during
ErrorType use at the cost of storing it within the binary.
2022-07-12 23:11:35 +02:00
sin-ack
7456904a39 Meta+Userland: Simplify some formatters
These are mostly minor mistakes I've encountered while working on the
removal of StringView(char const*). The usage of builder.put_string over
Format<FormatString>::format is preferrable as it will avoid the
indirection altogether when there's no formatting to be done. Similarly,
there is no need to do format(builder, "{}", number) when
builder.put_u64(number) works equally well.

Additionally a few Strings where only constant strings were used are
replaced with StringViews.
2022-07-12 23:11:35 +02:00
Obinna Ikeh
45d07f648e LibJS: Add %TypedArray%.prototype.toSpliced 2022-07-12 00:44:34 +01:00
Timothy Flynn
f089c11b5b LibJS: Implement Intl.PluralRules.prototype.selectRange 2022-07-12 00:43:34 +01:00
Linus Groh
071b92e920 LibJS: Fix typos in Temporal spec comments
This is an editorial change in the Temporal spec.

See: b0411b4
2022-07-10 01:29:28 +02:00
Linus Groh
fb2012dfc7 LibJS: Add Add IsValidISODate assertions
This is an editorial change in the Temporal spec.

See: 46f97ea
2022-07-10 01:22:34 +02:00
Timothy Flynn
5b68c1a06c LibJS: Use Intl.PluralRules within Intl.NumberFormat
This also allows removing a bit of a BigInt hack to resolve plurality of
BigInt numbers (because the AOs used in ResolvePlural support BigInt,
wherease the naive Unicode::select_pattern_with_plurality did not).

We use cardinal form here; the number format patterns in the CLDR align
with the cardinal form of the plural rules.
2022-07-08 20:33:52 +02:00
Timothy Flynn
6d9b779757 LibJS: Add an overload of ResolvePlural for use without PluralRules
The NumberFormat spec casually indicates the need for a PluralRules
object without explicity saying so, with text such as:

"which may depend on x in languages having different plural forms."

Other implementations actually do create a PluralRules object to resolve
those cases with ResolvePlural. However, ResolvePlural doesn't need much
from PluralRules to operate, so this can be abstracted out for use in
NumberFormat without the need to allocate a PluralRules instance.
2022-07-08 20:33:52 +02:00
Timothy Flynn
1fc87d1529 LibJS: Use Intl.PluralRules within Intl.DurationFormat 2022-07-08 20:33:52 +02:00
Timothy Flynn
cc5c707649 LibJS+LibUnicode: Do not generate the PluralCategory enum
The PluralCategory enum is currently generated for plural rules. Instead
of generating it, this moves the enum to the public LibUnicode header.
While it was nice to auto-discover these values, they are well defined
by TR-35, and we will need their values from within the number format
code generator (which can't rely on the plural rules generator having
run yet). Further, number format will require additional values in the
enum that plural rules doesn't know about.
2022-07-08 20:33:52 +02:00
Timothy Flynn
bf85bf2a9e LibJS: Use Intl.PluralRules within Intl.RelativeFormat
The Polish test cases added here cover previous failures from test262,
due to the way that 0 is specified to be "many" in Polish.
2022-07-08 11:51:54 +02:00
Timothy Flynn
36abcd820d LibJS: Implement Intl.PluralRules.prototype.select 2022-07-08 11:51:54 +02:00
Timothy Flynn
f11cb7c075 LibJS: Populate pluralCategories in Intl.PluralRules.resolvedOptions 2022-07-08 11:51:54 +02:00
Timothy Flynn
670bd066a5 LibJS: Replace JS::Intl::PluralRules::Type with Unicode::PluralForm
The JS::Intl enum was added when implementing the PluralRules
constructor. Now that LibUnicode has a plural rules implementation,
replace the JS::Intl enum with the analagous Unicode enum.
2022-07-08 11:51:54 +02:00
Timothy Flynn
2982aa0373 LibJS: Mark the NumberFormat parameter of FormatNumericToString as const
Not critical, but in subsequent commits this will be invoked from a
constant context.
2022-07-08 11:51:54 +02:00
Timothy Flynn
b3deec061e LibJS: Implement Intl.Locale.prototype.weekInfo property 2022-07-06 16:56:42 +02:00
Timothy Flynn
88a560dd84 LibJS: Implement Intl.Locale.prototype.textInfo property 2022-07-06 16:56:42 +02:00
Timothy Flynn
814f13bc2a LibJS: Implement Intl.Locale.prototype.timeZones property 2022-07-06 16:56:42 +02:00
Timothy Flynn
f6aa6a480c LibJS: Implement Intl.Locale.prototype.numberingSystems property 2022-07-06 16:56:42 +02:00
Timothy Flynn
ee2be5895f LibJS: Implement Intl.Locale.prototype.hourCycles property 2022-07-06 16:56:42 +02:00
Timothy Flynn
4d32f38a76 LibJS: Partially implement Intl.Locale.prototype.collations property
We do not yet parse collation data from the CLDR. This stubs out the
collations property, analogous to Intl.supportedValuesOf.
2022-07-06 16:56:42 +02:00
Timothy Flynn
e9bc35d805 LibJS: Implement Intl.Locale.prototype.calendars property 2022-07-06 16:56:42 +02:00
Linus Groh
028a6b90b1 LibJS: Revert partial resizable ArrayBuffer implementation
This is a manual but clean revert of all commits from #12595.

Adding a partial implementation of the resizable ArrayBuffer proposal
without implementing all the updates to TypedArray infrastructure that
is also covered by the spec introduced a bunch of crashes, so we
decided to revert it for now until a full implementation is completed.
2022-07-06 15:52:57 +02:00
DexesTTP
7ceeb74535 AK: Use an enum instead of a bool for String::replace(all_occurences)
This commit has no behavior changes.

In particular, this does not fix any of the wrong uses of the previous
default parameter (which used to be 'false', meaning "only replace the
first occurence in the string"). It simply replaces the default uses by
String::replace(..., ReplaceMode::FirstOnly), leaving them incorrect.
2022-07-06 11:12:45 +02:00
Linus Groh
8733fbae76 LibJS: Rename TimeHourMinuteBasicFormatNotAmbiguous
This is an editorial change in the Temporal spec.

See: 70de75b
2022-07-05 23:15:52 +02:00
Linus Groh
e1a6418015 LibJS: Rename TimeZoneNumericUTCOffsetNotAmbiguousAllowedNegative
This is an editorial change in the Temporal spec.

See: 9ddd57e
2022-07-05 23:15:52 +02:00
Linus Groh
8dcd0d4a06 LibJS: Rename TimeZoneNumericUTCOffsetNotAmbiguous
This is an editorial change in the Temporal spec.

See: 5ebd34b
2022-07-05 23:15:52 +02:00
Linus Groh
7ef3b42685 LibJS: Simplify TimeZoneNumericUTCOffsetNotAmbiguous
This is an editorial change in the Temporal spec.

See:
- ccef468
- 5b38ab4
2022-07-05 23:15:52 +02:00
Linus Groh
fec5d8d531 LibJS: Consistently check Temporal overflow options
This is a normative change in the Temporal spec.

See: c8ee2bd
2022-07-05 23:15:52 +02:00
Linus Groh
c3567faa8c LibJS: Remove unnecessary checks for undefined before ToPositiveInteger
This is an editorial change in the Temporal spec.

See: 9f3bf53
2022-07-05 23:15:52 +02:00
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