static void flattenAssignedNodes(Vector<Node*>& nodes, const HTMLSlotElement& slot) { auto* assignedNodes = slot.assignedNodes(); if (!assignedNodes) { for (Node* child = slot.firstChild(); child; child = child->nextSibling()) { if (is<HTMLSlotElement>(*child)) flattenAssignedNodes(nodes, downcast<HTMLSlotElement>(*child)); else if (is<Text>(*child) || is<Element>(*child)) nodes.append(child); } return; } for (Node* node : *assignedNodes) { if (is<HTMLSlotElement>(*node)) flattenAssignedNodes(nodes, downcast<HTMLSlotElement>(*node)); else nodes.append(node); } }