/src/serenity/Userland/Libraries/LibWeb/TreeNode.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <AK/Assertions.h> |
10 | | #include <AK/TypeCasts.h> |
11 | | #include <LibJS/Heap/Cell.h> |
12 | | #include <LibJS/Heap/GCPtr.h> |
13 | | #include <LibWeb/Forward.h> |
14 | | #include <LibWeb/TraversalDecision.h> |
15 | | |
16 | | namespace Web { |
17 | | |
18 | | template<typename T> |
19 | | class TreeNode { |
20 | | public: |
21 | 0 | T* parent() { return m_parent; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::parent() Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::parent() |
22 | 0 | T const* parent() const { return m_parent; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::parent() const Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::parent() const |
23 | | |
24 | 0 | bool has_children() const { return m_first_child; } |
25 | 0 | T* next_sibling() { return m_next_sibling; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::next_sibling() Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::next_sibling() |
26 | 0 | T* previous_sibling() { return m_previous_sibling; } |
27 | 0 | T* first_child() { return m_first_child; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::first_child() Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::first_child() |
28 | 0 | T* last_child() { return m_last_child; } |
29 | 0 | T const* next_sibling() const { return m_next_sibling; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::next_sibling() const Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::next_sibling() const |
30 | 0 | T const* previous_sibling() const { return m_previous_sibling; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::previous_sibling() const Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::previous_sibling() const |
31 | 0 | T const* first_child() const { return m_first_child; }Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::first_child() const Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::first_child() const |
32 | 0 | T const* last_child() const { return m_last_child; } |
33 | | |
34 | | // https://dom.spec.whatwg.org/#concept-tree-index |
35 | | size_t index() const |
36 | | { |
37 | | // The index of an object is its number of preceding siblings, or 0 if it has none. |
38 | | size_t index = 0; |
39 | | for (auto* node = previous_sibling(); node; node = node->previous_sibling()) |
40 | | ++index; |
41 | | return index; |
42 | | } |
43 | | |
44 | | bool is_ancestor_of(TreeNode const&) const; |
45 | | bool is_inclusive_ancestor_of(TreeNode const&) const; |
46 | | |
47 | | void append_child(JS::NonnullGCPtr<T> node); |
48 | | void prepend_child(JS::NonnullGCPtr<T> node); |
49 | | void insert_before(JS::NonnullGCPtr<T> node, JS::GCPtr<T> child); |
50 | | void remove_child(JS::NonnullGCPtr<T> node); |
51 | | |
52 | | T* next_in_pre_order() |
53 | | { |
54 | | if (first_child()) |
55 | | return first_child(); |
56 | | T* node; |
57 | | if (!(node = next_sibling())) { |
58 | | node = parent(); |
59 | | while (node && !node->next_sibling()) |
60 | | node = node->parent(); |
61 | | if (node) |
62 | | node = node->next_sibling(); |
63 | | } |
64 | | return node; |
65 | | } |
66 | | |
67 | | T* next_in_pre_order(T const* stay_within) |
68 | | { |
69 | | if (first_child()) |
70 | | return first_child(); |
71 | | |
72 | | T* node = static_cast<T*>(this); |
73 | | T* next = nullptr; |
74 | | while (!(next = node->next_sibling())) { |
75 | | node = node->parent(); |
76 | | if (!node || node == stay_within) |
77 | | return nullptr; |
78 | | } |
79 | | return next; |
80 | | } |
81 | | |
82 | | T const* next_in_pre_order() const |
83 | | { |
84 | | return const_cast<TreeNode*>(this)->next_in_pre_order(); |
85 | | } |
86 | | |
87 | | T const* next_in_pre_order(T const* stay_within) const |
88 | | { |
89 | | return const_cast<TreeNode*>(this)->next_in_pre_order(stay_within); |
90 | | } |
91 | | |
92 | | T* previous_in_pre_order() |
93 | | { |
94 | | if (auto* node = previous_sibling()) { |
95 | | while (node->last_child()) |
96 | | node = node->last_child(); |
97 | | |
98 | | return node; |
99 | | } |
100 | | |
101 | | return parent(); |
102 | | } |
103 | | |
104 | | T const* previous_in_pre_order() const |
105 | | { |
106 | | return const_cast<TreeNode*>(this)->previous_in_pre_order(); |
107 | | } |
108 | | |
109 | | template<typename Callback> |
110 | | TraversalDecision for_each_in_inclusive_subtree(Callback callback) const |
111 | | { |
112 | | if (auto decision = callback(static_cast<T const&>(*this)); decision != TraversalDecision::Continue) |
113 | | return decision; |
114 | | for (auto* child = first_child(); child; child = child->next_sibling()) { |
115 | | if (child->for_each_in_inclusive_subtree(callback) == IterationDecision::Break) |
116 | | return TraversalDecision::Break; |
117 | | } |
118 | | return TraversalDecision::Continue; |
119 | | } |
120 | | |
121 | | template<typename Callback> |
122 | | TraversalDecision for_each_in_inclusive_subtree(Callback callback) |
123 | 0 | { |
124 | 0 | if (auto decision = callback(static_cast<T&>(*this)); decision != TraversalDecision::Continue) |
125 | 0 | return decision; |
126 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
127 | 0 | if (child->for_each_in_inclusive_subtree(callback) == TraversalDecision::Break) |
128 | 0 | return TraversalDecision::Break; |
129 | 0 | } |
130 | 0 | return TraversalDecision::Continue; |
131 | 0 | } Unexecuted instantiation: FormattingContext.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree<Web::Layout::FormattingContext::can_skip_is_anonymous_text_run(Web::Layout::Box&)::$_0>(Web::Layout::FormattingContext::can_skip_is_anonymous_text_run(Web::Layout::Box&)::$_0) Unexecuted instantiation: Viewport.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree<Web::Layout::Viewport::update_text_blocks()::$_0>(Web::Layout::Viewport::update_text_blocks()::$_0) Unexecuted instantiation: LayoutState.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree<Web::Layout::LayoutState::commit(Web::Layout::Box&)::$_1>(Web::Layout::LayoutState::commit(Web::Layout::Box&)::$_1) |
132 | | |
133 | | template<typename U, typename Callback> |
134 | | TraversalDecision for_each_in_inclusive_subtree_of_type(Callback callback) |
135 | 0 | { |
136 | 0 | if (is<U>(static_cast<T const&>(*this))) { |
137 | 0 | if (auto decision = callback(static_cast<U&>(*this)); decision != TraversalDecision::Continue) |
138 | 0 | return decision; |
139 | 0 | } |
140 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
141 | 0 | if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == TraversalDecision::Break) |
142 | 0 | return TraversalDecision::Break; |
143 | 0 | } |
144 | 0 | return TraversalDecision::Continue; |
145 | 0 | } Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)6, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)6, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)5, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)5, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_inside_display<(Web::CSS::DisplayInside)2, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_0>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_0)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_inside_display<(Web::CSS::DisplayInside)2, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_0>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_0)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)0, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_1>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_1)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)0, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_1>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_1)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)1, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_2>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_2)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)1, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_2>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_2)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)2, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_3>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_3)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)2, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_3>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_3)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)3, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_4>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_4)::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::for_each_in_tree_with_internal_display<(Web::CSS::DisplayInternal)3, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_4>(Web::Layout::NodeWithStyle&, Web::Layout::TreeBuilder::generate_missing_child_wrappers(Web::Layout::NodeWithStyle&)::$_4)::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::TreeBuilder::generate_missing_parents(Web::Layout::NodeWithStyle&)::$_0>(Web::Layout::TreeBuilder::generate_missing_parents(Web::Layout::NodeWithStyle&)::$_0) |
146 | | |
147 | | template<typename U, typename Callback> |
148 | | TraversalDecision for_each_in_inclusive_subtree_of_type(Callback callback) const |
149 | 0 | { |
150 | 0 | if (is<U>(static_cast<T const&>(*this))) { |
151 | 0 | if (auto decision = callback(static_cast<U const&>(*this)); decision != TraversalDecision::Continue) |
152 | 0 | return decision; |
153 | 0 | } |
154 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
155 | 0 | if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == TraversalDecision::Break) |
156 | 0 | return TraversalDecision::Break; |
157 | 0 | } |
158 | 0 | return TraversalDecision::Continue; |
159 | 0 | } Unexecuted instantiation: FormattingContext.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_table_box_width_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::FormattingContext::compute_table_box_width_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0) const Unexecuted instantiation: FormattingContext.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_table_box_height_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::FormattingContext::compute_table_box_height_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0) const Unexecuted instantiation: Label.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::Label, Web::Layout::Label::label_for_control_node(Web::Layout::LabelableNode const&)::$_0>(Web::Layout::Label::label_for_control_node(Web::Layout::LabelableNode const&)::$_0) const Unexecuted instantiation: TreeBuilder.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_inclusive_subtree_of_type<Web::Layout::TextNode, Web::Layout::is_ignorable_whitespace(Web::Layout::Node const&)::$_0>(Web::Layout::is_ignorable_whitespace(Web::Layout::Node const&)::$_0) const |
160 | | |
161 | | template<typename Callback> |
162 | | TraversalDecision for_each_in_subtree(Callback callback) const |
163 | | { |
164 | | for (auto* child = first_child(); child; child = child->next_sibling()) { |
165 | | if (child->for_each_in_inclusive_subtree(callback) == TraversalDecision::Break) |
166 | | return TraversalDecision::Break; |
167 | | } |
168 | | return TraversalDecision::Continue; |
169 | | } |
170 | | |
171 | | template<typename Callback> |
172 | | TraversalDecision for_each_in_subtree(Callback callback) |
173 | 0 | { |
174 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
175 | 0 | if (child->for_each_in_inclusive_subtree(callback) == TraversalDecision::Break) |
176 | 0 | return TraversalDecision::Break; |
177 | 0 | } |
178 | 0 | return TraversalDecision::Continue; |
179 | 0 | } |
180 | | |
181 | | template<typename U, typename Callback> |
182 | | TraversalDecision for_each_in_subtree_of_type(Callback callback) |
183 | | { |
184 | | for (auto* child = first_child(); child; child = child->next_sibling()) { |
185 | | if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == TraversalDecision::Break) |
186 | | return TraversalDecision::Break; |
187 | | } |
188 | | return TraversalDecision::Continue; |
189 | | } |
190 | | |
191 | | template<typename U, typename Callback> |
192 | | TraversalDecision for_each_in_subtree_of_type(Callback callback) const |
193 | 0 | { |
194 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
195 | 0 | if (child->template for_each_in_inclusive_subtree_of_type<U>(callback) == TraversalDecision::Break) |
196 | 0 | return TraversalDecision::Break; |
197 | 0 | } |
198 | 0 | return TraversalDecision::Continue; |
199 | 0 | } Unexecuted instantiation: FormattingContext.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_subtree_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_table_box_width_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::FormattingContext::compute_table_box_width_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0) const Unexecuted instantiation: FormattingContext.cpp:Web::TraversalDecision Web::TreeNode<Web::Layout::Node>::for_each_in_subtree_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_table_box_height_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::FormattingContext::compute_table_box_height_inside_table_wrapper(Web::Layout::Box const&, Web::Layout::AvailableSpace const&)::$_0) const |
200 | | |
201 | | template<typename Callback> |
202 | | void for_each_child(Callback callback) const |
203 | 0 | { |
204 | 0 | return const_cast<TreeNode*>(this)->for_each_child(move(callback)); |
205 | 0 | } Unexecuted instantiation: Dump.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::dump_tree(AK::StringBuilder&, Web::Layout::Node const&, bool, bool, bool)::$_3>(Web::dump_tree(AK::StringBuilder&, Web::Layout::Node const&, bool, bool, bool)::$_3) const Unexecuted instantiation: LayoutState.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_1>(Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_1) const Unexecuted instantiation: InlinePaintable.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child<Web::Painting::InlinePaintable::hit_test(Gfx::Point<Web::CSSPixels>, Web::Painting::HitTestType, AK::Function<Web::TraversalDecision (Web::Painting::HitTestResult)> const&) const::$_1>(Web::Painting::InlinePaintable::hit_test(Gfx::Point<Web::CSSPixels>, Web::Painting::HitTestType, AK::Function<Web::TraversalDecision (Web::Painting::HitTestResult)> const&) const::$_1) const Unexecuted instantiation: StackingContext.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child<Web::Painting::StackingContext::paint_descendants(Web::PaintContext&, Web::Painting::Paintable const&, Web::Painting::StackingContext::StackingContextPaintPhase)::$_0>(Web::Painting::StackingContext::paint_descendants(Web::PaintContext&, Web::Painting::Paintable const&, Web::Painting::StackingContext::StackingContextPaintPhase)::$_0) const |
206 | | |
207 | | template<typename Callback> |
208 | | void for_each_child(Callback callback) |
209 | 0 | { |
210 | 0 | for (auto* node = first_child(); node; node = node->next_sibling()) { |
211 | 0 | if (callback(*node) == IterationDecision::Break) |
212 | 0 | return; |
213 | 0 | } |
214 | 0 | } Unexecuted instantiation: Dump.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::dump_tree(AK::StringBuilder&, Web::Layout::Node const&, bool, bool, bool)::$_3>(Web::dump_tree(AK::StringBuilder&, Web::Layout::Node const&, bool, bool, bool)::$_3) Unexecuted instantiation: LayoutState.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_1>(Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_1) Unexecuted instantiation: TreeBuilder.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0::operator()(Web::Layout::Box&) const::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_0::operator()(Web::Layout::Box&) const::{lambda(auto:1&)#1})Unexecuted instantiation: TreeBuilder.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child<Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1::operator()(Web::Layout::Box&) const::{lambda(auto:1&)#1}>(Web::Layout::TreeBuilder::remove_irrelevant_boxes(Web::Layout::NodeWithStyle&)::$_1::operator()(Web::Layout::Box&) const::{lambda(auto:1&)#1})Unexecuted instantiation: InlinePaintable.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child<Web::Painting::InlinePaintable::hit_test(Gfx::Point<Web::CSSPixels>, Web::Painting::HitTestType, AK::Function<Web::TraversalDecision (Web::Painting::HitTestResult)> const&) const::$_1>(Web::Painting::InlinePaintable::hit_test(Gfx::Point<Web::CSSPixels>, Web::Painting::HitTestType, AK::Function<Web::TraversalDecision (Web::Painting::HitTestResult)> const&) const::$_1) Unexecuted instantiation: StackingContext.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child<Web::Painting::StackingContext::paint_descendants(Web::PaintContext&, Web::Painting::Paintable const&, Web::Painting::StackingContext::StackingContextPaintPhase)::$_0>(Web::Painting::StackingContext::paint_descendants(Web::PaintContext&, Web::Painting::Paintable const&, Web::Painting::StackingContext::StackingContextPaintPhase)::$_0) |
215 | | |
216 | | template<typename U, typename Callback> |
217 | | void for_each_child_of_type(Callback callback) |
218 | 0 | { |
219 | 0 | for (auto* node = first_child(); node; node = node->next_sibling()) { |
220 | 0 | if (is<U>(node)) { |
221 | 0 | if (callback(verify_cast<U>(*node)) == IterationDecision::Break) |
222 | 0 | return; |
223 | 0 | } |
224 | 0 | } |
225 | 0 | } Unexecuted instantiation: BlockFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::BlockFormattingContext::layout_block_level_children(Web::Layout::BlockContainer const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::BlockFormattingContext::layout_block_level_children(Web::Layout::BlockContainer const&, Web::Layout::AvailableSpace const&)::$_0) Unexecuted instantiation: BlockFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::BlockFormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0>(Web::Layout::BlockFormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0) Unexecuted instantiation: FormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0>(Web::Layout::FormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0) Unexecuted instantiation: FormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_auto_height_for_block_formatting_context_root(Web::Layout::Box const&) const::$_0>(Web::Layout::FormattingContext::compute_auto_height_for_block_formatting_context_root(Web::Layout::Box const&) const::$_0) Unexecuted instantiation: FlexFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FlexFormattingContext::parent_context_did_dimension_child_root_box()::$_0>(Web::Layout::FlexFormattingContext::parent_context_did_dimension_child_root_box()::$_0) Unexecuted instantiation: FlexFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FlexFormattingContext::generate_anonymous_flex_items()::$_0>(Web::Layout::FlexFormattingContext::generate_anonymous_flex_items()::$_0) Unexecuted instantiation: GridFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::GridFormattingContext::place_grid_items()::$_0>(Web::Layout::GridFormattingContext::place_grid_items()::$_0) Unexecuted instantiation: GridFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::GridFormattingContext::parent_context_did_dimension_child_root_box()::$_0>(Web::Layout::GridFormattingContext::parent_context_did_dimension_child_root_box()::$_0) Unexecuted instantiation: LayoutState.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_0>(Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_0) Unexecuted instantiation: Node.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::NodeWithStyle, Web::Layout::NodeWithStyle::propagate_style_to_anonymous_wrappers()::$_0>(Web::Layout::NodeWithStyle::propagate_style_to_anonymous_wrappers()::$_0) Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::SVGFormattingContext::run(Web::Layout::AvailableSpace const&)::$_2>(Web::Layout::SVGFormattingContext::run(Web::Layout::AvailableSpace const&)::$_2) Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::SVGMaskBox, Web::Layout::SVGFormattingContext::layout_svg_element(Web::Layout::Box const&)::$_0>(Web::Layout::SVGFormattingContext::layout_svg_element(Web::Layout::Box const&)::$_0) Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::SVGGraphicsBox, Web::Layout::SVGFormattingContext::layout_path_like_element(Web::Layout::SVGGraphicsBox const&)::$_0>(Web::Layout::SVGFormattingContext::layout_path_like_element(Web::Layout::SVGGraphicsBox const&)::$_0) Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::SVGFormattingContext::layout_container_element(Web::Layout::SVGBox const&)::$_0>(Web::Layout::SVGFormattingContext::layout_container_element(Web::Layout::SVGBox const&)::$_0) Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4)::{lambda(Web::Layout::Box const&)#1})Unexecuted instantiation: TreeBuilder.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0>(Web::Layout::Box&, bool (*)(Web::Layout::Box const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0)::{lambda(Web::Layout::Box&)#1}>(Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0>(Web::Layout::Box&, bool (*)(Web::Layout::Box const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0)::{lambda(Web::Layout::Box&)#1})Unexecuted instantiation: TreeBuilder.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0::operator()<Web::Layout::Box>(Web::Layout::Box&) const::{lambda(auto:1&)#1}>(Web::Layout::Box&, bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0::operator()<Web::Layout::Box>(Web::Layout::Box&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box&)#1}>(Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0::operator()<Web::Layout::Box>(Web::Layout::Box&) const::{lambda(auto:1&)#1}>(Web::Layout::Box&, bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_0::operator()<Web::Layout::Box>(Web::Layout::Box&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box&)#1})Unexecuted instantiation: TreeBuilder.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_1>(Web::Layout::Box&, bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_1)::{lambda(Web::Layout::Box&)#1}>(Web::Layout::for_each_child_box_matching<bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_1>(Web::Layout::Box&, bool (*)(Web::Layout::Node const&), Web::Layout::TreeBuilder::missing_cells_fixup(AK::Vector<JS::Handle<Web::Layout::Box>, 0ul> const&)::$_1)::{lambda(Web::Layout::Box&)#1})Unexecuted instantiation: TableBordersPainting.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child_of_type<Web::Painting::PaintableBox, Web::Painting::collect_cell_boxes(AK::Vector<Web::Painting::PaintableBox const&, 0ul>&, Web::Painting::PaintableBox const&)::$_0>(Web::Painting::collect_cell_boxes(AK::Vector<Web::Painting::PaintableBox const&, 0ul>&, Web::Painting::PaintableBox const&)::$_0) |
226 | | |
227 | | template<typename U, typename Callback> |
228 | | void for_each_child_of_type(Callback callback) const |
229 | 0 | { |
230 | 0 | return const_cast<TreeNode*>(this)->template for_each_child_of_type<U>(move(callback)); |
231 | 0 | } Unexecuted instantiation: BlockFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::BlockFormattingContext::layout_block_level_children(Web::Layout::BlockContainer const&, Web::Layout::AvailableSpace const&)::$_0>(Web::Layout::BlockFormattingContext::layout_block_level_children(Web::Layout::BlockContainer const&, Web::Layout::AvailableSpace const&)::$_0) const Unexecuted instantiation: BlockFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::BlockFormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0>(Web::Layout::BlockFormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0) const Unexecuted instantiation: FormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0>(Web::Layout::FormattingContext::greatest_child_width(Web::Layout::Box const&) const::$_0) const Unexecuted instantiation: FormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FormattingContext::compute_auto_height_for_block_formatting_context_root(Web::Layout::Box const&) const::$_0>(Web::Layout::FormattingContext::compute_auto_height_for_block_formatting_context_root(Web::Layout::Box const&) const::$_0) const Unexecuted instantiation: FlexFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FlexFormattingContext::parent_context_did_dimension_child_root_box()::$_0>(Web::Layout::FlexFormattingContext::parent_context_did_dimension_child_root_box()::$_0) const Unexecuted instantiation: FlexFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::FlexFormattingContext::generate_anonymous_flex_items()::$_0>(Web::Layout::FlexFormattingContext::generate_anonymous_flex_items()::$_0) const Unexecuted instantiation: GridFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::GridFormattingContext::place_grid_items()::$_0>(Web::Layout::GridFormattingContext::place_grid_items()::$_0) const Unexecuted instantiation: GridFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::GridFormattingContext::parent_context_did_dimension_child_root_box()::$_0>(Web::Layout::GridFormattingContext::parent_context_did_dimension_child_root_box()::$_0) const Unexecuted instantiation: LayoutState.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_0>(Web::Layout::measure_scrollable_overflow(Web::Layout::Box const&)::$_0) const Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::SVGFormattingContext::run(Web::Layout::AvailableSpace const&)::$_2>(Web::Layout::SVGFormattingContext::run(Web::Layout::AvailableSpace const&)::$_2) const Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::SVGMaskBox, Web::Layout::SVGFormattingContext::layout_svg_element(Web::Layout::Box const&)::$_0>(Web::Layout::SVGFormattingContext::layout_svg_element(Web::Layout::Box const&)::$_0) const Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::SVGGraphicsBox, Web::Layout::SVGFormattingContext::layout_path_like_element(Web::Layout::SVGGraphicsBox const&)::$_0>(Web::Layout::SVGFormattingContext::layout_path_like_element(Web::Layout::SVGGraphicsBox const&)::$_0) const Unexecuted instantiation: SVGFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::SVGFormattingContext::layout_container_element(Web::Layout::SVGBox const&)::$_0>(Web::Layout::SVGFormattingContext::layout_container_element(Web::Layout::SVGBox const&)::$_0) const Unexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_constrainedness()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::compute_outer_content_sizes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::position_row_boxes()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::BorderConflictFinder::collect_conflicting_row_group_elements()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#2})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableFormattingContext.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableFormattingContext::initialize_intrinsic_percentages_from_rows_or_columns<Web::Layout::TableFormattingContext::Column>()::$_0::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_2)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1}>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_3::operator()<Web::Layout::Box const>(Web::Layout::Box const&) const::{lambda(auto:1&)#1})::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableGrid.cpp:void Web::TreeNode<Web::Layout::Node>::for_each_child_of_type<Web::Layout::Box, Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4)::{lambda(Web::Layout::Box const&)#1}>(Web::Layout::TableGrid::for_each_child_box_matching<bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4>(Web::Layout::Box const&, bool (*)(Web::Layout::Box const&), Web::Layout::TableGrid::calculate_row_column_grid(Web::Layout::Box const&, AK::Vector<Web::Layout::TableGrid::Cell, 0ul>&, AK::Vector<Web::Layout::TableGrid::Row, 0ul>&)::$_4)::{lambda(Web::Layout::Box const&)#1}) constUnexecuted instantiation: TableBordersPainting.cpp:void Web::TreeNode<Web::Painting::Paintable>::for_each_child_of_type<Web::Painting::PaintableBox, Web::Painting::collect_cell_boxes(AK::Vector<Web::Painting::PaintableBox const&, 0ul>&, Web::Painting::PaintableBox const&)::$_0>(Web::Painting::collect_cell_boxes(AK::Vector<Web::Painting::PaintableBox const&, 0ul>&, Web::Painting::PaintableBox const&)::$_0) const |
232 | | |
233 | | template<typename U> |
234 | | U const* next_sibling_of_type() const |
235 | | { |
236 | | return const_cast<TreeNode*>(this)->template next_sibling_of_type<U>(); |
237 | | } |
238 | | |
239 | | template<typename U> |
240 | | inline U* next_sibling_of_type() |
241 | | { |
242 | | for (auto* sibling = next_sibling(); sibling; sibling = sibling->next_sibling()) { |
243 | | if (is<U>(*sibling)) |
244 | | return &verify_cast<U>(*sibling); |
245 | | } |
246 | | return nullptr; |
247 | | } |
248 | | |
249 | | template<typename U> |
250 | | U const* previous_sibling_of_type() const |
251 | 0 | { |
252 | 0 | return const_cast<TreeNode*>(this)->template previous_sibling_of_type<U>(); |
253 | 0 | } |
254 | | |
255 | | template<typename U> |
256 | | U* previous_sibling_of_type() |
257 | 0 | { |
258 | 0 | for (auto* sibling = previous_sibling(); sibling; sibling = sibling->previous_sibling()) { |
259 | 0 | if (is<U>(*sibling)) |
260 | 0 | return &verify_cast<U>(*sibling); |
261 | 0 | } |
262 | 0 | return nullptr; |
263 | 0 | } |
264 | | |
265 | | template<typename U> |
266 | | U const* first_child_of_type() const |
267 | 0 | { |
268 | 0 | return const_cast<TreeNode*>(this)->template first_child_of_type<U>(); |
269 | 0 | } Unexecuted instantiation: Web::Layout::TextNode const* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::TextNode>() const Unexecuted instantiation: Web::Layout::SVGMaskBox const* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::SVGMaskBox>() const Unexecuted instantiation: Web::Layout::SVGClipBox const* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::SVGClipBox>() const |
270 | | |
271 | | template<typename U> |
272 | | U const* last_child_of_type() const |
273 | 0 | { |
274 | 0 | return const_cast<TreeNode*>(this)->template last_child_of_type<U>(); |
275 | 0 | } |
276 | | |
277 | | template<typename U> |
278 | | U* first_child_of_type() |
279 | 0 | { |
280 | 0 | for (auto* child = first_child(); child; child = child->next_sibling()) { |
281 | 0 | if (is<U>(*child)) |
282 | 0 | return &verify_cast<U>(*child); |
283 | 0 | } |
284 | 0 | return nullptr; |
285 | 0 | } Unexecuted instantiation: Web::Layout::BlockContainer* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::BlockContainer>() Unexecuted instantiation: Web::Layout::TextNode* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::TextNode>() Unexecuted instantiation: Web::Layout::SVGMaskBox* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::SVGMaskBox>() Unexecuted instantiation: Web::Layout::SVGClipBox* Web::TreeNode<Web::Layout::Node>::first_child_of_type<Web::Layout::SVGClipBox>() |
286 | | |
287 | | template<typename U> |
288 | | U* last_child_of_type() |
289 | 0 | { |
290 | 0 | for (auto* child = last_child(); child; child = child->previous_sibling()) { |
291 | 0 | if (is<U>(*child)) |
292 | 0 | return &verify_cast<U>(*child); |
293 | 0 | } |
294 | 0 | return nullptr; |
295 | 0 | } |
296 | | |
297 | | template<typename U> |
298 | | U const* first_ancestor_of_type() const |
299 | 0 | { |
300 | 0 | return const_cast<TreeNode*>(this)->template first_ancestor_of_type<U>(); |
301 | 0 | } Unexecuted instantiation: Web::Layout::Label const* Web::TreeNode<Web::Layout::Node>::first_ancestor_of_type<Web::Layout::Label>() const Unexecuted instantiation: Web::Layout::SVGSVGBox const* Web::TreeNode<Web::Layout::Node>::first_ancestor_of_type<Web::Layout::SVGSVGBox>() const |
302 | | |
303 | | template<typename U> |
304 | | U* first_ancestor_of_type() |
305 | 0 | { |
306 | 0 | for (auto* ancestor = parent(); ancestor; ancestor = ancestor->parent()) { |
307 | 0 | if (is<U>(*ancestor)) |
308 | 0 | return &verify_cast<U>(*ancestor); |
309 | 0 | } |
310 | 0 | return nullptr; |
311 | 0 | } Unexecuted instantiation: Web::Layout::Label* Web::TreeNode<Web::Layout::Node>::first_ancestor_of_type<Web::Layout::Label>() Unexecuted instantiation: Web::Painting::SVGSVGPaintable* Web::TreeNode<Web::Painting::Paintable>::first_ancestor_of_type<Web::Painting::SVGSVGPaintable>() Unexecuted instantiation: Web::Layout::SVGSVGBox* Web::TreeNode<Web::Layout::Node>::first_ancestor_of_type<Web::Layout::SVGSVGBox>() |
312 | | |
313 | | ~TreeNode() = default; |
314 | | |
315 | | protected: |
316 | 0 | TreeNode() = default; Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::TreeNode() Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::TreeNode() |
317 | | |
318 | | void visit_edges(JS::Cell::Visitor& visitor) |
319 | 0 | { |
320 | 0 | visitor.visit(m_parent); |
321 | 0 | visitor.visit(m_first_child); |
322 | 0 | visitor.visit(m_last_child); |
323 | 0 | visitor.visit(m_next_sibling); |
324 | 0 | visitor.visit(m_previous_sibling); |
325 | 0 | } Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::visit_edges(JS::Cell::Visitor&) Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::visit_edges(JS::Cell::Visitor&) |
326 | | |
327 | | private: |
328 | | T* m_parent { nullptr }; |
329 | | T* m_first_child { nullptr }; |
330 | | T* m_last_child { nullptr }; |
331 | | T* m_next_sibling { nullptr }; |
332 | | T* m_previous_sibling { nullptr }; |
333 | | }; |
334 | | |
335 | | template<typename T> |
336 | | inline void TreeNode<T>::remove_child(JS::NonnullGCPtr<T> node) |
337 | 0 | { |
338 | 0 | VERIFY(node->m_parent == this); |
339 | | |
340 | 0 | if (m_first_child == node) |
341 | 0 | m_first_child = node->m_next_sibling; |
342 | |
|
343 | 0 | if (m_last_child == node) |
344 | 0 | m_last_child = node->m_previous_sibling; |
345 | |
|
346 | 0 | if (node->m_next_sibling) |
347 | 0 | node->m_next_sibling->m_previous_sibling = node->m_previous_sibling; |
348 | |
|
349 | 0 | if (node->m_previous_sibling) |
350 | 0 | node->m_previous_sibling->m_next_sibling = node->m_next_sibling; |
351 | |
|
352 | 0 | node->m_next_sibling = nullptr; |
353 | 0 | node->m_previous_sibling = nullptr; |
354 | 0 | node->m_parent = nullptr; |
355 | 0 | } |
356 | | |
357 | | template<typename T> |
358 | | inline void TreeNode<T>::append_child(JS::NonnullGCPtr<T> node) |
359 | 0 | { |
360 | 0 | VERIFY(!node->m_parent); |
361 | | |
362 | 0 | if (m_last_child) |
363 | 0 | m_last_child->m_next_sibling = node.ptr(); |
364 | 0 | node->m_previous_sibling = m_last_child; |
365 | 0 | node->m_parent = static_cast<T*>(this); |
366 | 0 | m_last_child = node.ptr(); |
367 | 0 | if (!m_first_child) |
368 | 0 | m_first_child = m_last_child; |
369 | 0 | } Unexecuted instantiation: Web::TreeNode<Web::Painting::Paintable>::append_child(JS::NonnullGCPtr<Web::Painting::Paintable>) Unexecuted instantiation: Web::TreeNode<Web::Layout::Node>::append_child(JS::NonnullGCPtr<Web::Layout::Node>) |
370 | | |
371 | | template<typename T> |
372 | | inline void TreeNode<T>::insert_before(JS::NonnullGCPtr<T> node, JS::GCPtr<T> child) |
373 | 0 | { |
374 | 0 | if (!child) |
375 | 0 | return append_child(move(node)); |
376 | | |
377 | 0 | VERIFY(!node->m_parent); |
378 | 0 | VERIFY(child->parent() == this); |
379 | | |
380 | 0 | node->m_previous_sibling = child->m_previous_sibling; |
381 | 0 | node->m_next_sibling = child; |
382 | |
|
383 | 0 | if (child->m_previous_sibling) |
384 | 0 | child->m_previous_sibling->m_next_sibling = node; |
385 | |
|
386 | 0 | if (m_first_child == child) |
387 | 0 | m_first_child = node; |
388 | |
|
389 | 0 | child->m_previous_sibling = node; |
390 | |
|
391 | 0 | node->m_parent = static_cast<T*>(this); |
392 | 0 | } |
393 | | |
394 | | template<typename T> |
395 | | inline void TreeNode<T>::prepend_child(JS::NonnullGCPtr<T> node) |
396 | 0 | { |
397 | 0 | VERIFY(!node->m_parent); |
398 | | |
399 | 0 | if (m_first_child) |
400 | 0 | m_first_child->m_previous_sibling = node.ptr(); |
401 | 0 | node->m_next_sibling = m_first_child; |
402 | 0 | node->m_parent = static_cast<T*>(this); |
403 | 0 | m_first_child = node.ptr(); |
404 | 0 | if (!m_last_child) |
405 | 0 | m_last_child = m_first_child; |
406 | 0 | node->inserted_into(static_cast<T&>(*this)); |
407 | |
|
408 | 0 | static_cast<T*>(this)->children_changed(); |
409 | 0 | } |
410 | | |
411 | | template<typename T> |
412 | | inline bool TreeNode<T>::is_ancestor_of(TreeNode<T> const& other) const |
413 | | { |
414 | | for (auto* ancestor = other.parent(); ancestor; ancestor = ancestor->parent()) { |
415 | | if (ancestor == this) |
416 | | return true; |
417 | | } |
418 | | return false; |
419 | | } |
420 | | |
421 | | template<typename T> |
422 | | inline bool TreeNode<T>::is_inclusive_ancestor_of(TreeNode<T> const& other) const |
423 | | { |
424 | | return &other == this || is_ancestor_of(other); |
425 | | } |
426 | | |
427 | | } |