1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-22 18:45:08 +00:00
Commit graph

5099 commits

Author SHA1 Message Date
davidot
49fc0e2514 LibJS: Add space in output of toEval in test-common.js 2022-11-17 16:05:20 +00:00
davidot
8fa6861f66 LibJS: Initialize functions in spec order
This is only visible with something like `Object.getOwnPropertyNames` on
the global object. All other declaration instantiations put the
functions on an environment making the order invisible.
Note that spec order is not quite tree order as in non-strict mode
functions which get hoisted out of blocks appear before top level
functions.

Co-authored-by: Hendiadyoin1 <leon.a@serenityos.org>
2022-11-17 16:05:20 +00:00
davidot
5ca6e8dca8 LibJS: No longer hoist if parent scope has a function with the same name 2022-11-17 16:05:20 +00:00
davidot
54b2d8c1b8 LibJS: Reuse as_i32 in as_double in JS::Value
Since this might be complicated with NaN boxing keeping it as one
implementation makes this easier to check and change.
2022-11-17 16:05:20 +00:00
Timothy Flynn
421ebc2e29 LibJS: Remove workaround for Clang misalignment in MathematicalValue
As noted in 269a931, this has been fixed in Clang 15.
2022-11-15 12:30:16 +00:00
davidot
67865306d3 LibJS: Fix that functions in module did not look for var declarations 2022-11-15 12:00:36 +00:00
davidot
385c2f2eb8 LibJS: Use correct this value for tagged template calls
This has to get quite messy because we currently do evaluation to value
and reference separately meaning we have to deal with a lot of edge
cases here.
2022-11-15 12:00:36 +00:00
davidot
b3edd94869 LibJS: Treat '\\' as an escaped character in template literals
Before this change we would ignore that the second backslash is escaped
and template strings ending with ` \\` would be unterminated as the
second slash was used to escape the closing quote.
2022-11-15 12:00:36 +00:00
Andreas Kling
2d33b2996f LibJS: Teach GetVariable bytecode op to deal with global variable cache
This mirrors the behavior of Identifer::to_reference() in the AST
interpreter.
2022-11-11 15:25:52 +01:00
Sam Atkins
c33eae24f9 AK+Everywhere: Replace DistinctNumeric bool parameters with named ones
This means that rather than this:

```
AK_TYPEDEF_DISTINCT_NUMERIC_GENERAL(u64, true, true, false, false,
    false, true, FunctionAddress);
```

We now have this:
```
AK_TYPEDEF_DISTINCT_NUMERIC_GENERAL(u64, FunctionAddress, Arithmetic,
    Comparison, Increment);
```

Which is a lot more readable. :^)

Co-authored-by: Ali Mohammad Pur <mpfard@serenityos.org>
2022-11-11 17:50:53 +03:30
Linus Groh
24c0a6e9a4 Revert "LibJS: Add explicit assertion for days"
This reverts commit 56abb01ee3.

Unfortunately, the assertion doesn't work out as expected and crashes
test-js.
2022-11-11 14:10:02 +00:00
Andreas Kling
6ff9931dde LibJS: Make Identifier::execute() actually use the lookup cache
If we have cached environment coordinates for an Identifier, we have
to call to_reference() to actually make use of them. :^)
2022-11-11 12:22:01 +00:00
Andreas Kling
d7e5a2058d LibJS: Cache access to bindings in the global environment
This patch adds a special EnvironmentCoordinate::global_marker value
that signifies that a binding lookup ended up searching the global
environment. It doesn't matter if we find it there or not, the global
marker is always returned. This allows us to bypass other environments
on subsequent access, going directly to the global environment.
2022-11-11 12:22:01 +00:00
Andreas Kling
7b30df0840 LibJS: Make ObjectEnvironment::set_mutable_binding() faster as well
We can combine HasProperty and Set into just Set in non-strict mode for
non-with object environments.
2022-11-11 12:22:01 +00:00
Andreas Kling
12ceaf3790 LibJS: Make ObjectEnvironment::get_binding_value() faster in sloppy mode
We can combine HasProperty and Get into just Get in non-strict mode for
non-with object environments.
2022-11-11 12:22:01 +00:00
Smrtnyk
56abb01ee3 LibJS: Add explicit assertion for days
This is an editorial change in Temporal spec.

See: 15b7293b38
2022-11-11 12:14:46 +00:00
Nico Weber
6911c5545c Everywhere: Fix a few comment typos 2022-11-09 16:00:32 +00:00
Andreas Kling
88b15b0819 LibJS: Move throw_completion(Value) out of line
This allows us to instrument this function locally without rebuilding
1000+ files.
2022-11-09 15:48:08 +01:00
Luke Wilde
08750f69e4 LibJS: Add thorough tests for try/finally using continue and break
I wrote these tests a while ago while trying to improve the bytecode,
but didn't end up making them pass and gave up. They work in AST
interpreter mode, so we can have them in now to have them around for
anyone who wants to try and make them pass in bytecode.
2022-11-08 21:10:53 +00:00
Daniel Bertalan
4296425bd8 Everywhere: Remove redundant inequality comparison operators
C++20 can automatically synthesize `operator!=` from `operator==`, so
there is no point in writing such functions by hand if all they do is
call through to `operator==`.

This fixes a compile error with compilers that implement P2468 (Clang
16 currently). This paper restores the C++17 behavior that if both
`T::operator==(U)` and `T::operator!=(U)` exist, `U == T` won't be
rewritten in reverse to call `T::operator==(U)`. Removing `!=` operators
makes the rewriting possible again.
See https://reviews.llvm.org/D134529#3853062
2022-11-06 10:25:08 -07:00
Timothy Flynn
5e5cdb2d28 LibJS: Remove the now-unused LocalTZA AO 2022-11-06 01:47:37 +00:00
Timothy Flynn
f211028252 LibJS: Change ToLocalTime to use epoch nanoseconds
This is an editorial change to the ECMA-402 spec. See:
b3f9a1b
2022-11-06 01:47:37 +00:00
Timothy Flynn
9a9025dea0 LibJS: Remove infallibility marker from DefaultTimeZone invocation
This is an editorial change to the ECMA-402 spec. See:
46aa5cc

Also add an ECMA-402 spec link to the DefaultTimeZone implementation, as
that definition supersedes ECMA-262.
2022-11-06 01:47:37 +00:00
Smrtnyk
2ba2e6ca0a LibJS: Rename ToShowTimeZoneNameOption to ToTimeZoneNameOption
This is an editorial change in Temporal spec.

See: ab5b1ba910
2022-11-05 15:44:49 +00:00
Timothy Flynn
8eec25b7ae LibJS: Use more accurate number-to-string method in Number toExponential 2022-11-04 21:12:10 +00:00
Timothy Flynn
5898db8c0f LibJS: Use more accurate number-to-string method in Number toPrecision 2022-11-04 21:12:10 +00:00
Timothy Flynn
d56205f991 LibJS: Use more accurate number-to-string method in Intl.NumberFormat
Intl.NumberFormat only ever wants literal number-to-digits here, without
extra exponential formatting.
2022-11-04 21:12:10 +00:00
Timothy Flynn
9620a092de LibJS: Publicly expose double_to_string and rename it number_to_string
Rename it to match the name used by the spec.

Add an override mode to skip formatting numbers with an exponential sign
(e.g. 1e23). This mode is needed by Number and Intl.NumberFormat, who
don't call out a specific number-to-string method to use (they just say
to make "the String consisting of the digits of n").
2022-11-04 21:12:10 +00:00
Smrtnyk
efe82e5c91 LibJS: Rename ToShowCalendarOption to ToCalendarNameOption
This is an editorial change in the Temporal spec.

See: 2c9e2615f7
2022-11-04 21:00:25 +00:00
Dan Klishch
56aa21a7dc LibJS: Implement precise double_to_string 2022-11-03 20:17:09 -06:00
Luke Wilde
ac67077b57 LibJS: Fix length of PlainDateTime.withPlainTime
withPlainTime's argument is optional, so the length of the function is
actually 0.
2022-11-03 21:09:58 +00:00
Luke Wilde
b26b18a0bc LibJS: Add timeZoneName: "critical" option to ZonedDateTime.toString()
This is a normative change in the Temporal spec.

See: d84937f
2022-11-03 19:15:50 +00:00
Luke Wilde
4a167cfbec LibJS: Add calendarName: "critical" option to toString() methods
This is a normative change in the Temporal spec.

See: e715a50
2022-11-03 19:15:50 +00:00
Luke Wilde
192aa75279 LibJS: Align ISO 8601 grammar with annotations from IXDTF
This is a normative change in the Temporal spec.

See: c64b844
2022-11-03 19:15:50 +00:00
Timothy Flynn
99fc94e138 LibJS: Delegate to NumberFormat for DurationFormat unit formatting
This is a normative change in the Intl.DurationFormat proposal. See:
12ba9df
2022-11-03 18:37:48 +00:00
Timothy Flynn
a5bf32018f LibJS+LibUnicode: Add "microsecond" and "nanosecond" as sanctioned units
This is a normative change in the ECMA-402 spec. See:
f627573
2022-11-03 18:37:48 +00:00
Timothy Flynn
8ff0d35386 LibJS: Format sanctioned units such that there is one unit per line
Much easier to manage and view diffs this way, rather than one large
single line. This will soon be the only method in this file, so there's
no concern over taking up too much vertical space here.
2022-11-03 18:37:48 +00:00
Nico Weber
daeaefad17 Everywhere: Clean up "the the" comment typos 2022-11-03 17:38:32 +00:00
Timothy Flynn
92f4f40198 LibJS: Rename the Intl Enumeration Available* AOs to AvailableCanonical*
This is an editorial change to the Intl Enumeration API proposal. See:
807b444

Note that this was followed by a normative change to actually ensure the
returned values are canonical:
075a6dc

But the values we return are already canonical.
2022-11-03 16:36:11 +00:00
Moustafa Raafat
939374a037 LibJS: Use the UnsignedBigInteger compare_to_double algorithm
This also avoids an unnecessary copy
2022-11-02 22:04:34 -06:00
Moustafa Raafat
54b8a2b094 LibCrypto: Add a way to compare UnsignedBigInteger with double
This patch also make SignedBigInteger::compare_to_double make use
of the new function.
2022-11-02 22:04:34 -06:00
Tim Schumacher
ce2f1b845f Everywhere: Mark dependencies of most targets as PRIVATE
Otherwise, we end up propagating those dependencies into targets that
link against that library, which creates unnecessary link-time
dependencies.

Also included are changes to readd now missing dependencies to tools
that actually need them.
2022-11-01 14:49:09 +00:00
Timothy Flynn
4686989582 LibJS: Map DurationFormat's list style to "short" when it is "digital"
This is a normative change in the Intl.DurationFormat proposal. See:
7495e32
2022-11-01 14:33:07 +00:00
Timothy Flynn
84e6833203 LibJS: Alphabetically sort the collations returned by CollationsOfLocale
This is a normative change in the Intl Locale Info proposal. See:
171d3ad

Note this doesn't affect us because we don't have collation info from
the CLDR; we just return ["default"] here.
2022-11-01 14:33:07 +00:00
Andreas Kling
67236d9573 LibJS: Disable bytecode optimizations again
Bytecode optimizations still break test262, so let's not enable this
until they have been confirmed to work there.
2022-11-01 11:44:41 +01:00
Hendiadyoin1
4a06e68ecd LibJS: Set default bytecode optimization level to Optimize 2022-11-01 11:21:18 +01:00
Hendiadyoin1
1e1bf84e6d LibJS: Add a sanity check to bytecodes argument_list_evaluation 2022-11-01 11:21:18 +01:00
Hendiadyoin1
c9e7d452c5 LibJS: Add a note about inaccuracies to UnifySameBlocks 2022-11-01 11:21:18 +01:00
Hendiadyoin1
c66284ab0b LibJS: Fix MergeBlocks emitting some blocks twice 2022-11-01 11:21:18 +01:00
Hendiadyoin1
28e2467b48 LibJS: Minor cleanups in MergeBlocks 2022-11-01 11:21:18 +01:00