summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibJS
AgeCommit message (Collapse)Author
2021-09-11LibJS: Tweak the WeakContainer::remove_swept_cells() API a little bitAndreas Kling
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.
2021-09-11LibJS: Implement Intl.NumberFormat.prototype.resolvedOptionsTimothy Flynn
2021-09-11LibJS: Implement Intl.NumberFormat.supportedLocalesOfTimothy Flynn
2021-09-11LibJS: Implement the Intl.NumberFormat constructorTimothy Flynn
2021-09-11LibJS: Implement a nearly empty Intl.NumberFormat objectTimothy Flynn
This adds plumbing for the Intl.NumberFormat object, constructor, and prototype.
2021-09-11LibJS: Handle Unicode locale extensions in the ResolveLocale operationTimothy Flynn
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.
2021-09-11LibWeb+LibJS: Remember source filenames when using HTML::ScriptAndreas Kling
It's a lot easier to debug JavaScript problems if you can see which file the errors are in. :^)
2021-09-10LibJS: Implement Temporal.PlainMonthDay.prototype.equalsLuke Wilde
2021-09-10LibJS: Implement Temporal.PlainMonthDay.fromLuke Wilde
2021-09-10LibJS: Implement ToTemporalMonthDay AOLuke Wilde
2021-09-10LibJS: Share "parsed identifiers" between copied JS::Lexer instancesAndreas Kling
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. :^)
2021-09-10AK+Everywhere: Reduce the number of template parameters of IntrusiveListAli Mohammad Pur
This makes the user-facing type only take the node member pointer, and lets the compiler figure out the other needed types from that.
2021-09-09LibJS: Make default_merge_fields() {additional_,}fields Object a const&Linus Groh
This only calls Object::{get,enumerable_own_property_names}() on the fields and additional_fields Objects, both of which are const-qualified.
2021-09-09LibJS: Make resolve_iso_month() fields Object a const&Linus Groh
This only calls Object::get() on the fields Object, which is const-qualified.
2021-09-09LibJS: Make Temporal foo_from_fields() AO field/options Object a const*Linus Groh
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.
2021-09-09LibJS: Make prepare_temporal_fields() fields Object a const&Linus Groh
This only calls Object::get() on the fields Object, which is const-qualified.
2021-09-09LibJS: Make to_temporal_time_record() time like Object a const&Linus Groh
This only calls Object::get() on the temporal_time_like Object, which is const-qualified.
2021-09-09LibJS: Make to_temporal_duration_record() time like Object a const&Linus Groh
This only calls Object::get() or some Duration getters on the temporal_duration_like Object, both of which are const-qualified.
2021-09-09LibJS: Make Temporal to_foo() AO normalized_options Object a const&Linus Groh
These only pass the normalized_options Object directly or indirectly to get_option(), which now takes a const reference.
2021-09-09LibJS: Make get_string_or_number_option() options Object a const&Linus Groh
This only passes the options Object to get_option(), which now takes a const reference.
2021-09-09LibJS: Make get_option() options Object a const&Linus Groh
This only calls Object::get() on the options Object, which is const-qualified.
2021-09-09LibJS: Store Instant's and ZonedDateTime's m_nanoseconds as a const&Linus Groh
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.
2021-09-09LibJS: Make new_target parameter of all Temporal AOs a const*Linus Groh
These are passed to ordinary_create_from_constructor() in each case, which takes the parameter as a const&, so these can also be const.
2021-09-09LibJS: Implement the ParseScript AO (as JS::Script::parse())Andreas Kling
2021-09-09LibJS: Start adding a JS::Script class (spec's "Script Record")Andreas Kling
2021-09-09LibJS: Mark TemporalTimeToString as infallibleLinus Groh
This is an editorial change in the Temporal spec. See: https://github.com/tc39/proposal-temporal/commit/899cc24
2021-09-09LibJS: Implement Temporal.PlainYearMonth.compareLuke Wilde
2021-09-09LibJS: Implement Temporal.PlainYearMonth.fromLuke Wilde
2021-09-09LibJS: Implement Temporal.PlainYearMonth.prototype.equalsLuke Wilde
2021-09-09LibJS: Implement ToTemporalYearMonth AOLuke Wilde
2021-09-09LibJS: Implement Temporal.Instant.prototype.toZonedDateTimeISO()Linus Groh
2021-09-09LibJS: Implement Temporal.Instant.prototype.toZonedDateTime()Linus Groh
2021-09-09LibJS: Add a way to attach custom data to a JS::VM instanceAndreas Kling
This will be used by LibWeb to attach web engine specific stuff that LibJS doesn't need to know about.
2021-09-08LibJS: Implement Temporal.PlainTime.prototype.toJSON()Linus Groh
2021-09-08LibJS: Implement Temporal.PlainTime.prototype.toLocaleString()Linus Groh
2021-09-08LibJS: Implement Temporal.PlainTime.prototype.toString()Linus Groh
2021-09-08LibJS: Replace String const& with StringView in various Temporal AOsLinus Groh
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.
2021-09-08LibUnicode+LibJS: Store locale keyword values as a single stringTimothy Flynn
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".
2021-09-08LibJS: Fix typos in Intl.ListFormat commentsTimothy Flynn
2021-09-08LibJS: Restore the environment if an exception is thrown in 'with' blockdavidot
2021-09-08LibJS: Implement Temporal.PlainTime.prototype.withLuke Wilde
Ticks off one box in #8982 and fixes one test262 case.
2021-09-08test-js: Add a mark_as_garbage method to force GC to collect that objectdavidot
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.
2021-09-08LibJS: Fix Temporal.PlainTime.prototype.equals testLuke Wilde
The two plain times weren't being compared to each other.
2021-09-08LibJS: Add and use the CreateNegatedTemporalDuration AOLinus Groh
This is a normative change in the Temporal spec. See: https://github.com/tc39/proposal-temporal/commit/6178ed3
2021-09-08LibJS: Make implementation-defined language more conciseLinus Groh
This is a normative change in the Temporal spec. No behavioral change, just a clarification. See: https://github.com/tc39/proposal-temporal/commit/42c964e
2021-09-08LibJS: Use the newly added remainder operation in GetISOPartsFromEpochLinus Groh
This is a normative change in the Temporal spec. No behavioral change, just a clarification. See: https://github.com/tc39/proposal-temporal/commit/b7bdc65
2021-09-08LibJS: Validate Calendar.prototype.fields() values more strictlyLinus Groh
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
2021-09-07Everywhere: Behaviour => BehaviorAndreas Kling
2021-09-06LibJS: Implement Intl.ListFormat.prototype.resolvedOptionsTimothy Flynn
2021-09-06LibJS: Implement Intl.ListFormat.prototype.formatToPartsTimothy Flynn