JavascriptVariantDate.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #include "RuntimeLibraryPch.h"
  6. namespace Js
  7. {
  8. Var JavascriptVariantDate::GetTypeOfString(ScriptContext* requestContext)
  9. {
  10. return requestContext->GetLibrary()->GetVariantDateTypeDisplayString();
  11. }
  12. JavascriptString* JavascriptVariantDate::GetValueString(ScriptContext* scriptContext)
  13. {
  14. return DateImplementation::ConvertVariantDateToString(this->value, scriptContext);
  15. }
  16. BOOL JavascriptVariantDate::GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext)
  17. {
  18. BOOL ret;
  19. ENTER_PINNED_SCOPE(JavascriptString, resultString);
  20. resultString = DateImplementation::ConvertVariantDateToString(this->value, GetScriptContext());
  21. if (resultString != nullptr)
  22. {
  23. stringBuilder->Append(resultString->GetString(), resultString->GetLength());
  24. ret = TRUE;
  25. }
  26. else
  27. {
  28. ret = FALSE;
  29. }
  30. LEAVE_PINNED_SCOPE();
  31. return ret;
  32. }
  33. BOOL JavascriptVariantDate::GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext)
  34. {
  35. stringBuilder->AppendCppLiteral(_u("Date")); // For whatever reason in IE8 jscript, typeof returns "date"
  36. // while the debugger displays "Date" for the type
  37. return TRUE;
  38. }
  39. RecyclableObject * JavascriptVariantDate::CloneToScriptContext(ScriptContext* requestContext)
  40. {
  41. return requestContext->GetLibrary()->CreateVariantDate(value);
  42. }
  43. RecyclableObject* JavascriptVariantDate::ToObject(ScriptContext* requestContext)
  44. {
  45. // WOOB 1124298: Just return a new object when converting to object.
  46. return requestContext->GetLibrary()->CreateObject(true);
  47. }
  48. PropertyQueryFlags JavascriptVariantDate::GetPropertyQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext)
  49. {
  50. if (requestContext->GetThreadContext()->RecordImplicitException())
  51. {
  52. JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, requestContext->GetPropertyName(propertyId)->GetBuffer());
  53. }
  54. *value = nullptr;
  55. return PropertyQueryFlags::Property_Found;
  56. };
  57. PropertyQueryFlags JavascriptVariantDate::GetPropertyQuery(Js::Var originalInstance, Js::JavascriptString* propertyNameString, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext)
  58. {
  59. if (requestContext->GetThreadContext()->RecordImplicitException())
  60. {
  61. JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, propertyNameString);
  62. }
  63. *value = nullptr;
  64. return PropertyQueryFlags::Property_Found;
  65. };
  66. PropertyQueryFlags JavascriptVariantDate::GetPropertyReferenceQuery(Js::Var originalInstance, Js::PropertyId propertyId, Js::Var* value, PropertyValueInfo* info, Js::ScriptContext* requestContext)
  67. {
  68. if (requestContext->GetThreadContext()->RecordImplicitException())
  69. {
  70. JavascriptError::ThrowTypeError(requestContext, JSERR_Property_VarDate, requestContext->GetPropertyName(propertyId)->GetBuffer());
  71. }
  72. *value = nullptr;
  73. return PropertyQueryFlags::Property_Found;
  74. };
  75. BOOL JavascriptVariantDate::SetProperty(Js::PropertyId propertyId, Js::Var value, Js::PropertyOperationFlags flags, PropertyValueInfo* info)
  76. {
  77. ScriptContext* scriptContext = this->GetScriptContext();
  78. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer());
  79. };
  80. BOOL JavascriptVariantDate::SetProperty(Js::JavascriptString* propertyNameString, Js::Var value, Js::PropertyOperationFlags flags, PropertyValueInfo* info)
  81. {
  82. ScriptContext* scriptContext = this->GetScriptContext();
  83. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, propertyNameString->GetSz());
  84. };
  85. BOOL JavascriptVariantDate::InitProperty(Js::PropertyId propertyId, Js::Var value, PropertyOperationFlags flags, Js::PropertyValueInfo* info)
  86. {
  87. ScriptContext* scriptContext = this->GetScriptContext();
  88. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer());
  89. };
  90. BOOL JavascriptVariantDate::DeleteProperty(Js::PropertyId propertyId, Js::PropertyOperationFlags flags)
  91. {
  92. ScriptContext* scriptContext = this->GetScriptContext();
  93. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, scriptContext->GetPropertyName(propertyId)->GetBuffer());
  94. };
  95. BOOL JavascriptVariantDate::DeleteProperty(JavascriptString *propertyNameString, Js::PropertyOperationFlags flags)
  96. {
  97. ScriptContext* scriptContext = this->GetScriptContext();
  98. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, propertyNameString->GetString());
  99. };
  100. PropertyQueryFlags JavascriptVariantDate::GetItemReferenceQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext)
  101. {
  102. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz());
  103. };
  104. PropertyQueryFlags JavascriptVariantDate::GetItemQuery(Js::Var originalInstance, uint32 index, Js::Var* value, Js::ScriptContext * scriptContext)
  105. {
  106. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz());
  107. };
  108. BOOL JavascriptVariantDate::SetItem(uint32 index, Js::Var value, Js::PropertyOperationFlags flags)
  109. {
  110. ScriptContext* scriptContext = this->GetScriptContext();
  111. JavascriptError::ThrowTypeError(scriptContext, JSERR_Property_VarDate, JavascriptNumber::ToStringRadix10(index, scriptContext)->GetSz());
  112. };
  113. BOOL JavascriptVariantDate::ToPrimitive(JavascriptHint hint, Var* result, ScriptContext * requestContext)
  114. {
  115. if (hint == JavascriptHint::HintString)
  116. {
  117. JavascriptString* resultString = this->GetValueString(requestContext);
  118. if (resultString != nullptr)
  119. {
  120. (*result) = resultString;
  121. return TRUE;
  122. }
  123. Assert(false);
  124. }
  125. else if (hint == JavascriptHint::HintNumber)
  126. {
  127. *result = JavascriptNumber::ToVarNoCheck(DateImplementation::JsUtcTimeFromVarDate(value, requestContext), requestContext);
  128. return TRUE;
  129. }
  130. else
  131. {
  132. Assert(hint == JavascriptHint::None);
  133. *result = this;
  134. return TRUE;
  135. }
  136. return FALSE;
  137. }
  138. BOOL JavascriptVariantDate::Equals(Var other, BOOL *value, ScriptContext * requestContext)
  139. {
  140. // Calling .Equals on a VT_DATE variant at least gives the "[property name] is null or not An object error"
  141. *value = FALSE;
  142. return TRUE;
  143. }
  144. }