Age | Commit message (Collapse) | Author |
|
Make this API take a Span<Cell*> instead of a Vector<Cell*>&.
This is behavior neutral, but stops the API looking like it wants to
do mutable things to the Vector.
|
|
|
|
|
|
|
|
This adds plumbing for the Intl.NumberFormat object, constructor, and
prototype.
|
|
Currently, all callers of ResolveLocale invoke the operation with an
empty [[RelevantExtensionKeys]] slot, so the block of the method that
deals with those keys was unimplemented. This implements that block now
to prepare for Intl.NumberFormat which has a [[RelevantExtensionKeys]].
Note that the find_key_in_value() method is a simple VERIFY_NOT_REACHED
in just this commit until the Intl.NumberFormat's keys are handled in
its implementation.
|
|
It's a lot easier to debug JavaScript problems if you can see which file
the errors are in. :^)
|
|
|
|
|
|
|
|
When we save/load state in the parser, we preserve the lexer state by
simply making a copy of it. This was made extremely heavy by the lexer
keeping a cache of all parsed identifiers.
It keeps the cache to ensure that StringViews into parsed Unicode escape
sequences don't become dangling views when the Token goes out of scope.
This patch solves the problem by replacing the Vector<FlyString> which
was used to cache the identifiers with a ref-counted
HashTable<FlyString> instead.
Since the purpose of the cache is just to keep FlyStrings alive, it's
fine for all Lexer instances to share the cache. And as a bonus, using a
HashTable instead of a Vector replaces the O(n) accesses with O(1) ones.
This makes a 1.9 MiB JavaScript file parse in 0.6s instead of 24s. :^)
|
|
This makes the user-facing type only take the node member pointer, and
lets the compiler figure out the other needed types from that.
|
|
This only calls Object::{get,enumerable_own_property_names}() on the
fields and additional_fields Objects, both of which are const-qualified.
|
|
This only calls Object::get() on the fields Object, which is
const-qualified.
|
|
This is a bit of a lie as the Value(Object const*) ctor will const_cast
them in invoke(), but at least it ensures that nothing else in the
function relies on getting non-const Objects.
Perhaps we can have an actual Object const* Value in the future as well.
|
|
This only calls Object::get() on the fields Object, which is
const-qualified.
|
|
This only calls Object::get() on the temporal_time_like Object, which is
const-qualified.
|
|
This only calls Object::get() or some Duration getters on the
temporal_duration_like Object, both of which are const-qualified.
|
|
These only pass the normalized_options Object directly or indirectly to
get_option(), which now takes a const reference.
|
|
This only passes the options Object to get_option(), which now takes a
const reference.
|
|
This only calls Object::get() on the options Object, which is
const-qualified.
|
|
There's no need for these to be non-const. Suggested by @IdanHo in
https://github.com/SerenityOS/serenity/pull/9904#discussion_r704960184.
Perhaps we can make more internal slots of these and other objects const
references as well, but that's a bit more involved as they are used by
various functions expecting non-const references.
|
|
These are passed to ordinary_create_from_constructor() in each case,
which takes the parameter as a const&, so these can also be const.
|
|
|
|
|
|
This is an editorial change in the Temporal spec.
See: https://github.com/tc39/proposal-temporal/commit/899cc24
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This will be used by LibWeb to attach web engine specific stuff that
LibJS doesn't need to know about.
|
|
|
|
|
|
|
|
This is especially helpful where we already pass StringView literals
and only compare them with others, e.g. overflow and largest/smallest
unit, in which case there's no need to actually allocate a string.
|
|
Previously, LibUnicode would store the values of a keyword as a Vector.
For example, the locale "en-u-ca-abc-def" would have its keyword "ca"
stored as {"abc, "def"}. Then, canonicalization would occur on each of
the elements in that Vector.
This is incorrect because, for example, the keyword value "true" should
only be dropped if that is the entire value. That is, the canonical form
of "en-u-kb-true" is "en-u-kb", but "en-u-kb-abc-true" does not change
for canonicalization. However, we would canonicalize that locale as
"en-u-kb-abc".
|
|
|
|
|
|
Ticks off one box in #8982 and fixes one test262 case.
|
|
This should fix the flaky tests of test-js.
It also fixes the tests when running with the -g flag since the values
will not be garbage collected too soon.
|
|
The two plain times weren't being compared to each other.
|
|
This is a normative change in the Temporal spec.
See: https://github.com/tc39/proposal-temporal/commit/6178ed3
|
|
This is a normative change in the Temporal spec. No behavioral change,
just a clarification.
See: https://github.com/tc39/proposal-temporal/commit/42c964e
|
|
This is a normative change in the Temporal spec. No behavioral change,
just a clarification.
See: https://github.com/tc39/proposal-temporal/commit/b7bdc65
|
|
This is a normative change in the Temporal spec.
See:
- https://github.com/tc39/proposal-temporal/commit/75b66d8
- https://github.com/tc39/proposal-temporal/commit/9c2262b
|
|
|
|
|
|
|