summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibJS
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2021-07-05 18:02:27 +0300
committerLinus Groh <mail@linusgroh.de>2021-07-05 17:26:31 +0100
commit557424a1415d134f2d9cac571ab459ad8b25d647 (patch)
tree43f92afcc7c339565446f08dcde90cd28fe30d02 /Userland/Libraries/LibJS
parentb2e6088bff209e8bbb838cc86233e7d3f24ed650 (diff)
downloadserenity-557424a1415d134f2d9cac571ab459ad8b25d647.zip
LibJS: Remove usage of define_native_property in OrdinaryFunctionObject
The length & name properties are supposed to be normal data properties.
Diffstat (limited to 'Userland/Libraries/LibJS')
-rw-r--r--Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp35
-rw-r--r--Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h5
2 files changed, 9 insertions, 31 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
index 02a5c06df2..0ed95fdf9d 100644
--- a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
+++ b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.cpp
@@ -24,18 +24,6 @@
namespace JS {
-static OrdinaryFunctionObject* typed_this(VM& vm, GlobalObject& global_object)
-{
- auto* this_object = vm.this_value(global_object).to_object(global_object);
- if (!this_object)
- return nullptr;
- if (!this_object->is_function()) {
- vm.throw_exception<TypeError>(global_object, ErrorType::NotAFunctionNoParam);
- return nullptr;
- }
- return static_cast<OrdinaryFunctionObject*>(this_object);
-}
-
OrdinaryFunctionObject* OrdinaryFunctionObject::create(GlobalObject& global_object, const FlyString& name, const Statement& body, Vector<FunctionNode::Parameter> parameters, i32 m_function_length, Environment* parent_scope, FunctionKind kind, bool is_strict, bool is_arrow_function)
{
Object* prototype = nullptr;
@@ -99,8 +87,8 @@ void OrdinaryFunctionObject::initialize(GlobalObject& global_object)
}
define_property(vm.names.prototype, prototype, Attribute::Writable);
}
- define_native_property(vm.names.length, length_getter, {}, Attribute::Configurable);
- define_native_property(vm.names.name, name_getter, {}, Attribute::Configurable);
+ define_property_or_throw(vm.names.length, { .value = Value(m_function_length), .writable = false, .enumerable = false, .configurable = true });
+ define_property_or_throw(vm.names.name, { .value = js_string(vm, m_name.is_null() ? "" : m_name), .writable = false, .enumerable = false, .configurable = true });
}
OrdinaryFunctionObject::~OrdinaryFunctionObject()
@@ -246,20 +234,13 @@ Value OrdinaryFunctionObject::construct(FunctionObject&)
return execute_function_body();
}
-JS_DEFINE_NATIVE_GETTER(OrdinaryFunctionObject::length_getter)
-{
- auto* function = typed_this(vm, global_object);
- if (!function)
- return {};
- return Value(static_cast<i32>(function->m_function_length));
-}
-
-JS_DEFINE_NATIVE_GETTER(OrdinaryFunctionObject::name_getter)
+void OrdinaryFunctionObject::set_name(const FlyString& name)
{
- auto* function = typed_this(vm, global_object);
- if (!function)
- return {};
- return js_string(vm, function->name().is_null() ? "" : function->name());
+ VERIFY(!name.is_null());
+ auto& vm = this->vm();
+ m_name = name;
+ auto success = define_property_or_throw(vm.names.name, { .value = js_string(vm, m_name), .writable = false, .enumerable = false, .configurable = true });
+ VERIFY(success);
}
}
diff --git a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
index 721c404c6e..b310d5697a 100644
--- a/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
+++ b/Userland/Libraries/LibJS/Runtime/OrdinaryFunctionObject.h
@@ -29,7 +29,7 @@ public:
virtual Value construct(FunctionObject& new_target) override;
virtual const FlyString& name() const override { return m_name; };
- void set_name(const FlyString& name) { m_name = name; };
+ void set_name(const FlyString& name);
void set_is_class_constructor() { m_is_class_constructor = true; };
@@ -49,9 +49,6 @@ private:
Value execute_function_body();
- JS_DECLARE_NATIVE_GETTER(length_getter);
- JS_DECLARE_NATIVE_GETTER(name_getter);
-
FlyString m_name;
NonnullRefPtr<Statement> m_body;
const Vector<FunctionNode::Parameter> m_parameters;