1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 23:28:11 +00:00

LibJS: Pass prototype to NumberObject constructor

This commit is contained in:
Andreas Kling 2020-04-17 18:55:53 +02:00
parent 2d7b495244
commit cf702a13b9
5 changed files with 15 additions and 7 deletions

View file

@ -69,7 +69,7 @@ Value NumberConstructor::construct(Interpreter& interpreter)
number = 0;
else
number = interpreter.argument(0).to_number().as_double();
return Value(interpreter.heap().allocate<NumberObject>(number));
return NumberObject::create(interpreter.global_object(), number);
}
Value NumberConstructor::is_safe_integer(Interpreter& interpreter)

View file

@ -26,16 +26,23 @@
#include <LibJS/Heap/Heap.h>
#include <LibJS/Interpreter.h>
#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/NumberObject.h>
#include <LibJS/Runtime/NumberPrototype.h>
#include <LibJS/Runtime/Value.h>
namespace JS {
NumberObject::NumberObject(double value)
NumberObject* NumberObject::create(GlobalObject& global_object, double value)
{
auto& interpreter = global_object.interpreter();
return interpreter.heap().allocate<NumberObject>(value, *interpreter.number_prototype());
}
NumberObject::NumberObject(double value, Object& prototype)
: m_value(value)
{
set_prototype(interpreter().number_prototype());
set_prototype(&prototype);
}
NumberObject::~NumberObject()

View file

@ -32,7 +32,9 @@ namespace JS {
class NumberObject : public Object {
public:
explicit NumberObject(double);
static NumberObject* create(GlobalObject&, double);
NumberObject(double, Object& prototype);
virtual ~NumberObject() override;
virtual Value value_of() const override { return Value(m_value); }

View file

@ -30,9 +30,8 @@
namespace JS {
NumberPrototype::NumberPrototype()
: NumberObject(0)
: NumberObject(0, *interpreter().object_prototype())
{
set_prototype(interpreter().object_prototype());
}
NumberPrototype::~NumberPrototype()

View file

@ -116,7 +116,7 @@ Object* Value::to_object(Heap& heap) const
return heap.allocate<StringObject>(m_value.as_string);
if (is_number())
return heap.allocate<NumberObject>(m_value.as_double);
return NumberObject::create(heap.interpreter().global_object(), m_value.as_double);
if (is_boolean())
return heap.allocate<BooleanObject>(m_value.as_bool);