blob: 5463a7614b234f01c69ea1128206e97f45afcd89 [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#ifdef DEFINE_ALL_FIELDS
#define DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS 1
#define DEFINE_FUNCTION_BODY_FIELDS 1
#endif
// Default declaration for FunctionBody.h
#ifndef DECLARE_SERIALIZABLE_FIELD
#define DECLARE_SERIALIZABLE_FIELD(type, name, serializableType) Field(type) name
#endif
#ifndef DECLARE_SERIALIZABLE_ACCESSOR_FIELD
#define DECLARE_SERIALIZABLE_ACCESSOR_FIELD(type, name, serializableType)
#endif
#ifndef DECLARE_TAG_FIELD
#define DECLARE_TAG_FIELD(type, name, serializableType)
#endif
#ifdef CURRENT_ACCESS_MODIFIER
#define PROTECTED_FIELDS protected:
#define PRIVATE_FIELDS private:
#define PUBLIC_FIELDS public:
#else
#define CURRENT_ACCESS_MODIFIER
#define PROTECTED_FIELDS
#define PRIVATE_FIELDS
#define PUBLIC_FIELDS
#endif
#if DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS
PROTECTED_FIELDS
DECLARE_SERIALIZABLE_FIELD(uint32, m_grfscr, ULong); // For values, see fscr* values in scrutil.h.
DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_inParamCount, ArgSlot); // Count of 'in' parameters to method
DECLARE_SERIALIZABLE_FIELD(ArgSlot, m_reportedInParamCount, ArgSlot); // Count of 'in' parameters to method excluding default and rest
DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchStartOffset, CharCount); // offset in characters from the start of the document.
DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchLength, CharCount); // length of the function in code points (not bytes)
DECLARE_SERIALIZABLE_FIELD(uint, m_cbLength, UInt32); // length of the function in bytes
DECLARE_SERIALIZABLE_FIELD(uint, m_displayShortNameOffset, UInt32); // Offset into the display name where the short name is found
DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags);
PUBLIC_FIELDS
DECLARE_SERIALIZABLE_FIELD(UINT, scopeSlotArraySize, UInt32);
DECLARE_SERIALIZABLE_FIELD(UINT, paramScopeSlotArraySize, UInt32);
CURRENT_ACCESS_MODIFIER
#endif
#if DEFINE_FUNCTION_BODY_FIELDS
PUBLIC_FIELDS
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, VarCount, RegSlot); // Count of non-constant locals
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ConstantCount, RegSlot); // Count of enregistered constants
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FirstTmpRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, OutParamMaxDepth, RegSlot); // Count of call depth in a nested expression
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeCount, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeWithoutLDACount, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ByteCodeInLoopCount, UInt32);
DECLARE_SERIALIZABLE_FIELD(uint16, m_envDepth, UInt16);
DECLARE_SERIALIZABLE_FIELD(uint16, m_argUsedForBranch, UInt16);
PRIVATE_FIELDS
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledLdElemCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledStElemCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledCallSiteCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledArrayCallSiteCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledDivOrRemCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSwitchCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledReturnTypeCount, UInt16);
DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSlotCount, UInt16);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LoopCount, RegSlot);
DECLARE_TAG_FIELD(bool, m_tag31, Bool); // Used to tag the low bit to prevent possible GC false references
DECLARE_SERIALIZABLE_FIELD(bool, m_hasFinally, Bool);
DECLARE_SERIALIZABLE_FIELD(bool, hasScopeObject, Bool);
DECLARE_SERIALIZABLE_FIELD(bool, hasCachedScopePropIds, Bool);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ForInLoopDepth, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, InlineCacheCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectLoadInlineCacheStart, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectLoadMethodInlineCacheStart, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, RootObjectStoreInlineCacheStart, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, IsInstInlineCacheCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ReferencedPropertyIdCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, ObjLiteralCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LiteralRegexCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, InnerScopeCount, UInt32);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(ProfileId, ProfiledForInLoopCount, UInt16);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, LocalClosureRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ParamClosureRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, LocalFrameDisplayRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, EnvRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, ThisRegisterForEventHandler, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FirstInnerScopeRegister, RegSlot);
DECLARE_SERIALIZABLE_ACCESSOR_FIELD(RegSlot, FuncExprScopeRegister, RegSlot);
CURRENT_ACCESS_MODIFIER
#endif
#undef DEFINE_ALL_FIELDS
#undef DEFINE_PARSEABLE_FUNCTION_INFO_FIELDS
#undef DEFINE_FUNCTION_BODY_FIELDS
#undef CURRENT_ACCESS_MODIFIER
#undef DECLARE_SERIALIZABLE_FIELD
#undef DECLARE_SERIALIZABLE_ACCESSOR_FIELD
#undef PROTECTED_FIELDS
#undef PRIVATE_FIELDS
#undef PUBLIC_FIELDS
#undef DECLARE_TAG_FIELD