SerializableFunctionFields.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. #ifdef DEFINE_ALL_FIELDS
  6. #define DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS 1
  7. #define DEFINE_FUNCTION_BODY_FIELDS 1
  8. #endif
  9. // Default declaration for FunctionBody.h
  10. #ifndef DECLARE_SERIALIZABLE_FIELD
  11. #define DECLARE_SERIALIZABLE_FIELD(type, name, serializableType) Field(type) name
  12. #endif
  13. #ifndef DECLARE_SERIALIZABLE_ACCESSOR_FIELD
  14. #define DECLARE_SERIALIZABLE_ACCESSOR_FIELD(type, name, serializableType)
  15. #endif
  16. #ifndef DECLARE_TAG_FIELD
  17. #define DECLARE_TAG_FIELD(type, name, serializableType)
  18. #endif
  19. #ifdef CURRENT_ACCESS_MODIFIER
  20. #define PROTECTED_FIELDS protected:
  21. #define PRIVATE_FIELDS private:
  22. #define PUBLIC_FIELDS public:
  23. #else
  24. #define CURRENT_ACCESS_MODIFIER
  25. #define PROTECTED_FIELDS
  26. #define PRIVATE_FIELDS
  27. #define PUBLIC_FIELDS
  28. #endif
  29. #if DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS
  30. PROTECTED_FIELDS
  31. DECLARE_SERIALIZABLE_FIELD(uint32, m_grfscr, ULong); // For values, see fscr* values in scrutil.h.
  32. DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_inParamCount, ArgSlot); // Count of 'in' parameters to method
  33. DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_reportedInParamCount, ArgSlot); // Count of 'in' parameters to method excluding default and rest
  34. DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchStartOffset, CharCount); // offset in characters from the start of the document.
  35. DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchLength, CharCount); // length of the function in code points (not bytes)
  36. DECLARE_SERIALIZABLE_FIELD(uint, m_cbLength, UInt32); // length of the function in bytes
  37. DECLARE_SERIALIZABLE_FIELD(uint, m_displayShortNameOffset, UInt32); // Offset into the display name where the short name is found
  38. DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags);
  39. PUBLIC_FIELDS
  40. DECLARE_SERIALIZABLE_FIELD(UINT, scopeSlotArraySize, UInt32);
  41. DECLARE_SERIALIZABLE_FIELD(UINT, paramScopeSlotArraySize, UInt32);
  42. CURRENT_ACCESS_MODIFIER
  43. #endif
  44. #if DEFINE_FUNCTION_BODY_FIELDS
  45. PUBLIC_FIELDS
  46. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, VarCount, RegSlot); // Count of non-constant locals
  47. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ConstantCount, RegSlot); // Count of enregistered constants
  48. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FirstTmpRegister, RegSlot);
  49. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, OutParamMaxDepth, RegSlot); // Count of call depth in a nested expression
  50. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeCount, RegSlot);
  51. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeWithoutLDACount, RegSlot);
  52. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeInLoopCount, UInt32);
  53. DECLARE_SERIALIZABLE_FIELD(uint16, m_envDepth, UInt16);
  54. DECLARE_SERIALIZABLE_FIELD(uint16, m_argUsedForBranch, UInt16);
  55. PRIVATE_FIELDS
  56. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledLdElemCount, UInt16);
  57. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledStElemCount, UInt16);
  58. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledCallSiteCount, UInt16);
  59. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledArrayCallSiteCount, UInt16);
  60. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledDivOrRemCount, UInt16);
  61. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSwitchCount, UInt16);
  62. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledReturnTypeCount, UInt16);
  63. DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSlotCount, UInt16);
  64. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LoopCount, RegSlot);
  65. DECLARE_TAG_FIELD(bool, m_tag31, Bool); // Used to tag the low bit to prevent possible GC false references
  66. DECLARE_SERIALIZABLE_FIELD(bool, m_hasFinally, Bool);
  67. DECLARE_SERIALIZABLE_FIELD(bool, hasScopeObject, Bool);
  68. DECLARE_SERIALIZABLE_FIELD(bool, hasCachedScopePropIds, Bool);
  69. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ForInLoopDepth, UInt32);
  70. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, InlineCacheCount, UInt32);
  71. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectLoadInlineCacheStart, UInt32);
  72. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectLoadMethodInlineCacheStart, UInt32);
  73. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectStoreInlineCacheStart, UInt32);
  74. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, IsInstInlineCacheCount, UInt32);
  75. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ReferencedPropertyIdCount, UInt32);
  76. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ObjLiteralCount, UInt32);
  77. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LiteralRegexCount, UInt32);
  78. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, InnerScopeCount, UInt32);
  79. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(ProfileId, ProfiledForInLoopCount, UInt16);
  80. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, LocalClosureRegister, RegSlot);
  81. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ParamClosureRegister, RegSlot);
  82. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, LocalFrameDisplayRegister, RegSlot);
  83. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, EnvRegister, RegSlot);
  84. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ThisRegisterForEventHandler, RegSlot);
  85. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FirstInnerScopeRegister, RegSlot);
  86. DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FuncExprScopeRegister, RegSlot);
  87. CURRENT_ACCESS_MODIFIER
  88. #endif
  89. #undef DEFINE_ALL_FIELDS
  90. #undef DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS
  91. #undef DEFINE_FUNCTION_BODY_FIELDS
  92. #undef CURRENT_ACCESS_MODIFIER
  93. #undef DECLARE_SERIALIZABLE_FIELD
  94. #undef DECLARE_SERIALIZABLE_ACCESSOR_FIELD
  95. #undef PROTECTED_FIELDS
  96. #undef PRIVATE_FIELDS
  97. #undef PUBLIC_FIELDS
  98. #undef DECLARE_TAG_FIELD