Skip to content

Commit

Permalink
LibJS+LibWeb: Use new Cell::Visitor helpers to avoid manual iteration
Browse files Browse the repository at this point in the history
  • Loading branch information
awesomekling committed Apr 15, 2024
1 parent 8f172f4 commit 97b9565
Show file tree
Hide file tree
Showing 63 changed files with 100 additions and 215 deletions.
3 changes: 1 addition & 2 deletions Userland/Libraries/LibJS/Bytecode/Executable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ void Executable::dump() const
void Executable::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto constant : constants)
visitor.visit(constant);
visitor.visit(constants);
}

}
6 changes: 2 additions & 4 deletions Userland/Libraries/LibJS/Bytecode/Interpreter.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ struct CallFrame {

void visit_edges(Cell::Visitor& visitor)
{
for (auto const& value : registers())
visitor.visit(value);
for (auto const& environment : saved_lexical_environments)
visitor.visit(environment);
visitor.visit(registers());
visitor.visit(saved_lexical_environments);
for (auto& context : unwind_contexts) {
visitor.visit(context.lexical_environment);
}
Expand Down
6 changes: 2 additions & 4 deletions Userland/Libraries/LibJS/CyclicModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ void CyclicModule::visit_edges(Cell::Visitor& visitor)
Base::visit_edges(visitor);
visitor.visit(m_cycle_root);
visitor.visit(m_top_level_capability);
for (auto const& module : m_async_parent_modules)
visitor.visit(module);
visitor.visit(m_async_parent_modules);
for (auto const& loaded_module : m_loaded_modules)
visitor.visit(loaded_module.module);
}
Expand All @@ -40,8 +39,7 @@ void GraphLoadingState::visit_edges(Cell::Visitor& visitor)
Base::visit_edges(visitor);
visitor.visit(promise_capability);
visitor.visit(host_defined);
for (auto module : visited)
visitor.visit(module);
visitor.visit(visited);
}

// 16.2.1.5.1 LoadRequestedModules ( [ hostDefined ] ), https://tc39.es/ecma262/#sec-LoadRequestedModules
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibJS/Runtime/BoundFunction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,7 @@ void BoundFunction::visit_edges(Visitor& visitor)

visitor.visit(m_bound_target_function);
visitor.visit(m_bound_this);
for (auto argument : m_bound_arguments)
visitor.visit(argument);
visitor.visit(m_bound_arguments);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,7 @@ void ECMAScriptFunctionObject::visit_edges(Visitor& visitor)
visitor.visit(m_name_string);

visitor.visit(m_bytecode_executable);
for (auto& executable : m_default_parameter_bytecode_executables)
visitor.visit(executable);
visitor.visit(m_default_parameter_bytecode_executables);

for (auto& field : m_fields) {
if (auto* property_key_ptr = field.name.get_pointer<PropertyKey>(); property_key_ptr && property_key_ptr->is_symbol())
Expand Down
6 changes: 2 additions & 4 deletions Userland/Libraries/LibJS/Runtime/ExecutionContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,8 @@ void ExecutionContext::visit_edges(Cell::Visitor& visitor)
if (instruction_stream_iterator.has_value())
visitor.visit(const_cast<Bytecode::Executable*>(instruction_stream_iterator.value().executable()));
visitor.visit(function_name);
for (auto argument : arguments)
visitor.visit(argument);
for (auto local : locals)
visitor.visit(local);
visitor.visit(arguments);
visitor.visit(locals);
script_or_module.visit(
[](Empty) {},
[&](auto& script_or_module) {
Expand Down
4 changes: 1 addition & 3 deletions Userland/Libraries/LibJS/Runtime/Object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1394,9 +1394,7 @@ void Object::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_shape);

for (auto& value : m_storage)
visitor.visit(value);
visitor.visit(m_storage);

m_indexed_properties.for_each_value([&visitor](auto& value) {
visitor.visit(value);
Expand Down
6 changes: 2 additions & 4 deletions Userland/Libraries/LibJS/Runtime/Promise.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,10 +395,8 @@ void Promise::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_result);
for (auto& reaction : m_fulfill_reactions)
visitor.visit(reaction);
for (auto& reaction : m_reject_reactions)
visitor.visit(reaction);
visitor.visit(m_fulfill_reactions);
visitor.visit(m_reject_reactions);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ JS_DEFINE_ALLOCATOR(PromiseAnyRejectElementFunction);
void PromiseValueList::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto& val : m_values)
visitor.visit(val);
visitor.visit(m_values);
}

PromiseResolvingElementFunction::PromiseResolvingElementFunction(size_t index, PromiseValueList& values, NonnullGCPtr<PromiseCapability const> capability, RemainingElements& remaining_elements, Object& prototype)
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/Animations/Animatable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@ void Animatable::disassociate_with_animation(JS::NonnullGCPtr<Animation> animati

void Animatable::visit_edges(JS::Cell::Visitor& visitor)
{
for (auto const& animation : m_associated_animations)
visitor.visit(animation);
visitor.visit(m_associated_animations);
visitor.visit(m_cached_animation_name_source);
visitor.visit(m_cached_animation_name_animation);
}
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/Animations/AnimationTimeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@ void AnimationTimeline::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_associated_document);
for (auto const& animation : m_associated_animations)
visitor.visit(animation);
visitor.visit(m_associated_animations);
}

}
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/Animations/KeyframeEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -873,8 +873,7 @@ void KeyframeEffect::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_target_element);
for (auto const& keyframe : m_keyframe_objects)
visitor.visit(keyframe);
visitor.visit(m_keyframe_objects);
}

static CSS::RequiredInvalidationAfterStyleChange compute_required_invalidation(HashMap<CSS::PropertyID, NonnullRefPtr<CSS::StyleValue const>> const& old_properties, HashMap<CSS::PropertyID, NonnullRefPtr<CSS::StyleValue const>> const& new_properties)
Expand Down
10 changes: 3 additions & 7 deletions Userland/Libraries/LibWeb/Bindings/Intrinsics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,9 @@ JS_DEFINE_ALLOCATOR(Intrinsics);
void Intrinsics::visit_edges(JS::Cell::Visitor& visitor)
{
Base::visit_edges(visitor);

for (auto& it : m_namespaces)
visitor.visit(it.value);
for (auto& it : m_prototypes)
visitor.visit(it.value);
for (auto& it : m_constructors)
visitor.visit(it.value);
visitor.visit(m_namespaces);
visitor.visit(m_prototypes);
visitor.visit(m_constructors);
visitor.visit(m_realm);
}

Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/CSS/CSSKeyframesRule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ JS::NonnullGCPtr<CSSKeyframesRule> CSSKeyframesRule::create(JS::Realm& realm, Fl
void CSSKeyframesRule::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto& keyframe : m_keyframes)
visitor.visit(keyframe);
visitor.visit(m_keyframes);
}

void CSSKeyframesRule::initialize(JS::Realm& realm)
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@ void CSSRuleList::initialize(JS::Realm& realm)
void CSSRuleList::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto& rule : m_rules)
visitor.visit(rule);
visitor.visit(m_rules);
}

bool CSSRuleList::is_supported_property_index(u32 index) const
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/CSS/CSSStyleSheet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,7 @@ void CSSStyleSheet::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_owner_css_rule);
visitor.visit(m_default_namespace_rule);
visitor.visit(m_constructor_document);
for (auto& [key, namespace_rule] : m_namespace_rules)
visitor.visit(namespace_rule);
visitor.visit(m_namespace_rules);
}

// https://www.w3.org/TR/cssom/#dom-cssstylesheet-insertrule
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/CSS/StyleSheetList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ void StyleSheetList::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_document);
for (auto sheet : m_sheets)
visitor.visit(sheet);
visitor.visit(m_sheets);
}

// https://www.w3.org/TR/cssom/#ref-for-dfn-supported-property-indices%E2%91%A1
Expand Down
11 changes: 3 additions & 8 deletions Userland/Libraries/LibWeb/DOM/AbortSignal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,9 @@ void AbortSignal::visit_edges(JS::Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_abort_reason);
for (auto& algorithm : m_abort_algorithms)
visitor.visit(algorithm);

for (auto& source_signal : m_source_signals)
visitor.visit(source_signal);

for (auto& dependent_signal : m_dependent_signals)
visitor.visit(dependent_signal);
visitor.visit(m_abort_algorithms);
visitor.visit(m_source_signals);
visitor.visit(m_dependent_signals);
}

// https://dom.spec.whatwg.org/#dom-abortsignal-abort
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/AccessibilityTreeNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,7 @@ void AccessibilityTreeNode::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_value);
for (auto const& child : m_children)
visitor.visit(child);
visitor.visit(m_children);
}

}
57 changes: 17 additions & 40 deletions Userland/Libraries/LibWeb/DOM/Document.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -445,44 +445,25 @@ void Document::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_visual_viewport);
visitor.visit(m_latest_entry);
visitor.visit(m_default_timeline);

for (auto& script : m_scripts_to_execute_when_parsing_has_finished)
visitor.visit(script);
for (auto& script : m_scripts_to_execute_in_order_as_soon_as_possible)
visitor.visit(script);
for (auto& script : m_scripts_to_execute_as_soon_as_possible)
visitor.visit(script);

for (auto& node_iterator : m_node_iterators)
visitor.visit(node_iterator);

for (auto& document_observer : m_document_observers)
visitor.visit(document_observer);

for (auto& target : m_pending_scroll_event_targets)
visitor.visit(target);
for (auto& target : m_pending_scrollend_event_targets)
visitor.visit(target);

for (auto& observer : m_intersection_observers)
visitor.visit(observer);

for (auto& observer : m_resize_observers)
visitor.visit(observer);

for (auto& image : m_shared_image_requests)
visitor.visit(image.value);

for (auto& timeline : m_associated_animation_timelines)
visitor.visit(timeline);

visitor.visit(m_scripts_to_execute_when_parsing_has_finished);
visitor.visit(m_scripts_to_execute_in_order_as_soon_as_possible);
visitor.visit(m_scripts_to_execute_as_soon_as_possible);
visitor.visit(m_node_iterators);
visitor.visit(m_document_observers);
visitor.visit(m_pending_scroll_event_targets);
visitor.visit(m_pending_scrollend_event_targets);
visitor.visit(m_intersection_observers);
visitor.visit(m_resize_observers);

visitor.visit(m_shared_image_requests);

visitor.visit(m_associated_animation_timelines);
visitor.visit(m_list_of_available_images);

for (auto* form_associated_element : m_form_associated_elements_with_form_attribute)
visitor.visit(form_associated_element->form_associated_element_to_html_element());

for (auto& element : m_potentially_named_elements)
visitor.visit(element);
visitor.visit(m_potentially_named_elements);

for (auto& event : m_pending_animation_event_queue) {
visitor.visit(event.event);
Expand All @@ -491,14 +472,10 @@ void Document::visit_edges(Cell::Visitor& visitor)

visitor.visit(m_adopted_style_sheets);

for (auto& shadow_root : m_shadow_roots)
visitor.visit(shadow_root);

for (auto& element : m_top_layer_elements)
visitor.visit(element);
visitor.visit(m_shadow_roots);

for (auto& element : m_top_layer_pending_removals)
visitor.visit(element);
visitor.visit(m_top_layer_elements);
visitor.visit(m_top_layer_pending_removals);
}

// https://w3c.github.io/selection-api/#dom-document-getselection
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/Element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,7 @@ void Element::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_shadow_root);
visitor.visit(m_custom_element_definition);
if (m_pseudo_element_nodes) {
for (auto& pseudo_element_layout_node : *m_pseudo_element_nodes)
visitor.visit(pseudo_element_layout_node);
visitor.visit(m_pseudo_element_nodes->span());
}
if (m_registered_intersection_observers) {
for (auto& registered_intersection_observers : *m_registered_intersection_observers)
Expand Down
6 changes: 2 additions & 4 deletions Userland/Libraries/LibWeb/DOM/Event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,9 @@ void Event::visit_edges(Visitor& visitor)
visitor.visit(it.invocation_target);
visitor.visit(it.shadow_adjusted_target);
visitor.visit(it.related_target);
for (auto& itit : it.touch_target_list)
visitor.visit(itit);
visitor.visit(it.touch_target_list);
}
for (auto& it : m_touch_target_list)
visitor.visit(it);
visitor.visit(m_touch_target_list);
}

// https://dom.spec.whatwg.org/#concept-event-path-append
Expand Down
7 changes: 2 additions & 5 deletions Userland/Libraries/LibWeb/DOM/EventTarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,8 @@ void EventTarget::visit_edges(Cell::Visitor& visitor)
Base::visit_edges(visitor);

if (auto const* data = m_data.ptr()) {
for (auto& event_listener : data->event_listener_list)
visitor.visit(event_listener);

for (auto& it : data->event_handler_map)
visitor.visit(it.value);
visitor.visit(data->event_listener_list);
visitor.visit(data->event_handler_map);
}
}

Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/HTMLCollection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,7 @@ void HTMLCollection::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_root);
for (auto& element : m_cached_elements)
visitor.visit(element);
visitor.visit(m_cached_elements);
}

void HTMLCollection::update_cache_if_needed() const
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/MutationObserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ void MutationObserver::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_callback);
for (auto& record : m_record_queue)
visitor.visit(record);
visitor.visit(m_record_queue);
}

// https://dom.spec.whatwg.org/#dom-mutationobserver-observe
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/NamedNodeMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ void NamedNodeMap::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_element);
for (auto& attribute : m_attributes)
visitor.visit(attribute);
visitor.visit(m_attributes);
}

// https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-indices%E2%91%A3
Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/Node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,7 @@ void Node::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_paintable);

if (m_registered_observer_list) {
for (auto& registered_observer : *m_registered_observer_list)
visitor.visit(registered_observer);
visitor.visit(*m_registered_observer_list);
}
}

Expand Down
3 changes: 1 addition & 2 deletions Userland/Libraries/LibWeb/DOM/StaticNodeList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ StaticNodeList::~StaticNodeList() = default;
void StaticNodeList::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
for (auto& node : m_static_nodes)
visitor.visit(node);
visitor.visit(m_static_nodes);
}

// https://dom.spec.whatwg.org/#dom-nodelist-length
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ void Request::visit_edges(JS::Cell::Visitor& visitor)
m_window.visit(
[&](JS::GCPtr<HTML::EnvironmentSettingsObject> const& value) { visitor.visit(value); },
[](auto const&) {});
for (auto const& pending_response : m_pending_responses)
visitor.visit(pending_response);
visitor.visit(m_pending_responses);
}

JS::NonnullGCPtr<Request> Request::create(JS::VM& vm)
Expand Down
Loading

0 comments on commit 97b9565

Please sign in to comment.