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

910 commits

Author SHA1 Message Date
Hendiadyoin1
89c82abf1f LibJS: Implement non standard error.stack attribute
All other browser already support this feature.
There is a Stage 1 proposal to standardize this, but it does not seem
to be active.
2022-02-07 14:17:57 +00:00
Jorropo
dc42ca37bd LibJS: Fix JSON.stringify with stale surrogate codepoints
This fix this test262 test:
built-ins/JSON/stringify/value-string-escape-unicode.js
2022-02-07 13:53:36 +00:00
Timothy Flynn
b0e5609b88 LibJS: Use GetV to look up the toJSON property in SerializeJSONProperty
The current implementation of step 2a sort of manually implemented GetV
with a ToObject + Get combo. But in the call to Get, the receiver wasn't
the correct object. So when invoking toJSON, the receiver was an Object
type rather than a BigInt.

This also adds spec comments to SerializeJSONProperty.
2022-02-07 09:24:09 +00:00
Timothy Flynn
cb57475168 LibJS: Implement BigInt.asUintN 2022-02-06 15:49:54 +00:00
Timothy Flynn
460c2caaf7 LibJS: Implement BigInt.asIntN 2022-02-06 15:49:54 +00:00
Timothy Flynn
72b3ea49d6 LibJS: Enable Temporal tests that now pass
These pass now that negative zero is disallowed by SignedBigInteger.
2022-02-06 15:49:54 +00:00
Timothy Flynn
27d3de1f17 LibRegex: Do not continue searching input when the sticky bit is set
This partially reverts commit a962ee020a.

When the sticky bit is set, the global bit should basically be ignored
except by external callers who want their own special behavior. For
example, RegExp.prototype [ @@match ] will use the global flag to
accumulate consecutive matches. But on the first failure, the regex
loop should break.
2022-02-05 19:06:50 +03:30
Timothy Flynn
30a143c79e LibJS: Explicitly handle invalid Date objects in UTC time setters
This is a normative change in the ECMA-262 spec:
ca53334

Note that this also fixes a few errors where we errantly converted the
stored time value to local time.
2022-02-04 13:47:50 +00:00
Timothy Flynn
fd7d0a31d9 LibJS: Explicitly handle invalid Date objects in local time setters
This is a normative change in the ECMA-262 spec:
ca53334
2022-02-04 13:47:50 +00:00
Linus Groh
19a2b32065 LibJS: Reject '-000000' as extended year
This is a normative change in the Temporal spec.

See: e60ef9e
2022-02-02 14:46:52 +00:00
Idan Horowitz
2cd3d4a287 LibJS: Implement Intl %SegmentIteratorPrototype%.next ( ) 2022-01-31 21:05:04 +02:00
Idan Horowitz
366468f1de LibJS: Implement Intl %SegmentsPrototype%.containing 2022-01-31 21:05:04 +02:00
Timothy Flynn
02b7bf34c9 LibJS: Implement BigInt IsLessThan according to the spec 2022-01-31 17:50:54 +00:00
Timothy Flynn
9ad3debf35 LibJS: Implement BigInt loose-equality according to the spec 2022-01-31 17:50:54 +00:00
Timothy Flynn
281b0411f2 LibJS: Implement conversion of strings to BigInts according to the spec
The spec defines a StringToBigInt AO which allows for converting binary,
octal, decimal, and hexadecimal strings to a BigInt. Our conversion was
only allowing for decimal strings.
2022-01-31 17:50:54 +00:00
Timothy Flynn
fb08a5a896 LibJS: Implement Intl.supportedValuesOf
This is a stage 3 ECMA-402 proposal:
https://tc39.es/proposal-intl-enumeration/
2022-01-31 00:32:41 +00:00
Timothy Flynn
687276fc38 LibJS: Implement ECMA-402 BigInt.prototype.toLocaleString 2022-01-30 20:05:27 +00:00
Timothy Flynn
d6e926e5b1 LibJS: Support BigInt number formatting with Intl.NumberFormat 2022-01-30 20:05:27 +00:00
Idan Horowitz
4ba4e4c777 LibJS: Implement Intl %SegmentsPrototype%[@@iterator] 2022-01-30 19:47:01 +00:00
Idan Horowitz
9001a8cbe1 LibJS: Implement Intl.Segmenter.prototype.segment 2022-01-30 19:47:01 +00:00
Idan Horowitz
891dfd9cbb LibJS: Implement Intl.Segmenter.prototype.resolvedOptions 2022-01-30 19:47:01 +00:00
Idan Horowitz
6b8dfefc20 LibJS: Implement Intl.Segmenter.supportedLocalesOf 2022-01-30 19:47:01 +00:00
Idan Horowitz
a3bc06bb23 LibJS: Start implementing Intl.Segmenter 2022-01-30 19:47:01 +00:00
davidot
6b5c882af3 LibJS: Add support for JSON modules
We now have one supported assertion: 'type' if that is 'json' we attempt
to parse the module as JSON.
2022-01-30 17:40:20 +00:00
davidot
f568939568 LibJS: Implement the import assertions proposal
The hard part of parsing them in import statements and calls was already
done so this is just removing some check which threw before on
assertions. And filtering the assertions based on the result of a new
host hook.
2022-01-30 17:40:20 +00:00
davidot
e0e4ead2c8 LibJS: Follow the spec with storing im- and export entries
Because we can have arbitrary in- and export names with strings we can
have '*' and '' which means using '*' as an indicating namespace imports
failed / behaved incorrectly for string imports '*'.
We now use more specific types to indicate these special states instead
of these 'magic' string values.

Do note that 'default' is not actually a magic string value but one
specified by the spec. And you can in fact export the default value by
doing: `export { 1 as default }`.
2022-01-30 17:40:20 +00:00
Timothy Flynn
4a99170cd2 LibJS: Implement Intl.Collator.prototype.resolvedOptions 2022-01-29 20:27:24 +00:00
Timothy Flynn
17306078b5 LibJS: Implement Intl.Collator.supportedLocalesOf 2022-01-29 20:27:24 +00:00
Timothy Flynn
06a6100b12 LibJS: Implement the Intl.Collator constructor 2022-01-29 20:27:24 +00:00
Timothy Flynn
4a3e142d55 LibJS: Implement a nearly empty Intl.Collator object
This adds plumbing for the Intl.Collator object, constructor, and
prototype.
2022-01-29 20:27:24 +00:00
Timothy Flynn
74939eb943 LibJS: Implement Intl.PluralRules.prototype.resolvedOptions 2022-01-28 19:38:47 +00:00
Timothy Flynn
8b3f49ff84 LibJS: Implement Intl.PluralRules.supportedLocalesOf 2022-01-28 19:38:47 +00:00
Timothy Flynn
348059bffd LibJS: Implement the Intl.PluralRules constructor 2022-01-28 19:38:47 +00:00
Timothy Flynn
0087804d10 LibJS: Implement a nearly empty Intl.PluralRules object
This adds plumbing for the Intl.PluralRules object, constructor, and
prototype.
2022-01-28 19:38:47 +00:00
Timothy Flynn
a2e791277e LibJS: Implement Intl.RelativeTimeFormat.prototype.formatToParts 2022-01-27 21:16:44 +00:00
Timothy Flynn
9c5d7e515c LibJS: Implement Intl.RelativeTimeFormat.prototype.format 2022-01-27 21:16:44 +00:00
Timothy Flynn
cf92bc42a2 LibJS: Respect per-locale minimum grouping digits when number formatting 2022-01-27 20:30:52 +00:00
Timothy Flynn
0c630d5687 LibJS: Implement Intl.RelativeTimeFormat.prototype.resolvedOptions 2022-01-25 19:02:59 +00:00
Timothy Flynn
b50880f28c LibJS: Fix errors in Intl.DateTimeFormat.prototype.resolvedOptions tests
Noticed these while implementing this prototype for RelativeTimeFormat.
2022-01-25 19:02:59 +00:00
Timothy Flynn
cf166c1d93 LibJS: Implement Intl.RelativeTimeFormat.supportedLocalesOf 2022-01-25 19:02:59 +00:00
Timothy Flynn
a2e31ed736 LibJS: Implement the Intl.RelativeTimeFormat constructor 2022-01-25 19:02:59 +00:00
Timothy Flynn
79fdec85de LibJS: Implement a nearly empty Intl.RelativeTimeFormat object
This adds plumbing for the Intl.RelativeTimeFormat object, constructor,
and prototype.
2022-01-25 19:02:59 +00:00
Linus Groh
140f1d9e55 LibJS/Tests: Enable Number.isInteger() test that now passes 2022-01-24 20:39:01 +00:00
Linus Groh
e20efaa083 LibJS: Let WrappedFunction inherit target name and length
This is a normative change in the ShadowRealm spec.

See: b73a1dc
2022-01-24 20:17:07 +00:00
davidot
986ad3ccf0 LibJS: Use HostImportModuleDynamically in ShadowRealmImportValue
Now that module loading is implemented this just works :^).

Since ShadowRealm explicitly passed a null ScriptOrModule we attempt to
get the top most ScriptOrModule in HostImportModuleDynamically.
This won't work in general as the web specifies other behavior but for
LibJS there must always be an active script to call
HostImportModuleDynamically.
2022-01-22 01:21:18 +00:00
davidot
7cbf4b90e8 LibJS: Implement ImportCall and HostImportModuleDynamically
This allows us to load modules from scripts.
This can be dangerous as it can load arbitrary files. Because of that it
fails and throws by default. Currently, only js and JavaScriptTestRunner
enable the default hook.

This also adds tests to test-js which test module code. Because we
form a spec perspective can't "enter" a module this is the easiest way
to run tests without having to modify test-js to have special cases for
modules.
To specify modules in test-js we use the extension '.mjs' this is to
ensure the files are not executed. We do still want to lint these files
so the prettier scripts have changed to look for '.mjs' files as well.
2022-01-22 01:21:18 +00:00
Timothy Flynn
9cd93944b8 LibJS: Change test conditions to pass in all time zones
Mostly slapping "timeZone: UTC" on DateTimeFormat tests (we have other
tests for specific time zones). Also pick dates that are not on DST
boundaries in some time zones where that matters.
2022-01-21 19:14:38 +00:00
ForLoveOfCats
71ab8fb757 LibJS: Add in-tree test for Json parsing of negative zeros
This mirrors the cases in `built-ins/JSON/parse/text-negative-zero` in
test262
2022-01-19 21:51:09 +00:00
Timothy Flynn
42c9c57141 LibJS+LibTimeZone: Begin handling DST when computing time zone offsets
This also updates some expectations in a Temporal time zone offset test
that is using a time stamp which is in DST for a few time zones.
2022-01-19 21:20:41 +00:00
Linus Groh
7d521b7c7c LibJS: Implement Function.prototype.toString() according to the spec
That's an old yak :^)
No, past me, AST nodes do not need to learn to stringify themselves.
This is now massively simplified by using the [[SourceText]] internal
slot.

Also updates a bunch of tests that are incorrect due to the old
implementation not being spec compliant, and add plenty more.
2022-01-19 20:33:08 +00:00