diff --git a/Libraries/LibJS/Script.h b/Libraries/LibJS/Script.h index 53bbb628a52..aabb896d31c 100644 --- a/Libraries/LibJS/Script.h +++ b/Libraries/LibJS/Script.h @@ -24,6 +24,14 @@ public: virtual ~HostDefined() = default; virtual void visit_host_defined_self(Cell::Visitor&) = 0; + + template + bool fast_is() const = delete; + + virtual bool is_script() const { return false; } + virtual bool is_classic_script() const { return false; } + virtual bool is_module_script() const { return false; } + virtual bool is_javascript_module_script() const { return false; } }; virtual ~Script() override; diff --git a/Libraries/LibWeb/HTML/Scripting/ClassicScript.h b/Libraries/LibWeb/HTML/Scripting/ClassicScript.h index 04909b19e9c..88dcb1b7fa6 100644 --- a/Libraries/LibWeb/HTML/Scripting/ClassicScript.h +++ b/Libraries/LibWeb/HTML/Scripting/ClassicScript.h @@ -40,6 +40,8 @@ public: private: ClassicScript(URL::URL base_url, ByteString filename, JS::Realm&); + virtual bool is_classic_script() const final { return true; } + virtual void visit_edges(Cell::Visitor&) override; GC::Ptr m_script_record; @@ -47,3 +49,6 @@ private: }; } + +template<> +inline bool JS::Script::HostDefined::fast_is() const { return is_classic_script(); } diff --git a/Libraries/LibWeb/HTML/Scripting/ModuleScript.h b/Libraries/LibWeb/HTML/Scripting/ModuleScript.h index 7a3fc9ff0f9..664b962790d 100644 --- a/Libraries/LibWeb/HTML/Scripting/ModuleScript.h +++ b/Libraries/LibWeb/HTML/Scripting/ModuleScript.h @@ -20,6 +20,9 @@ public: protected: ModuleScript(URL::URL base_url, ByteString filename, JS::Realm&); + +private: + virtual bool is_module_script() const final { return true; } }; class JavaScriptModuleScript final : public ModuleScript { @@ -45,6 +48,7 @@ protected: JavaScriptModuleScript(URL::URL base_url, ByteString filename, JS::Realm&); private: + virtual bool is_javascript_module_script() const final { return true; } virtual void visit_edges(JS::Cell::Visitor&) override; GC::Ptr m_record; @@ -56,3 +60,9 @@ private: }; } + +template<> +inline bool JS::Script::HostDefined::fast_is() const { return is_module_script(); } + +template<> +inline bool JS::Script::HostDefined::fast_is() const { return is_javascript_module_script(); } diff --git a/Libraries/LibWeb/HTML/Scripting/Script.h b/Libraries/LibWeb/HTML/Scripting/Script.h index 86e3eb5f1f2..4d33ec621dc 100644 --- a/Libraries/LibWeb/HTML/Scripting/Script.h +++ b/Libraries/LibWeb/HTML/Scripting/Script.h @@ -42,6 +42,7 @@ protected: virtual void visit_edges(Visitor&) override; private: + virtual bool is_script() const final { return true; } virtual void visit_host_defined_self(JS::Cell::Visitor&) override; Optional m_base_url; @@ -56,3 +57,6 @@ private: }; } + +template<> +inline bool JS::Script::HostDefined::fast_is() const { return is_script(); }