1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 23:37:36 +00:00

LibJS: Stop using a native property for Array lengths

Specifically, replace it with a specification-based implementation that
overrides the internal methods that interact with the length property
instead.
This commit is contained in:
Idan Horowitz 2021-07-07 03:50:19 +03:00 committed by Linus Groh
parent fff112c8a3
commit c351b4ad0d
5 changed files with 222 additions and 67 deletions

View file

@ -35,7 +35,7 @@ public:
virtual size_t size() const = 0;
virtual size_t array_like_size() const = 0;
virtual void set_array_like_size(size_t new_size) = 0;
virtual bool set_array_like_size(size_t new_size) = 0;
virtual bool is_simple_storage() const { return false; }
};
@ -55,7 +55,7 @@ public:
virtual size_t size() const override { return m_packed_elements.size(); }
virtual size_t array_like_size() const override { return m_array_size; }
virtual void set_array_like_size(size_t new_size) override;
virtual bool set_array_like_size(size_t new_size) override;
virtual bool is_simple_storage() const override { return true; }
const Vector<Value>& elements() const { return m_packed_elements; }
@ -83,7 +83,7 @@ public:
virtual size_t size() const override { return m_sparse_elements.size(); }
virtual size_t array_like_size() const override { return m_array_size; }
virtual void set_array_like_size(size_t new_size) override;
virtual bool set_array_like_size(size_t new_size) override;
const HashMap<u32, ValueAndAttributes>& sparse_elements() const { return m_sparse_elements; }
@ -134,7 +134,9 @@ public:
bool is_empty() const { return array_like_size() == 0; }
size_t array_like_size() const { return m_storage->array_like_size(); }
void set_array_like_size(size_t);
bool set_array_like_size(size_t);
size_t real_size() const;
Vector<u32> indices() const;