Linus Groh
37972e9f0c
LibWeb: Implement most WebIDL promise operations
2022-09-27 14:56:17 +01:00
Linus Groh
e68e92b304
LibJS: Make JS::NativeFunction use JS::SafeFunction internally
...
This still needs a project-wide cleanup to remove handles captured in
lambdas, which is now longer required.
For now, this will be used in the next commit implementing promise AOs
from Web IDL, which make heavy use of deferred callbacks.
2022-09-27 14:56:17 +01:00
Linus Groh
4e536eaf98
LibJS: Add JSON.stringify function to the intrinsics
...
This is needed for some Web APIs.
2022-09-27 14:56:17 +01:00
Timothy Flynn
82e730eba1
LibJS: Change default time display options to "always" for digital style
...
This is a normative change in the Intl.DurationFormat proposal. See:
d28076b
2022-09-22 14:39:24 +01:00
Sam Atkins
69dd158f91
LibJS: Create Console using a Realm instead of a VM
2022-09-21 20:03:49 +01:00
davidot
446a10a1ac
LibJS: Implement normative change in String.prototype.substr
...
And add spec comments while we're in the neighborhood.
2022-09-21 16:59:58 +01:00
Timothy Flynn
60a6bae53d
LibJS: Change digital default style from "narrow" to "short"
...
This is a normative change in the Intl.DurationFormat proposal. See:
4c24876
2022-09-21 16:09:38 +01:00
Daniel Bertalan
2b69af2dfe
AK+LibJS: Handle NaN-boxing pointers on AArch64
...
JS::Value stores 48 bit pointers to separately allocated objects in its
payload. On x86-64, canonical addresses have their top 16 bits set to
the same value as bit 47, effectively meaning that the value has to be
sign-extended to get the pointer. AArch64, however, expects the topmost
bits to be all zeros.
This commit gates sign extension behind `#if ARCH(X86_64)`, and adds an
`#error` for unsupported architectures, so that we do not forget to
think about pointer handling when porting to a new architecture.
Fixes #15290
Fixes SerenityOS/ladybird#56
2022-09-21 11:55:57 +02:00
Ben Wiederhake
48d8aff436
LibJS: Add missing includes
...
This remained undetected for a long time as HeaderCheck is disabled by
default. This commit makes the following file compile again:
// file: compile_me.cpp
#include <LibJS/Runtime/StringPrototype.h>
// That's it, this was enough to cause a compilation error.
Likewise for most other files touched by this commit.
2022-09-18 13:27:24 -04:00
Timothy Flynn
887dac0929
LibJS: Handle NumberFormat's [[UseGrouping]] option for "true" / "false"
...
This is a normative change to the Intl NumberFormat V3 spec. See:
4751da5
2022-09-18 09:45:40 -04:00
davidot
03c468fb7d
LibJS: Parse date strings like "9/17/2022"
2022-09-17 18:53:14 +02:00
Ben Wiederhake
4cd382c621
LibJS: Break another inclusion cycle by removing unnecessary include
2022-09-17 04:00:54 +00:00
Ben Wiederhake
6a4e2efa65
LibJS: Break inclusion cycle by removing unnecessary include
2022-09-17 04:00:54 +00:00
Tim Schumacher
388dc9cc5f
LibJS: Supress an unused bind when wrapping float atomic operations
2022-09-16 05:39:28 +00:00
Timothy Flynn
85e313077a
LibJS: Do not invoke Cell::vm in constructors before Cell is constructed
...
In a subclass of Cell, we cannot use Cell::vm() before the base Cell
object itself is constructed. Use the Realm's VM instead.
This was caught by UBSAN with vptr sanitation enabled.
2022-09-15 09:45:13 +02:00
Timothy Flynn
3efe611dbf
LibJS: Do not assume that IsArray means the object type is an Array
...
IsArray returns true if the object is an Array *or* if it is a
ProxyObject whose target is an Array. Therefore, we cannot downcast to
an Array based on IsArray.
Luckily, we don't actually need an Array here; SerializeJSONArray only
needs an Object.
This was caught by UBSAN with vptr sanitation enabled.
2022-09-15 09:45:13 +02:00
Timothy Flynn
98a6f962a0
LibJS: Use correct include + object class for Function{Object,Prototype}
...
Not causing any real issue, just noticed while debugging vptr sanitation
errors.
2022-09-15 09:45:13 +02:00
davidot
d4736d17ae
LibJS: Allow negative pointers in Value
...
Also ensure that all a nullptr input gives null object and you don't
accidentally dereference a nullptr.
2022-09-10 00:05:32 +01:00
Andreas Kling
7b0dd98103
LibJS+LibWeb: Spin event loop via VM::CustomData abstraction
...
Instead of calling Core::EventLoop directly, LibJS now has a virtual
function on VM::CustomData for customizing this behavior.
We use this in LibWeb to plumb the spin request through to the
PlatformEventPlugin.
2022-09-08 00:13:39 +02:00
Andreas Kling
00c8f07192
LibJS: Make Script and Module GC-allocated
...
This ensures that code currently in any active or saved execution stack
always stays alive.
2022-09-06 00:27:09 +02:00
Andreas Kling
abfb73f2e7
LibWeb+LibJS: Let JS::Realm::HostDefined objects mark things during GC
...
This allows us to mark the HTML::Window from our window environment
settings object.
2022-09-06 00:27:09 +02:00
Timothy Flynn
43a3471298
LibLocale: Move locale source files to the LibLocale folder
...
These are still included in LibUnicode, but this updates their location
and the include paths of other files which include them.
2022-09-05 14:37:16 -04:00
Timothy Flynn
ff48220dca
Userland: Move files destined for LibLocale to the Locale namespace
2022-09-05 14:37:16 -04:00
Timothy Flynn
6c7b05a0ff
LibUnicode+LibJS: Move Unicode::get_available_currencies() to Locale.h
...
This is generated by GenerateLocaleData, which will soon be in the
Locale namespace. Move it out of CurrencyCode.h, as that will continue
to live in the Unicode namespace.
2022-09-05 14:37:16 -04:00
Timothy Flynn
85994d6115
LibJS: Remove unused include from JS::Temporal::Calendar
2022-09-05 14:37:16 -04:00
Andreas Kling
7fce5f102f
LibJS: Don't use a Handle<Realm> in FinalizationRegistry
...
Instead just treat it like a normal GC cell edge.
2022-09-03 00:36:26 +02:00
Linus Groh
486775f9fe
LibJS: Fix incorrect check in ValidateAndApplyPropertyDescriptor
...
This is an editorial change in the ECMA-262 spec.
See: f0e4ae8
2022-09-02 22:47:28 +01:00
Linus Groh
455537d31d
LibJS: Assert Proxy target is a function in [[Call]] and [[Construct]]
...
As the TODOs suggested for a long time. :^)
2022-09-02 22:44:44 +01:00
davidot
0fc67ffd62
LibJS: Make indirect bindings of module behave like normal bindings
...
Before this we attempted to hack around this by only overriding
has_binding. However this did not cover all cases, for example when
assigning to variables before their declaration it didn't throw.
By using the new find_binding_and_index virtual method we can just
pretend the indirect bindings are real.
Since indirect binding do come from a normal environment we need to
ensure you cannot modify the binding and that properties like mutable
are false as expected by the spec for such an indirect binding.
2022-09-02 02:07:37 +01:00
davidot
2484bbc4e0
LibJS: Make DeclarativeEnvironment based on bindings instead of indices
...
This will allow other environments which extend DeclarativeEnvironment
to provide their own custom bindings.
2022-09-02 02:07:37 +01:00
davidot
3b56043612
LibJS: Put exports before symbols in keys of module namespace object
2022-09-02 02:07:37 +01:00
davidot
fb61e9274a
LibJS: Call resolve instead of reject in AsyncFromSyncIteratorPrototype
2022-09-02 02:07:37 +01:00
Timothy Flynn
c477425b9b
LibJS: Create DurationFormat's ListFormat object with type and style
...
This is a normative change in the Intl.DurationFormat spec. See:
1304e4b
2022-08-30 14:26:11 -04:00
Timothy Flynn
127b28c940
LibJS: Use numeric style if the previous style was numeric or 2-digit
...
This is a normative change in the Intl.DurationFormat proposal. See:
3a46ee3
2022-08-30 14:26:11 -04:00
Timothy Flynn
cab1cce522
LibJS: Update DurationFormat AO text to align with ECMA-402 and Temporal
...
These are editorial changes in the Intl.DurationFormat proposal. See:
71b291b
d0cc6fa
d4b35bb
2022-08-30 14:26:11 -04:00
Timothy Flynn
a86b840c64
LibJS: Rename DurationFormat's DurationSign to DurationRecordSign
...
This is an editorial change in the Intl.DurationFormat proposal. See:
f947239
2022-08-30 14:26:11 -04:00
Timothy Flynn
f8c51fec1d
LibJS: Align ToDurationRecord with ToTemporalDurationRecord
...
This is an editorial change in the Intl.DurationFormat proposal. See:
527ea58
2022-08-30 14:26:11 -04:00
Timothy Flynn
a28ff92106
LibJS: Mark PartitionDurationFormatPattern as infallible
...
This is an editorial change in the Intl.DurationFormat proposal. See:
cea3b68
2022-08-30 14:26:11 -04:00
Timothy Flynn
aabd06722f
LibJS: Change GetDurationUnitOptions to require a string for prevStyle
...
This is an editoral change in the Intl.DurationFormat proposal. See:
62ee645
2022-08-30 14:26:11 -04:00
Timothy Flynn
1778462d97
LibJS: Resolve FIXMEs in DurationFormat's PartitionDurationFormatPattern
...
These are normative changes in the Intl.DurationFormat proposal. See:
e2e18d1
f1e8ed3
2ed31b8
2d51d64
64cc5db
a1d7876
47a3a69
3e9358e
f4ecb46
b454c8c
2022-08-30 14:26:11 -04:00
Timothy Flynn
d57b92da09
LibJS: Default to "short" for DurationFormat's style option
...
This is a normative change in the Intl.DurationFormat proposal. See:
b289494
2022-08-30 14:26:11 -04:00
Timothy Flynn
765d016670
LibJS: Default to 0 for DurationFormat's fractionalDigits option
...
This is a normative change in the Intl.DurationFormat proposal. See:
ac7e184
2022-08-30 14:26:11 -04:00
Timothy Flynn
2fb332da7b
LibJS: Update spec steps to validate DurationFormat's numberingSystem
...
This is a normative change in the Intl.DurationFormat proposal. See:
63a9202
2022-08-30 14:26:11 -04:00
Linus Groh
69415f0608
LibJS: Make string_to_bigint() a standalone function
...
This now matches the newly added string_to_number().
2022-08-30 10:30:54 +01:00
Linus Groh
15e3a99250
LibJS: Trim non-ASCII whitespace as well in StringToBigInt
...
This was never caught since the original implementation AFAICT, and
isn't being covered by test262 either:
https://github.com/tc39/test262/issues/1354
2022-08-30 10:30:43 +01:00
Linus Groh
c88c33dc22
LibJS: Trim non-ASCII whitespace as well in StringToNumber
...
This regressed in f4b3bb5
.
2022-08-30 10:20:45 +01:00
Slappy826
f4b3bb519f
LibJS: Handle non-decimal integer literals in Value::to_number
...
Implements support for parsing binary and octal literals, and fixes
instances where a hex literal is parsed in ways the spec doesn't
allow.
2022-08-30 01:00:48 +01:00
Andreas Kling
35c9aa7c05
LibJS: Hide all the constructors!
...
Now that the GC allocator is able to invoke Cell subclass constructors
directly via friendship, we no longer need to keep them public. :^)
2022-08-29 03:24:54 +02:00
Andreas Kling
49fd92d92a
LibJS: Make JS_OBJECT and JS_ENVIRONMENT forward to JS_CELL
2022-08-29 03:24:54 +02:00
Andreas Kling
6e973ce69b
LibJS: Add JS_CELL macro and use it in all JS::Cell subclasses
...
This is similar to what we already had with JS_OBJECT (and also
JS_ENVIRONMENT) but sits at the top of the Cell inheritance hierarchy.
2022-08-29 03:24:54 +02:00