Linus Groh
b33b0d60e6
LibJS: Port Value::get_method() to GCPtr
2023-04-14 09:59:29 +02:00
Linus Groh
9279b0780d
LibJS: Port Value::to_bigint() to NonnullGCPtr
2023-04-14 09:59:29 +02:00
Linus Groh
f345f72b55
LibJS: Port Value::to_object() to NonnullGCPtr
2023-04-14 09:59:29 +02:00
Linus Groh
e79f5b6e85
LibJS: Port Value::to_primitive_string() to NonnullGCPtr
2023-04-14 09:59:29 +02:00
Linus Groh
2555d7a36a
LibJS: Make well-known symbol getters return NonnullGCPtr
...
None of these are ever null after the VM has been initialized, as proved
by virtually every caller immediately dereferencing the raw pointer.
2023-04-13 14:29:42 +02:00
Linus Groh
b84f8fb55b
LibJS: Make intrinsics getters return NonnullGCPtr
...
Some of these are allocated upon initialization of the intrinsics, and
some lazily, but in neither case the getters actually return a nullptr.
This saves us a whole bunch of pointer dereferences (as NonnullGCPtr has
an `operator T&()`), and also has the interesting side effect of forcing
us to explicitly use the FunctionObject& overload of call(), as passing
a NonnullGCPtr is ambigous - it could implicitly be turned into a Value
_or_ a FunctionObject& (so we have to dereference manually).
2023-04-13 14:29:42 +02:00
Andreas Kling
b727f8113f
LibJS: Add fast path to Value::to_u32() if Value is a positive i32
...
6.6% speed-up on Kraken's stanford-crypto-aes subtest. :^)
2023-03-30 19:13:35 +01:00
Linus Groh
e77503e49b
LibJS: Make string_to_number() return double instead of Optional<Value>
...
This would never return an empty optional or non-numeric value, and in
fact every caller as_double()'d the value right away.
Let's make the type match reality instead :^)
2023-03-01 17:55:42 +00:00
Hendiadyoin1
09fa3a17c7
LibJS: Allow to stringify empty Values without side effects
2023-02-26 19:40:09 +01:00
Linus Groh
09d40bfbb2
Everywhere: Use _{short_,}string to create Strings from literals
2023-02-25 20:51:49 +01:00
Timothy Flynn
ba40ef1f3a
LibJS: Remove Value::to_deprecated_string_without_side_effects
2023-02-16 14:32:22 +01:00
Timothy Flynn
a73b8292ed
LbJS: Convert exception-related usages of Value::TDSWOSE to String
...
TDSWOSE being to_deprecated_string_without_side_effects.
2023-02-16 14:32:22 +01:00
Timothy Flynn
3ffb6d9b5a
LibJS: Define Value::to_string_without_side_effects for String
2023-02-16 14:32:22 +01:00
Timothy Flynn
dc4207323b
LibJS: Remove the VM parameter from the NumberToString AO
...
This will be needed by Value::to_string_without_side_effects, which can
be called in contexts without a VM (e.g. in AK::Format specializations).
So to_string_without_side_effects will need to be callable without a VM,
thus NumberToString must be as well.
2023-02-16 14:32:22 +01:00
Timothy Flynn
b245300ba1
LibJS+Everywhere: Deprecate Value::to_string_without_side_effects
2023-02-16 14:32:22 +01:00
Linus Groh
a8bf2f8e4c
LibJS: Port Symbol to String
...
This includes the VM's global_symbol_registry HashMap, which can now
store String keys.
2023-02-11 21:47:57 +00:00
Linus Groh
89700a2101
LibJS: Rename Symbol::to_deprecated_string() to descriptive_string()
...
This implements the spec's SymbolDescriptiveString AO and should be
named accordingly.
2023-02-11 21:47:57 +00:00
Timothy Flynn
8414734a2d
LibJS: Propagate the OOM error from setting the String length property
2023-01-29 00:02:45 +00:00
Linus Groh
2ff989914d
LibJS: Make Value::typeof() return a StringView
2023-01-26 17:26:31 +00:00
Timothy Flynn
ceaec41726
LibJS: Port Value to-string methods to String
2023-01-15 01:00:20 +00:00
Timothy Flynn
c9056b824e
LibJS: Define Value::to_string to convert a Value to a String
2023-01-15 01:00:20 +00:00
Timothy Flynn
afeb7273cc
LibJS+Everywhere: Rename Value::to_string to to_deprecated_string
2023-01-15 01:00:20 +00:00
Timothy Flynn
0b58748156
LibJS: Define number_to_string to convert a double to a String
2023-01-15 01:00:20 +00:00
Timothy Flynn
8a88d4434f
LibJS+LibWeb: Rename number_to_string to number_to_deprecated_string
2023-01-15 01:00:20 +00:00
Timothy Flynn
0ddc2e1f50
LibCrypto+Everywhere: Rename *BigInteger::to_base to to_base_deprecated
2023-01-15 01:00:20 +00:00
Timothy Flynn
115baa7e32
LibJS+Everywhere: Make PrimitiveString and Utf16String fallible
...
This makes construction of Utf16String fallible in OOM conditions. The
immediate impact is that PrimitiveString must then be fallible as well,
as it may either transcode UTF-8 to UTF-16, or create a UTF-16 string
from ropes.
There are a couple of places where it is very non-trivial to propagate
the error further. A FIXME has been added to those locations.
2023-01-08 12:13:15 +01:00
Timothy Flynn
49b24b0968
LibJS: Let Utf16String be forward-declared in Value.h
...
It's only used as a template parameter, so let it be forward-declared.
Otherwise, we aren't able to include Completion.h in Utf16String.h, as
there would be a Utf16String -> Completion -> Value -> Utf16String
include cycle.
2023-01-08 12:13:15 +01:00
Linus Groh
dd3d133968
LibJS: Convert SymbolObject::create() to NonnullGCPtr
2022-12-14 09:59:45 +00:00
Linus Groh
049e99b5f0
LibJS: Convert StringObject::create() to NonnullGCPtr
2022-12-14 09:59:45 +00:00
Linus Groh
f990095728
LibJS: Convert NumberObject::create() to NonnullGCPtr
2022-12-14 09:59:45 +00:00
Linus Groh
b48fa8756f
LibJS: Convert BooleanObject::create() to NonnullGCPtr
2022-12-14 09:59:45 +00:00
Linus Groh
cf0a24ff0c
LibJS: Convert BigIntObject::create() to NonnullGCPtr
2022-12-14 09:59:45 +00:00
Linus Groh
e4b388ea5a
LibJS: Use modulo() for modulo operations in Value.cpp
2022-12-12 21:26:12 +00:00
Linus Groh
ff5882291f
LibJS: Rename same_value_non_{numeric => number}() and handle BigInts
...
This is an editorial change in the ECMA-262 spec.
See: https://github.com/tc39/ecma262/commit/f660b14
Note that the explicit check for zero sign equality is no longer needed
as of b0d6399
, which removed the ability of Crypto::SignedBigInteger to
represent negative zero.
2022-12-10 11:35:20 +00:00
Linus Groh
78895984e9
LibJS: Add spec comments to Value::invoke_internal()
2022-12-10 11:23:23 +00:00
Linus Groh
14e5003ece
LibJS: Add spec comments to is_less_than()
2022-12-10 11:23:23 +00:00
Linus Groh
f1d8a64510
LibJS: Add spec comments to is_strictly_equal()
2022-12-10 11:23:23 +00:00
Linus Groh
abf1ba89cd
LibJS: Add spec comments to same_value_non_numeric()
2022-12-10 11:23:23 +00:00
Linus Groh
625ad4192f
LibJS: Add spec comments to same_value_zero()
2022-12-10 11:23:23 +00:00
Linus Groh
44a243cae4
LibJS: Add spec comments to same_value()
2022-12-10 11:23:23 +00:00
Linus Groh
c892b1c2b6
LibJS: Add spec comments to ordinary_has_instance()
2022-12-10 11:23:23 +00:00
Linus Groh
0b35c24c9c
LibJS: Add spec comments to instance_of()
2022-12-10 11:23:23 +00:00
Linus Groh
d74ce90e74
LibJS: Add spec comments to exp{,_double}()
2022-12-10 11:23:23 +00:00
Linus Groh
eb4ea557f1
LibJS: Add spec comments to mod()
2022-12-10 11:23:23 +00:00
Linus Groh
dc747b3dd4
LibJS: Add spec comments to div()
2022-12-10 11:23:23 +00:00
Linus Groh
f0f476079b
LibJS: Add spec comments to mul()
2022-12-10 11:23:23 +00:00
Linus Groh
51cdf2cdef
LibJS: Add spec comments to sub()
2022-12-10 11:23:23 +00:00
Linus Groh
d5359164b1
LibJS: Add spec comments to add()
2022-12-10 11:23:23 +00:00
Linus Groh
e27ef63217
LibJS: Add spec comments to unsigned_right_shift()
2022-12-10 11:23:23 +00:00
Linus Groh
b66f9a8718
LibJS: Add spec comments to right_shift()
2022-12-10 11:23:23 +00:00