Skip to content

Commit 3b68fd0

Browse files
LibJS: Make array_like_size() non-virtual in IndexedPropertyStorage
1 parent 1d4f63e commit 3b68fd0

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

Libraries/LibJS/Runtime/IndexedProperties.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ constexpr size_t const SPARSE_ARRAY_HOLE_THRESHOLD = 200;
1414
constexpr size_t const LENGTH_SETTER_GENERIC_STORAGE_THRESHOLD = 4 * MiB;
1515

1616
SimpleIndexedPropertyStorage::SimpleIndexedPropertyStorage(Vector<Value>&& initial_values)
17-
: IndexedPropertyStorage(IsSimpleStorage::Yes)
18-
, m_array_size(initial_values.size())
17+
: IndexedPropertyStorage(IsSimpleStorage::Yes, initial_values.size())
1918
, m_packed_elements(move(initial_values))
2019
{
2120
}
@@ -112,9 +111,8 @@ bool SimpleIndexedPropertyStorage::set_array_like_size(size_t new_size)
112111
}
113112

114113
GenericIndexedPropertyStorage::GenericIndexedPropertyStorage(SimpleIndexedPropertyStorage&& storage)
115-
: IndexedPropertyStorage(IsSimpleStorage::No)
114+
: IndexedPropertyStorage(IsSimpleStorage::No, storage.array_like_size())
116115
{
117-
m_array_size = storage.array_like_size();
118116
for (size_t i = 0; i < storage.m_packed_elements.size(); ++i) {
119117
auto value = storage.m_packed_elements[i];
120118
if (!value.is_special_empty_value())

Libraries/LibJS/Runtime/IndexedProperties.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,20 @@ class IndexedPropertyStorage {
4141
virtual ValueAndAttributes take_last() = 0;
4242

4343
virtual size_t size() const = 0;
44-
virtual size_t array_like_size() const = 0;
44+
size_t array_like_size() const { return m_array_size; }
4545
virtual bool set_array_like_size(size_t new_size) = 0;
4646

4747
bool is_simple_storage() const { return m_is_simple_storage; }
4848

4949
protected:
50-
explicit IndexedPropertyStorage(IsSimpleStorage is_simple_storage)
51-
: m_is_simple_storage(is_simple_storage == IsSimpleStorage::Yes)
50+
explicit IndexedPropertyStorage(IsSimpleStorage is_simple_storage, size_t array_size = 0)
51+
: m_array_size(array_size)
52+
, m_is_simple_storage(is_simple_storage == IsSimpleStorage::Yes)
5253
{
5354
}
5455

56+
size_t m_array_size { 0 };
57+
5558
private:
5659
bool m_is_simple_storage { false };
5760
};
@@ -73,7 +76,6 @@ class SimpleIndexedPropertyStorage final : public IndexedPropertyStorage {
7376
virtual ValueAndAttributes take_last() override;
7477

7578
virtual size_t size() const override { return m_packed_elements.size(); }
76-
virtual size_t array_like_size() const override { return m_array_size; }
7779
virtual bool set_array_like_size(size_t new_size) override;
7880

7981
Vector<Value> const& elements() const { return m_packed_elements; }
@@ -97,7 +99,6 @@ class SimpleIndexedPropertyStorage final : public IndexedPropertyStorage {
9799

98100
void grow_storage_if_needed();
99101

100-
size_t m_array_size { 0 };
101102
Checked<size_t> m_number_of_empty_elements { 0 };
102103
Vector<Value> m_packed_elements;
103104
};
@@ -119,13 +120,11 @@ class GenericIndexedPropertyStorage final : public IndexedPropertyStorage {
119120
virtual ValueAndAttributes take_last() override;
120121

121122
virtual size_t size() const override { return m_sparse_elements.size(); }
122-
virtual size_t array_like_size() const override { return m_array_size; }
123123
virtual bool set_array_like_size(size_t new_size) override;
124124

125125
HashMap<u32, ValueAndAttributes> const& sparse_elements() const { return m_sparse_elements; }
126126

127127
private:
128-
size_t m_array_size { 0 };
129128
HashMap<u32, ValueAndAttributes> m_sparse_elements;
130129
};
131130

0 commit comments

Comments
 (0)