Age | Commit message (Collapse) | Author |
|
Currently, we have NotA and NotAn, to be used dependent on whether the
following word begins with a vowel or not. To avoid this, change the
wording on NotA to be independent of this context.
|
|
|
|
Instead, override visit_edges() and mark the values like any other Cell
subclass would.
This makes PromiseValueList play nice with zombification.
|
|
Turns a bunch of FlyString copies into moves.
|
|
This removes the awkward String::replace API which was the only String
API which mutated the String and replaces it with a new immutable
version that returns a new String with the replacements applied. This
also fixes a couple of UAFs that were caused by the use of this API.
As an optimization an equivalent StringView::replace API was also added
to remove an unnecessary String allocations in the format of:
`String { view }.replace(...);`
|
|
While the WeakMap only holds a weak reference to its keys, their
accompanying values should be kept alive as long as they're accessible.
|
|
|
|
Not just if it's an Object (which is one kind of Cell).
|
|
The forward transition cache in Shape uses WeakPtr<Shape> to learn when
a cached transition has been garbage collected.
When running in zombification mode, we have to explicitly revoke any
outstanding WeakPtrs to a Shape when it becomes a zombie. That ensures
that it gets pruned from transition caches.
|
|
|
|
This patch adds a `-z` option to js and test-js. When run in this mode,
garbage cells are never actually destroyed. We instead keep them around
in a special zombie state.
This allows us to validate that zombies don't get marked in future GC
scans (since there were not supposed to be any more references!) :^)
Cells get notified when they become a zombie (via did_become_zombie())
and this is used by WeakContainer cells to deregister themselves from
the heap.
|
|
|
|
Let's use Base::visit_edges() when calling the base class, to prevent
accidentally skipping over anyone in the inheritance chain.
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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".
|
|
|