From 75d5429d665e0e3a954652da72278159d581ccad Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 24 Dec 2023 14:41:33 +0100 Subject: [PATCH] LibWeb: Add fast_is for form, embed, image, and object elements These are used by Window::supported_property_names(), which can get very hot. --- Userland/Libraries/LibWeb/DOM/Node.h | 4 ++++ Userland/Libraries/LibWeb/HTML/HTMLEmbedElement.h | 6 ++++++ Userland/Libraries/LibWeb/HTML/HTMLFormElement.h | 7 +++++++ Userland/Libraries/LibWeb/HTML/HTMLImageElement.h | 7 +++++++ Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h | 7 +++++++ 5 files changed, 31 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index 74402a1ec6..b83ce38bb9 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -103,6 +103,10 @@ public: virtual bool is_html_br_element() const { return false; } virtual bool is_html_button_element() const { return false; } virtual bool is_html_slot_element() const { return false; } + virtual bool is_html_embed_element() const { return false; } + virtual bool is_html_object_element() const { return false; } + virtual bool is_html_form_element() const { return false; } + virtual bool is_html_image_element() const { return false; } virtual bool is_navigable_container() const { return false; } virtual bool is_lazy_loading() const { return false; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLEmbedElement.h b/Userland/Libraries/LibWeb/HTML/HTMLEmbedElement.h index bc0f540629..83c569f4a7 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLEmbedElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLEmbedElement.h @@ -20,7 +20,13 @@ public: private: HTMLEmbedElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_embed_element() const override { return true; } virtual void initialize(JS::Realm&) override; }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_embed_element(); } +} diff --git a/Userland/Libraries/LibWeb/HTML/HTMLFormElement.h b/Userland/Libraries/LibWeb/HTML/HTMLFormElement.h index 24294ccd8c..94988bfa69 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLFormElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLFormElement.h @@ -90,6 +90,8 @@ public: private: HTMLFormElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_form_element() const override { return true; } + virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; @@ -122,3 +124,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_form_element(); } +} diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h index 8e5a1f117a..5a3ff398fa 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h @@ -96,6 +96,8 @@ public: private: HTMLImageElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_image_element() const override { return true; } + virtual void initialize(JS::Realm&) override; virtual void finalize() override; @@ -137,3 +139,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_image_element(); } +} diff --git a/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h b/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h index 252ccb04f6..b82cf4d9db 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLObjectElement.h @@ -51,6 +51,8 @@ public: private: HTMLObjectElement(DOM::Document&, DOM::QualifiedName); + virtual bool is_html_object_element() const override { return true; } + virtual void initialize(JS::Realm&) override; virtual JS::GCPtr create_layout_node(NonnullRefPtr) override; @@ -87,3 +89,8 @@ private: }; } + +namespace Web::DOM { +template<> +inline bool Node::fast_is() const { return is_html_object_element(); } +}