JavascriptDate.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved.
  4. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  5. //-------------------------------------------------------------------------------------------------------
  6. #pragma once
  7. namespace Js
  8. {
  9. class JavascriptDate : public DynamicObject
  10. {
  11. DECLARE_RECYCLER_VERIFY_MARK_FRIEND()
  12. protected:
  13. Field(DateImplementation) m_date;
  14. DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptDate, DynamicObject, m_date);
  15. DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptDate);
  16. public:
  17. JavascriptDate(double value, DynamicType * type);
  18. JavascriptDate(DynamicType * type);
  19. double GetTime() { return m_date.GetMilliSeconds(); }
  20. class EntryInfo
  21. {
  22. public:
  23. static FunctionInfo NewInstance;
  24. static FunctionInfo GetDate;
  25. static FunctionInfo GetDay;
  26. static FunctionInfo GetFullYear;
  27. static FunctionInfo GetYear;
  28. static FunctionInfo GetHours;
  29. static FunctionInfo GetMilliseconds;
  30. static FunctionInfo GetMinutes;
  31. static FunctionInfo GetMonth;
  32. static FunctionInfo GetSeconds;
  33. static FunctionInfo GetTime;
  34. static FunctionInfo GetTimezoneOffset;
  35. static FunctionInfo GetUTCDate;
  36. static FunctionInfo GetUTCDay;
  37. static FunctionInfo GetUTCFullYear;
  38. static FunctionInfo GetUTCHours;
  39. static FunctionInfo GetUTCMilliseconds;
  40. static FunctionInfo GetUTCMinutes;
  41. static FunctionInfo GetUTCMonth;
  42. static FunctionInfo GetUTCSeconds;
  43. static FunctionInfo Now;
  44. static FunctionInfo Parse;
  45. static FunctionInfo SetDate;
  46. static FunctionInfo SetFullYear;
  47. static FunctionInfo SetYear;
  48. static FunctionInfo SetHours;
  49. static FunctionInfo SetMilliseconds;
  50. static FunctionInfo SetMinutes;
  51. static FunctionInfo SetMonth;
  52. static FunctionInfo SetSeconds;
  53. static FunctionInfo SetTime;
  54. static FunctionInfo SetUTCDate;
  55. static FunctionInfo SetUTCFullYear;
  56. static FunctionInfo SetUTCHours;
  57. static FunctionInfo SetUTCMilliseconds;
  58. static FunctionInfo SetUTCMinutes;
  59. static FunctionInfo SetUTCMonth;
  60. static FunctionInfo SetUTCSeconds;
  61. static FunctionInfo ToDateString;
  62. static FunctionInfo ToISOString;
  63. static FunctionInfo ToJSON;
  64. static FunctionInfo ToLocaleDateString;
  65. static FunctionInfo ToLocaleString;
  66. static FunctionInfo ToLocaleTimeString;
  67. static FunctionInfo ToString;
  68. static FunctionInfo ToTimeString;
  69. static FunctionInfo ToUTCString;
  70. static FunctionInfo ToGMTString;
  71. static FunctionInfo UTC;
  72. static FunctionInfo ValueOf;
  73. static FunctionInfo SymbolToPrimitive;
  74. };
  75. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  76. static Var EntryGetDate(RecyclableObject* function, CallInfo callInfo, ...);
  77. static Var EntryGetDay(RecyclableObject* function, CallInfo callInfo, ...);
  78. static Var EntryGetFullYear(RecyclableObject* function, CallInfo callInfo, ...);
  79. static Var EntryGetYear(RecyclableObject* function, CallInfo callInfo, ...);
  80. static Var EntryGetHours(RecyclableObject* function, CallInfo callInfo, ...);
  81. static Var EntryGetMilliseconds(RecyclableObject* function, CallInfo callInfo, ...);
  82. static Var EntryGetMinutes(RecyclableObject* function, CallInfo callInfo, ...);
  83. static Var EntryGetMonth(RecyclableObject* function, CallInfo callInfo, ...);
  84. static Var EntryGetSeconds(RecyclableObject* function, CallInfo callInfo, ...);
  85. static Var EntryGetTime(RecyclableObject* function, CallInfo callInfo, ...);
  86. static Var EntryGetTimezoneOffset(RecyclableObject* function, CallInfo callInfo, ...);
  87. static Var EntryGetUTCDate(RecyclableObject* function, CallInfo callInfo, ...);
  88. static Var EntryGetUTCDay(RecyclableObject* function, CallInfo callInfo, ...);
  89. static Var EntryGetUTCFullYear(RecyclableObject* function, CallInfo callInfo, ...);
  90. static Var EntryGetUTCHours(RecyclableObject* function, CallInfo callInfo, ...);
  91. static Var EntryGetUTCMilliseconds(RecyclableObject* function, CallInfo callInfo, ...);
  92. static Var EntryGetUTCMinutes(RecyclableObject* function, CallInfo callInfo, ...);
  93. static Var EntryGetUTCMonth(RecyclableObject* function, CallInfo callInfo, ...);
  94. static Var EntryGetUTCSeconds(RecyclableObject* function, CallInfo callInfo, ...);
  95. static Var EntryNow(RecyclableObject* function, CallInfo callInfo, ...);
  96. static Var EntryParse(RecyclableObject* function, CallInfo callInfo, ...);
  97. static Var EntrySetDate(RecyclableObject* function, CallInfo callInfo, ...);
  98. static Var EntrySetFullYear(RecyclableObject* function, CallInfo callInfo, ...);
  99. static Var EntrySetYear(RecyclableObject* function, CallInfo callInfo, ...);
  100. static Var EntrySetHours(RecyclableObject* function, CallInfo callInfo, ...);
  101. static Var EntrySetMilliseconds(RecyclableObject* function, CallInfo callInfo, ...);
  102. static Var EntrySetMinutes(RecyclableObject* function, CallInfo callInfo, ...);
  103. static Var EntrySetMonth(RecyclableObject* function, CallInfo callInfo, ...);
  104. static Var EntrySetSeconds(RecyclableObject* function, CallInfo callInfo, ...);
  105. static Var EntrySetTime(RecyclableObject* function, CallInfo callInfo, ...);
  106. static Var EntrySetUTCDate(RecyclableObject* function, CallInfo callInfo, ...);
  107. static Var EntrySetUTCFullYear(RecyclableObject* function, CallInfo callInfo, ...);
  108. static Var EntrySetUTCHours(RecyclableObject* function, CallInfo callInfo, ...);
  109. static Var EntrySetUTCMilliseconds(RecyclableObject* function, CallInfo callInfo, ...);
  110. static Var EntrySetUTCMinutes(RecyclableObject* function, CallInfo callInfo, ...);
  111. static Var EntrySetUTCMonth(RecyclableObject* function, CallInfo callInfo, ...);
  112. static Var EntrySetUTCSeconds(RecyclableObject* function, CallInfo callInfo, ...);
  113. static Var EntryToDateString(RecyclableObject* function, CallInfo callInfo, ...);
  114. static Var EntryToISOString(RecyclableObject* function, CallInfo callInfo, ...);
  115. static Var EntryToJSON(RecyclableObject* function, CallInfo callInfo, ...);
  116. static Var EntryToLocaleDateString(RecyclableObject* function, CallInfo callInfo, ...);
  117. static Var EntryToLocaleString(RecyclableObject* function, CallInfo callInfo, ...);
  118. static Var EntryToLocaleTimeString(RecyclableObject* function, CallInfo callInfo, ...);
  119. static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...);
  120. static Var EntryToTimeString(RecyclableObject* function, CallInfo callInfo, ...);
  121. static Var EntryToUTCString(RecyclableObject* function, CallInfo callInfo, ...);
  122. static Var EntryUTC(RecyclableObject* function, CallInfo callInfo, ...);
  123. static Var EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...);
  124. static Var EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...);
  125. static double JavascriptDate::TimeClip(Var x);
  126. static JavascriptString* ToLocaleString(JavascriptDate* date, ScriptContext* requestContext);
  127. static JavascriptString* ToString(JavascriptDate* date, ScriptContext* requestContext);
  128. virtual BOOL ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext) override;
  129. virtual BOOL GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  130. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  131. private:
  132. static Var GetDateData(JavascriptDate* date, DateImplementation::DateData dd, ScriptContext* scriptContext);
  133. static Var GetUTCDateData(JavascriptDate* date, DateImplementation::DateData dd, ScriptContext* scriptContext);
  134. static Var SetDateData(JavascriptDate* date, Arguments args, DateImplementation::DateData dd, ScriptContext* scriptContext);
  135. static Var SetUTCDateData(JavascriptDate* date, Arguments args, DateImplementation::DateData dd, ScriptContext* scriptContext);
  136. static double ParseHelper(ScriptContext *scriptContext, JavascriptString *str);
  137. static JavascriptDate* NewInstanceAsConstructor(Arguments args, ScriptContext* scriptContext, bool forceCurrentDate = false);
  138. static BOOL TryInvokeRemotely(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, Var * result);
  139. #if ENABLE_TTD
  140. public:
  141. virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override;
  142. virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override;
  143. #endif
  144. };
  145. template <> inline bool VarIsImpl<JavascriptDate>(RecyclableObject* obj)
  146. {
  147. return JavascriptOperators::GetTypeId(obj) == TypeIds_Date;
  148. }
  149. } // namespace Js