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(); }