From df674023d67759b04bb83d43714dcf0857cd18ec Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 7 Oct 2021 12:05:13 +0200 Subject: [PATCH] LibJS: Add fast_is() for FunctionExpression and ClassExpression Spotted RTTI for these two above 1% in a profile. --- Userland/Libraries/LibJS/AST.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Userland/Libraries/LibJS/AST.h b/Userland/Libraries/LibJS/AST.h index acb8851fbe..f80035f926 100644 --- a/Userland/Libraries/LibJS/AST.h +++ b/Userland/Libraries/LibJS/AST.h @@ -63,6 +63,8 @@ public: virtual bool is_new_expression() const { return false; } virtual bool is_member_expression() const { return false; } virtual bool is_super_expression() const { return false; } + virtual bool is_function_expression() const { return false; } + virtual bool is_class_expression() const { return false; } virtual bool is_expression_statement() const { return false; } virtual bool is_identifier() const { return false; } virtual bool is_scope_node() const { return false; } @@ -521,6 +523,9 @@ public: bool has_name() const { return !name().is_empty(); } Value instantiate_ordinary_function_expression(Interpreter& interpreter, GlobalObject& global_object, FlyString given_name) const; + +private: + virtual bool is_function_expression() const override { return true; } }; class ErrorExpression final : public Expression { @@ -1079,6 +1084,8 @@ public: ThrowCompletionOr class_definition_evaluation(Interpreter& interpreter, GlobalObject& global_object, FlyString const& binding_name = {}, FlyString const& class_name = {}) const; private: + virtual bool is_class_expression() const override { return true; } + String m_name; RefPtr m_constructor; RefPtr m_super_class; @@ -1762,6 +1769,12 @@ inline bool ASTNode::fast_is() const { return is_member_expres template<> inline bool ASTNode::fast_is() const { return is_super_expression(); } +template<> +inline bool ASTNode::fast_is() const { return is_function_expression(); } + +template<> +inline bool ASTNode::fast_is() const { return is_class_expression(); } + template<> inline bool ASTNode::fast_is() const { return is_identifier(); }