diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index 2414bfbf90..833536e460 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -52,9 +52,9 @@ static void update_function_name(Value& value, const FlyString& name) return; auto& object = value.as_object(); if (object.is_function()) { - auto& function = static_cast(object); - if (function.name().is_empty()) - function.set_name(name); + auto& function = static_cast(object); + if (function.is_script_function() && function.name().is_empty()) + static_cast(function).set_name(name); } else if (object.is_array()) { auto& array = static_cast(object); for (auto& entry : array.indexed_properties().values_unordered()) diff --git a/Libraries/LibJS/Runtime/Function.h b/Libraries/LibJS/Runtime/Function.h index 88fe2920c6..e5964b3578 100644 --- a/Libraries/LibJS/Runtime/Function.h +++ b/Libraries/LibJS/Runtime/Function.h @@ -42,6 +42,8 @@ public: virtual void visit_children(Visitor&) override; + virtual bool is_script_function() const { return false; } + BoundFunction* bind(Value bound_this_value, Vector arguments); Value bound_this() const diff --git a/Libraries/LibJS/Runtime/ScriptFunction.h b/Libraries/LibJS/Runtime/ScriptFunction.h index 04db16d601..1a605d0427 100644 --- a/Libraries/LibJS/Runtime/ScriptFunction.h +++ b/Libraries/LibJS/Runtime/ScriptFunction.h @@ -48,7 +48,7 @@ public: void set_name(const FlyString& name) { m_name = name; }; private: - virtual bool is_script_function() const final { return true; } + virtual bool is_script_function() const override { return true; } virtual const char* class_name() const override { return "ScriptFunction"; } virtual LexicalEnvironment* create_environment() override; virtual void visit_children(Visitor&) override;