mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 19:17:44 +00:00
Userland: static vs non-static constexpr variables
Problem: - `static` variables consume memory and sometimes are less optimizable. - `static const` variables can be `constexpr`, usually. - `static` function-local variables require an initialization check every time the function is run. Solution: - If a global `static` variable is only used in a single function then move it into the function and make it non-`static` and `constexpr`. - Make all global `static` variables `constexpr` instead of `const`. - Change function-local `static const[expr]` variables to be just `constexpr`.
This commit is contained in:
parent
17ff895e1c
commit
800ea8ea96
38 changed files with 192 additions and 184 deletions
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <AK/Function.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <LibJS/Runtime/Error.h>
|
||||
#include <LibJS/Runtime/GlobalObject.h>
|
||||
#include <LibJS/Runtime/NumberObject.h>
|
||||
|
@ -12,17 +13,6 @@
|
|||
|
||||
namespace JS {
|
||||
|
||||
static const u8 max_precision_for_radix[37] = {
|
||||
// clang-format off
|
||||
0, 0, 52, 32, 26, 22, 20, 18, 17, 16,
|
||||
15, 15, 14, 14, 13, 13, 13, 12, 12, 12,
|
||||
12, 11, 11, 11, 11, 11, 11, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
NumberPrototype::NumberPrototype(GlobalObject& global_object)
|
||||
: NumberObject(0, *global_object.object_prototype())
|
||||
{
|
||||
|
@ -41,6 +31,8 @@ NumberPrototype::~NumberPrototype()
|
|||
|
||||
JS_DEFINE_NATIVE_FUNCTION(NumberPrototype::to_string)
|
||||
{
|
||||
constexpr StringView digits = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
Value number_value;
|
||||
|
||||
auto this_value = vm.this_value(global_object);
|
||||
|
@ -107,6 +99,14 @@ JS_DEFINE_NATIVE_FUNCTION(NumberPrototype::to_string)
|
|||
if (decimal_part != 0.0) {
|
||||
characters.append('.');
|
||||
|
||||
constexpr u8 max_precision_for_radix[37] = {
|
||||
// clang-format off
|
||||
0, 0, 52, 32, 26, 22, 20, 18, 17, 16,
|
||||
15, 15, 14, 14, 13, 13, 13, 12, 12, 12,
|
||||
12, 11, 11, 11, 11, 11, 11, 10, 10, 10,
|
||||
10, 10, 10, 10, 10, 10, 10,
|
||||
// clang-format on
|
||||
};
|
||||
u8 precision = max_precision_for_radix[radix];
|
||||
|
||||
for (u8 i = 0; i < precision; ++i) {
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
namespace JS {
|
||||
|
||||
// Used in various abstract operations to make it obvious when a non-optional return value must be discarded.
|
||||
static const double INVALID { 0 };
|
||||
static constexpr double INVALID { 0 };
|
||||
|
||||
static inline bool same_type_for_equality(const Value& lhs, const Value& rhs)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue