FixedFieldInfo.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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 "Backend.h"
  6. CompileAssert(sizeof(FixedFieldIDL) == sizeof(FixedFieldInfo));
  7. /* static */
  8. void
  9. FixedFieldInfo::PopulateFixedField(_In_opt_ Js::Type * type, _In_opt_ Js::Var var, _Out_ FixedFieldInfo * fixed)
  10. {
  11. FixedFieldIDL * rawFF = fixed->GetRaw();
  12. rawFF->fieldValue = var;
  13. rawFF->nextHasSameFixedField = false;
  14. if (var != nullptr && Js::JavascriptFunction::Is(var))
  15. {
  16. Js::JavascriptFunction * funcObj = Js::JavascriptFunction::FromVar(var);
  17. rawFF->valueType = ValueType::FromObject(funcObj).GetRawData();
  18. rawFF->funcInfoAddr = (void*)funcObj->GetFunctionInfo();
  19. rawFF->isClassCtor = funcObj->GetFunctionInfo()->IsClassConstructor();
  20. rawFF->localFuncId = funcObj->GetFunctionInfo()->GetLocalFunctionId();
  21. if (Js::ScriptFunction::Is(var))
  22. {
  23. rawFF->environmentAddr = (void*)Js::ScriptFunction::FromVar(funcObj)->GetEnvironment();
  24. }
  25. }
  26. if (type != nullptr)
  27. {
  28. JITType::BuildFromJsType(type, (JITType*)&rawFF->type);
  29. }
  30. }
  31. void
  32. FixedFieldInfo::SetNextHasSameFixedField()
  33. {
  34. m_data.nextHasSameFixedField = TRUE;
  35. }
  36. bool
  37. FixedFieldInfo::IsClassCtor() const
  38. {
  39. return m_data.isClassCtor != FALSE;
  40. }
  41. bool
  42. FixedFieldInfo::NextHasSameFixedField() const
  43. {
  44. return m_data.nextHasSameFixedField != FALSE;
  45. }
  46. Js::LocalFunctionId
  47. FixedFieldInfo::GetLocalFuncId() const
  48. {
  49. return m_data.localFuncId;
  50. }
  51. ValueType
  52. FixedFieldInfo::GetValueType() const
  53. {
  54. CompileAssert(sizeof(ValueType) == sizeof(uint16));
  55. return *(ValueType*)&m_data.valueType;
  56. }
  57. intptr_t
  58. FixedFieldInfo::GetFieldValue() const
  59. {
  60. return (intptr_t)PointerValue(m_data.fieldValue);
  61. }
  62. intptr_t
  63. FixedFieldInfo::GetFuncInfoAddr() const
  64. {
  65. return (intptr_t)PointerValue(m_data.funcInfoAddr);
  66. }
  67. intptr_t
  68. FixedFieldInfo::GetEnvironmentAddr() const
  69. {
  70. return (intptr_t)PointerValue(m_data.environmentAddr);
  71. }
  72. JITType *
  73. FixedFieldInfo::GetType() const
  74. {
  75. if (m_data.type.exists)
  76. {
  77. return (JITType*)&m_data.type;
  78. }
  79. else
  80. {
  81. return nullptr;
  82. }
  83. }
  84. FixedFieldIDL *
  85. FixedFieldInfo::GetRaw()
  86. {
  87. return &m_data;
  88. }