#include #include namespace Web { static Vector s_base_list { "applet", "caption", "html", "table", "td", "th", "marquee", "object", "template" }; StackOfOpenElements::~StackOfOpenElements() { } bool StackOfOpenElements::has_in_scope_impl(const FlyString& tag_name, const Vector &list) const { for (ssize_t i = m_elements.size() - 1; i >= 0; --i) { auto& node = m_elements.at(i); if (node.tag_name() == tag_name) return true; if (list.contains_slow(node.tag_name())) return false; } ASSERT_NOT_REACHED(); } bool StackOfOpenElements::has_in_scope(const FlyString& tag_name) const { return has_in_scope_impl(tag_name, s_base_list); } bool StackOfOpenElements::has_in_button_scope(const FlyString& tag_name) const { auto list = s_base_list; list.append("button"); return has_in_scope_impl(tag_name, list); } }