From 2ad98fdf8081c42755e2d4c9ab407f336e292886 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 27 Jul 2022 16:04:31 +0200 Subject: [PATCH] LibWeb: Add fast_is() This avoids slow RTTI lookups in selector matching. --- Userland/Libraries/LibWeb/DOM/Node.h | 1 + Userland/Libraries/LibWeb/HTML/HTMLElement.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index 482f20055a..34fd59e63d 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -87,6 +87,7 @@ public: virtual bool is_editable() const; + virtual bool is_html_element() const { return false; } virtual bool is_html_html_element() const { return false; } virtual bool is_html_anchor_element() const { return false; } virtual bool is_html_base_element() const { return false; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLElement.h b/Userland/Libraries/LibWeb/HTML/HTMLElement.h index 694a3630bc..9baa00569a 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLElement.h @@ -53,6 +53,8 @@ protected: virtual void parse_attribute(FlyString const& name, String const& value) override; private: + virtual bool is_html_element() const final { return true; } + // ^HTML::GlobalEventHandlers virtual DOM::EventTarget& global_event_handlers_to_event_target(FlyString const&) override { return *this; } @@ -73,3 +75,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_element(); } +}