ソースを参照

LibJS: Pass prototype to Date constructor

Andreas Kling 5 年 前
コミット
0df4d2823a

+ 9 - 2
Libraries/LibJS/Runtime/Date.cpp

@@ -25,16 +25,23 @@
  */
 
 #include <LibCore/DateTime.h>
+#include <LibJS/Heap/Heap.h>
 #include <LibJS/Interpreter.h>
 #include <LibJS/Runtime/Date.h>
+#include <LibJS/Runtime/GlobalObject.h>
 
 namespace JS {
 
-Date::Date(Core::DateTime datetime, u16 milliseconds)
+Date* Date::create(GlobalObject& global_object, Core::DateTime datetime, u16 milliseconds)
+{
+    return global_object.heap().allocate<Date>(datetime, milliseconds, *global_object.interpreter().date_prototype());
+}
+
+Date::Date(Core::DateTime datetime, u16 milliseconds, Object& prototype)
     : m_datetime(datetime)
     , m_milliseconds(milliseconds)
 {
-    set_prototype(interpreter().date_prototype());
+    set_prototype(&prototype);
 }
 
 Date::~Date()

+ 3 - 1
Libraries/LibJS/Runtime/Date.h

@@ -31,7 +31,9 @@ namespace JS {
 
 class Date final : public Object {
 public:
-    Date(Core::DateTime datetime, u16 milliseconds);
+    static Date* create(GlobalObject&, Core::DateTime, u16 milliseconds);
+
+    Date(Core::DateTime datetime, u16 milliseconds, Object& prototype);
     virtual ~Date() override;
 
     Core::DateTime& datetime() { return m_datetime; }

+ 1 - 1
Libraries/LibJS/Runtime/DateConstructor.cpp

@@ -61,7 +61,7 @@ Value DateConstructor::construct(Interpreter& interpreter)
     gettimeofday(&tv, nullptr);
     auto datetime = Core::DateTime::now();
     auto milliseconds = static_cast<u16>(tv.tv_usec / 1000);
-    return interpreter.heap().allocate<Date>(datetime, milliseconds);
+    return Date::create(interpreter.global_object(), datetime, milliseconds);
 }
 
 Value DateConstructor::now(Interpreter&)