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

2968 commits

Author SHA1 Message Date
Timothy Flynn
d37d6b3479 LibJS: Protect CanonicalIndex against double-to-integer overflow
Explicitly disallow constructing a CanonicalIndex from a floating point
type without going through a factory method that will throw when the
provided index cannot fit in a u32.
2022-12-07 16:43:19 +00:00
Timothy Flynn
8f46cb83c7 LibJS: Put CanonicalIndex in the JS namespace 2022-12-07 16:43:19 +00:00
Timothy Flynn
8f1f794bbd LibJS: Change an error message used by %TypedArray%.prototype.with
ErrorType::InvalidIndex does not encapsulate the reasons why an index
may be invalid. For example:

    let array = new Uint8Array([1, 2, 3, 4, 5]);
    array.with(10, 0);

Will currently yield:

    [RangeError] Index must be a positive integer

Which is misleading because 10 *is* a positive integer.
2022-12-07 16:43:19 +00:00
Linus Groh
1dd8655514 LibJS: Replace standalone js_symbol() with Symbol::create() 2022-12-07 16:43:06 +00:00
Linus Groh
525f22d018 LibJS: Replace standalone js_string() with PrimitiveString::create()
Note that js_rope_string() has been folded into this, the old name was
misleading - it would not always create a rope string, only if both
sides are not empty strings. Use a three-argument create() overload
instead.
2022-12-07 16:43:06 +00:00
Linus Groh
5db38d7ba1 LibJS: Replace standalone js_bigint() with BigInt::create()
Three standalone Cell creation functions remain in the JS namespace:

- js_bigint()
- js_string()
- js_symbol()

All of them are leftovers from early iterations when LibJS still took
inspiration from JSC, which itself has jsString(). Nowadays, we pretty
much exclusively use static create() functions to construct types
allocated on the JS heap, and there's no reason to not do the same for
these.
Also change the return type from BigInt* to NonnullGCPtr<BigInt> while
we're here.

This is patch 1/3, replacement of js_string() and js_symbol() follow.
2022-12-07 16:43:06 +00:00
Linus Groh
54abfcf835 LibJS: Remove redundant AK_MAKE_NON{COPYABLE,MOVABLE} from Symbol class
These are already applied to the Cell base class.
2022-12-07 09:58:59 +00:00
Linus Groh
f490ba13ff LibJS: Move creation of global symbols into Symbol.for()
This is now according to the spec. Having a non-standard lookup API
that creates symbols on the fly doesn't seem ideal.
2022-12-07 09:58:59 +00:00
Linus Groh
b821356ba6 LibJS: Add const/non-const VM::global_symbol_registry() getters
This will allow us to replace the strange get_global_symbol() API that
creates symbols on the fly when not found.
2022-12-07 09:58:59 +00:00
Linus Groh
d5457375e6 LibJS: Store NonnullGCPtr<Symbol> values in m_global_symbol_registry 2022-12-07 09:58:59 +00:00
Linus Groh
2c579ed0df LibJS: Rename m_global_symbol_map to m_global_symbol_registry
The spec calls it "GlobalSymbolRegistry".
2022-12-07 09:58:59 +00:00
Linus Groh
daec065fde LibJS: Move initialize_instance_elements() from VM to Object
This makes more sense as an Object method rather than living within the
VM class for no good reason. Most of the other 7.3.xx AOs already work
the same way.
Also add spec comments while we're here.
2022-12-07 00:23:51 +00:00
Linus Groh
cdeaced54e LibJS: Add spec link and comment to VM::execution_context_stack() 2022-12-07 00:14:10 +00:00
Linus Groh
91a9f41155 LibJS: Add spec link and comment to VM::running_execution_context() 2022-12-07 00:14:01 +00:00
Linus Groh
1832474a37 LibJS: Remove forgotten VM::construct() declaration
This has been a standalone AO function for a long time now.
2022-12-06 23:46:47 +00:00
Linus Groh
1f4437ff2b LibJS: Remove unused VM::join_arguments() function
The last uses of this were removed in ff5e07d.
2022-12-06 23:45:24 +00:00
Linus Groh
57dc179b1f Everywhere: Rename to_{string => deprecated_string}() where applicable
This will make it easier to support both string types at the same time
while we convert code, and tracking down remaining uses.

One big exception is Value::to_string() in LibJS, where the name is
dictated by the ToString AO.
2022-12-06 08:54:33 +01:00
Linus Groh
6e19ab2bbc AK+Everywhere: Rename String to DeprecatedString
We have a new, improved string type coming up in AK (OOM aware, no null
state), and while it's going to use UTF-8, the name UTF8String is a
mouthful - so let's free up the String name by renaming the existing
class.
Making the old one have an annoying name will hopefully also help with
quick adoption :^)
2022-12-06 08:54:33 +01:00
Linus Groh
d26aabff04 Everywhere: Run clang-format 2022-12-03 23:52:23 +00:00
Idan Horowitz
2e806dab07 LibJS: Implement Set.prototype.isDisjointFrom 2022-12-02 13:09:15 +01:00
Idan Horowitz
3470f33a0f LibJS: Implement Set.prototype.isSupersetOf 2022-12-02 13:09:15 +01:00
Idan Horowitz
e29be4eaa8 LibJS: Implement Set.prototype.isSubsetOf 2022-12-02 13:09:15 +01:00
Idan Horowitz
e359eeabe8 LibJS: Implement Set.prototype.symmetricDifference 2022-12-02 13:09:15 +01:00
Idan Horowitz
be8329d5f6 LibJS: Implement Set.prototype.difference 2022-12-02 13:09:15 +01:00
Idan Horowitz
9e693304ff LibJS: Implement Set.prototype.intersection 2022-12-02 13:09:15 +01:00
Idan Horowitz
fee65f6453 LibJS: Implement Set.prototype.union 2022-12-02 13:09:15 +01:00
Idan Horowitz
8e1df36588 LibJS: Implement the Set Methods proposal abstract operations 2022-12-02 13:09:15 +01:00
Linus Groh
b0e7d59b8b LibJS: Throw on conversion from TimeZone to Calendar and vice versa
This is a normative change in the Temporal spec.

See: 2084e77
2022-12-02 02:04:13 +01:00
Linus Groh
ca038c1a4e LibJS: Align Temporal.{Calendar,TimeZone} id getters with toString
This is a normative change in the Temporal spec.

See: 0bb391a
2022-12-02 02:04:13 +01:00
Timothy Flynn
c21e9a415d LibJS: Add missing spec link on String.prototype.toWellFormed
Missed in commit 3ee5217adc.
2022-12-01 11:17:02 -05:00
Timothy Flynn
3ee5217adc LibJS: Implement String.prototype.toWellFormed 2022-12-01 17:03:55 +01:00
Timothy Flynn
0bb46235a7 LibJS: Implement String.prototype.isWellFormed 2022-12-01 17:03:55 +01:00
Linus Groh
24237ae5bf LibJS: Add FIXME to removed SplitMatch AO 2022-12-01 13:32:47 +01:00
Linus Groh
e960f9549e LibJS: Sort String.prototype methods in spec order
This is similar to these previous changes in LibJS:

- 999ad734ec
- f19c4ab693
- 5f5bcd549e
2022-12-01 13:32:47 +01:00
Timothy Flynn
69f6fbdf99 LibJS: Replace CreateDataPropertyOrThrow with Set in TypedArray toSorted
This was an errant transcription in 4dbb2c2d44.
2022-11-30 23:27:51 +01:00
Timothy Flynn
34e328e580 LibJS: Allow TypedArrays to become detached while sorting
This is a normative change in the Change Array by Copy proposal. See:
17d8b54
2022-11-30 23:27:51 +01:00
Timothy Flynn
31d315001c LibJS: Allocate concrete TypedArrays with a preallocated base TypedArray
TypedArray constructors/prototypes are currently allocating within their
C++ constructor when trying to access the intrinsic base TypedArray. To
prevent this, construct these objects with an already-allocated base
TypedArray.
2022-11-30 13:05:57 -05:00
Timothy Flynn
c0952e3670 LibJS: Do not allocate in Set's constructor
We are currently allocating in Set's constructor to create the set's
underlying Map. This can cause GC to occur before the member is actually
initialized, thus we will crash in Set::visit_edges trying to visit a
member that does not exist.

Instead, create the Map in Set::initialize, where we can allocate. Also
change Map to be stored as a normal JS heap-allocated object, rather
than as a stack variable.
2022-11-30 13:05:57 -05:00
Timothy Flynn
675e5bfdce LibJS: Allow specifying only roundingIncrement in NumberFormat options
This is a normative change in the Intl.NumberFormat v3 spec. See:
a260aa3
2022-11-29 10:24:44 +01:00
davidot
bf1b2d63c6 LibJS: Add spec comments and check for edge cases in Math.tanh 2022-11-28 13:10:21 +01:00
davidot
8de8742b7c LibJS: Add spec comments and check for edge cases in Math.sinh 2022-11-28 13:10:21 +01:00
davidot
4306462a95 LibJS: Add spec comments and check for edge cases in Math.log10 2022-11-28 13:10:21 +01:00
davidot
eda90b54d4 LibJS: Add spec comments and check for edge cases in Math.log2 2022-11-28 13:10:21 +01:00
davidot
4813385c9a LibJS: Add spec comments and check for edge cases in Math.log 2022-11-28 13:10:21 +01:00
davidot
d4e5644df8 LibJS: Add spec comments and check for edge cases in Math.atanh 2022-11-28 13:10:21 +01:00
davidot
c565cbd30c LibJS: Add spec comments and check for edge cases in Math.atanh 2022-11-28 13:10:21 +01:00
davidot
68aeeea5d2 LibJS: Add spec comments and check for edge cases in Math.asinh 2022-11-28 13:10:21 +01:00
davidot
6bdf021b0c LibJS: Add spec comments and check for edge cases in Math.asin 2022-11-28 13:10:21 +01:00
davidot
cf4daa3941 LibJS: Add spec comments and check for edge cases in Math.acosh 2022-11-28 13:10:21 +01:00
Luke Wilde
a1c1ab5f8d LibJS: Switch to bytecode interpreter to run generator functions for AST
The bytecode interpreter can execute generator functions while the AST
interpreter cannot. This simply makes it create a new bytecode
interpreter when one doesn't exist when executing a generator function.
Doing so makes it automatically switch to the bytecode interpreter to
execute any future code until it exits the generator.
2022-11-26 21:04:17 +00:00