mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-04 15:45:25 +00:00
LibJS: Avoid property lookups during object initialization
When we're initializing objects, we're just adding a bunch of new properties, without transition, and without overlap (we never add the same property twice.) Take advantage of this by skipping lookups entirely (no need to see if we're overwriting an existing property) during initialization. Another nice test-js speedup :^)
This commit is contained in:
@@ -472,6 +472,15 @@ bool Object::put_own_property(Object& this_object, const StringOrSymbol& propert
|
||||
attributes.set_has_setter();
|
||||
}
|
||||
|
||||
// NOTE: We disable transitions during initialize(), this makes building common runtime objects significantly faster.
|
||||
// Transitions are primarily interesting when scripts add properties to objects.
|
||||
if (!m_transitions_enabled && !m_shape->is_unique()) {
|
||||
m_shape->add_property_without_transition(property_name, attributes);
|
||||
m_storage.resize(m_shape->property_count());
|
||||
m_storage[m_shape->property_count() - 1] = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
auto metadata = shape().lookup(property_name);
|
||||
bool new_property = !metadata.has_value();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user