JITRecyclableObject.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. #pragma once
  6. class JITRecyclableObject
  7. {
  8. private:
  9. intptr_t remoteVTable;
  10. Js::TypeId * typeId;
  11. public:
  12. static bool Is(Js::Var var)
  13. {
  14. return !Js::TaggedNumber::Is(var);
  15. }
  16. Js::TypeId GetTypeId() const
  17. {
  18. return *typeId;
  19. }
  20. };
  21. class JITJavascriptString : JITRecyclableObject
  22. {
  23. private:
  24. const char16* m_pszValue;
  25. charcount_t m_charLength;
  26. public:
  27. const char16* GetString() const
  28. {
  29. return m_pszValue;
  30. }
  31. charcount_t GetLength() const
  32. {
  33. return m_charLength;
  34. }
  35. static bool Equals(Js::Var aLeft, Js::Var aRight)
  36. {
  37. return Js::JavascriptStringHelpers<JITJavascriptString>::Equals(aLeft, aRight);
  38. }
  39. static bool Is(Js::Var var)
  40. {
  41. if (!JITRecyclableObject::Is(var))
  42. {
  43. return false;
  44. }
  45. JITRecyclableObject * jitObj = reinterpret_cast<JITRecyclableObject*>(var);
  46. return jitObj->GetTypeId() == Js::TypeIds_String;
  47. }
  48. static JITJavascriptString * FromVar(Js::Var var)
  49. {
  50. Assert(offsetof(JITJavascriptString, m_pszValue) == Js::JavascriptString::GetOffsetOfpszValue());
  51. Assert(offsetof(JITJavascriptString, m_charLength) == Js::JavascriptString::GetOffsetOfcharLength());
  52. Assert(Is(var));
  53. return reinterpret_cast<JITJavascriptString*>(var);
  54. }
  55. };
  56. class JITJavascriptNumber : JITRecyclableObject
  57. {
  58. private:
  59. double value;
  60. };
  61. template <>
  62. struct DefaultComparer<JITJavascriptString*>
  63. {
  64. inline static bool Equals(JITJavascriptString * x, JITJavascriptString * y)
  65. {
  66. return Js::JavascriptStringHelpers<JITJavascriptString>::Equals(x, y);
  67. }
  68. inline static uint GetHashCode(JITJavascriptString * pStr)
  69. {
  70. return JsUtil::CharacterBuffer<char16>::StaticGetHashCode(pStr->GetString(), pStr->GetLength());
  71. }
  72. };