You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			1144 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			1144 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | //===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//
 | ||
|  | //
 | ||
|  | //                     The LLVM Compiler Infrastructure
 | ||
|  | //
 | ||
|  | // This file is distributed under the University of Illinois Open Source
 | ||
|  | // License. See LICENSE.TXT for details.
 | ||
|  | //
 | ||
|  | //===----------------------------------------------------------------------===//
 | ||
|  | 
 | ||
|  | #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
 | ||
|  | #include "llvm/ADT/ArrayRef.h"
 | ||
|  | #include "llvm/ADT/STLExtras.h"
 | ||
|  | #include "llvm/DebugInfo/CodeView/Formatters.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/PDBExtras.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"
 | ||
|  | #include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"
 | ||
|  | #include "llvm/Support/ConvertUTF.h"
 | ||
|  | #include "llvm/Support/raw_ostream.h"
 | ||
|  | 
 | ||
|  | using namespace llvm; | ||
|  | using namespace llvm::pdb; | ||
|  | 
 | ||
|  | namespace { | ||
|  | Variant VariantFromVARIANT(const VARIANT &V) { | ||
|  |   Variant Result; | ||
|  |   switch (V.vt) { | ||
|  |   case VT_I1: | ||
|  |     Result.Value.Int8 = V.cVal; | ||
|  |     Result.Type = PDB_VariantType::Int8; | ||
|  |     break; | ||
|  |   case VT_I2: | ||
|  |     Result.Value.Int16 = V.iVal; | ||
|  |     Result.Type = PDB_VariantType::Int16; | ||
|  |     break; | ||
|  |   case VT_I4: | ||
|  |     Result.Value.Int32 = V.intVal; | ||
|  |     Result.Type = PDB_VariantType::Int32; | ||
|  |     break; | ||
|  |   case VT_I8: | ||
|  |     Result.Value.Int64 = V.llVal; | ||
|  |     Result.Type = PDB_VariantType::Int64; | ||
|  |     break; | ||
|  |   case VT_UI1: | ||
|  |     Result.Value.UInt8 = V.bVal; | ||
|  |     Result.Type = PDB_VariantType::UInt8; | ||
|  |     break; | ||
|  |   case VT_UI2: | ||
|  |     Result.Value.UInt16 = V.uiVal; | ||
|  |     Result.Type = PDB_VariantType::UInt16; | ||
|  |     break; | ||
|  |   case VT_UI4: | ||
|  |     Result.Value.UInt32 = V.uintVal; | ||
|  |     Result.Type = PDB_VariantType::UInt32; | ||
|  |     break; | ||
|  |   case VT_UI8: | ||
|  |     Result.Value.UInt64 = V.ullVal; | ||
|  |     Result.Type = PDB_VariantType::UInt64; | ||
|  |     break; | ||
|  |   case VT_BOOL: | ||
|  |     Result.Value.Bool = (V.boolVal == VARIANT_TRUE) ? true : false; | ||
|  |     Result.Type = PDB_VariantType::Bool; | ||
|  |     break; | ||
|  |   case VT_R4: | ||
|  |     Result.Value.Single = V.fltVal; | ||
|  |     Result.Type = PDB_VariantType::Single; | ||
|  |     break; | ||
|  |   case VT_R8: | ||
|  |     Result.Value.Double = V.dblVal; | ||
|  |     Result.Type = PDB_VariantType::Double; | ||
|  |     break; | ||
|  |   case VT_BSTR: { | ||
|  |     const char *SrcBytes = reinterpret_cast<const char *>(V.bstrVal); | ||
|  |     llvm::ArrayRef<char> SrcByteArray(SrcBytes, SysStringByteLen(V.bstrVal)); | ||
|  |     std::string Result8; | ||
|  |     if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8)) | ||
|  |       Result.Value.String = nullptr; | ||
|  |     Result.Value.String = new char[Result8.length() + 1]; | ||
|  |     ::strcpy(Result.Value.String, Result8.c_str()); | ||
|  |     Result.Type = PDB_VariantType::String; | ||
|  |     break; | ||
|  |   } | ||
|  |   default: | ||
|  |     Result.Type = PDB_VariantType::Unknown; | ||
|  |     break; | ||
|  |   } | ||
|  |   return Result; | ||
|  | } | ||
|  | 
 | ||
|  | template <typename ArgType> | ||
|  | ArgType PrivateGetDIAValue(IDiaSymbol *Symbol, | ||
|  |                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) { | ||
|  |   ArgType Value; | ||
|  |   if (S_OK == (Symbol->*Method)(&Value)) | ||
|  |     return static_cast<ArgType>(Value); | ||
|  | 
 | ||
|  |   return ArgType(); | ||
|  | } | ||
|  | 
 | ||
|  | template <typename ArgType, typename RetType> | ||
|  | RetType PrivateGetDIAValue(IDiaSymbol *Symbol, | ||
|  |                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) { | ||
|  |   ArgType Value; | ||
|  |   if (S_OK == (Symbol->*Method)(&Value)) | ||
|  |     return static_cast<RetType>(Value); | ||
|  | 
 | ||
|  |   return RetType(); | ||
|  | } | ||
|  | 
 | ||
|  | std::string | ||
|  | PrivateGetDIAValue(IDiaSymbol *Symbol, | ||
|  |                    HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) { | ||
|  |   CComBSTR Result16; | ||
|  |   if (S_OK != (Symbol->*Method)(&Result16)) | ||
|  |     return std::string(); | ||
|  | 
 | ||
|  |   const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str); | ||
|  |   llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength()); | ||
|  |   std::string Result8; | ||
|  |   if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8)) | ||
|  |     return std::string(); | ||
|  |   return Result8; | ||
|  | } | ||
|  | 
 | ||
|  | codeview::GUID | ||
|  | PrivateGetDIAValue(IDiaSymbol *Symbol, | ||
|  |                    HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) { | ||
|  |   GUID Result; | ||
|  |   if (S_OK != (Symbol->*Method)(&Result)) | ||
|  |     return codeview::GUID(); | ||
|  | 
 | ||
|  |   static_assert(sizeof(codeview::GUID) == sizeof(GUID), | ||
|  |                 "GUID is the wrong size!"); | ||
|  |   codeview::GUID IdResult; | ||
|  |   ::memcpy(&IdResult, &Result, sizeof(GUID)); | ||
|  |   return IdResult; | ||
|  | } | ||
|  | 
 | ||
|  | template <typename ArgType> | ||
|  | void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name, | ||
|  |                   IDiaSymbol *Symbol, | ||
|  |                   HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) { | ||
|  |   ArgType Value; | ||
|  |   if (S_OK == (Symbol->*Method)(&Value)) { | ||
|  |     OS << "\n"; | ||
|  |     OS.indent(Indent); | ||
|  |     OS << Name << ": " << Value; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name, | ||
|  |                   IDiaSymbol *Symbol, | ||
|  |                   HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) { | ||
|  |   BSTR Value = nullptr; | ||
|  |   if (S_OK != (Symbol->*Method)(&Value)) | ||
|  |     return; | ||
|  |   const char *Bytes = reinterpret_cast<const char *>(Value); | ||
|  |   ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value)); | ||
|  |   std::string Result; | ||
|  |   if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) { | ||
|  |     OS << "\n"; | ||
|  |     OS.indent(Indent); | ||
|  |     OS << Name << ": " << Result; | ||
|  |   } | ||
|  |   ::SysFreeString(Value); | ||
|  | } | ||
|  | 
 | ||
|  | void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name, | ||
|  |                   IDiaSymbol *Symbol, | ||
|  |                   HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) { | ||
|  |   VARIANT Value; | ||
|  |   Value.vt = VT_EMPTY; | ||
|  |   if (S_OK != (Symbol->*Method)(&Value)) | ||
|  |     return; | ||
|  |   OS << "\n"; | ||
|  |   OS.indent(Indent); | ||
|  |   Variant V = VariantFromVARIANT(Value); | ||
|  |   OS << V; | ||
|  | } | ||
|  | } | ||
|  | 
 | ||
|  | namespace llvm { | ||
|  | llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const GUID &G) { | ||
|  |   StringRef GuidBytes(reinterpret_cast<const char *>(&G), sizeof(G)); | ||
|  |   codeview::detail::GuidAdapter A(GuidBytes); | ||
|  |   A.format(OS, ""); | ||
|  |   return OS; | ||
|  | } | ||
|  | } | ||
|  | 
 | ||
|  | DIARawSymbol::DIARawSymbol(const DIASession &PDBSession, | ||
|  |                            CComPtr<IDiaSymbol> DiaSymbol) | ||
|  |     : Session(PDBSession), Symbol(DiaSymbol) {} | ||
|  | 
 | ||
|  | #define RAW_METHOD_DUMP(Stream, Method)                                        \
 | ||
|  |   DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method); | ||
|  | 
 | ||
|  | void DIARawSymbol::dump(raw_ostream &OS, int Indent) const { | ||
|  |   RAW_METHOD_DUMP(OS, get_access) | ||
|  |   RAW_METHOD_DUMP(OS, get_addressOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_addressSection) | ||
|  |   RAW_METHOD_DUMP(OS, get_age) | ||
|  |   RAW_METHOD_DUMP(OS, get_arrayIndexTypeId) | ||
|  |   RAW_METHOD_DUMP(OS, get_backEndMajor) | ||
|  |   RAW_METHOD_DUMP(OS, get_backEndMinor) | ||
|  |   RAW_METHOD_DUMP(OS, get_backEndBuild) | ||
|  |   RAW_METHOD_DUMP(OS, get_backEndQFE) | ||
|  |   RAW_METHOD_DUMP(OS, get_baseDataOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_baseDataSlot) | ||
|  |   RAW_METHOD_DUMP(OS, get_baseSymbolId) | ||
|  |   RAW_METHOD_DUMP(OS, get_baseType) | ||
|  |   RAW_METHOD_DUMP(OS, get_bitPosition) | ||
|  |   RAW_METHOD_DUMP(OS, get_callingConvention) | ||
|  |   RAW_METHOD_DUMP(OS, get_classParentId) | ||
|  |   RAW_METHOD_DUMP(OS, get_compilerName) | ||
|  |   RAW_METHOD_DUMP(OS, get_count) | ||
|  |   RAW_METHOD_DUMP(OS, get_countLiveRanges) | ||
|  |   RAW_METHOD_DUMP(OS, get_frontEndMajor) | ||
|  |   RAW_METHOD_DUMP(OS, get_frontEndMinor) | ||
|  |   RAW_METHOD_DUMP(OS, get_frontEndBuild) | ||
|  |   RAW_METHOD_DUMP(OS, get_frontEndQFE) | ||
|  |   RAW_METHOD_DUMP(OS, get_lexicalParentId) | ||
|  |   RAW_METHOD_DUMP(OS, get_libraryName) | ||
|  |   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection) | ||
|  |   RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress) | ||
|  |   RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId) | ||
|  |   RAW_METHOD_DUMP(OS, get_lowerBoundId) | ||
|  |   RAW_METHOD_DUMP(OS, get_memorySpaceKind) | ||
|  |   RAW_METHOD_DUMP(OS, get_name) | ||
|  |   RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags) | ||
|  |   RAW_METHOD_DUMP(OS, get_numberOfColumns) | ||
|  |   RAW_METHOD_DUMP(OS, get_numberOfModifiers) | ||
|  |   RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices) | ||
|  |   RAW_METHOD_DUMP(OS, get_numberOfRows) | ||
|  |   RAW_METHOD_DUMP(OS, get_objectFileName) | ||
|  |   RAW_METHOD_DUMP(OS, get_oemId) | ||
|  |   RAW_METHOD_DUMP(OS, get_oemSymbolId) | ||
|  |   RAW_METHOD_DUMP(OS, get_offsetInUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_platform) | ||
|  |   RAW_METHOD_DUMP(OS, get_rank) | ||
|  |   RAW_METHOD_DUMP(OS, get_registerId) | ||
|  |   RAW_METHOD_DUMP(OS, get_registerType) | ||
|  |   RAW_METHOD_DUMP(OS, get_relativeVirtualAddress) | ||
|  |   RAW_METHOD_DUMP(OS, get_samplerSlot) | ||
|  |   RAW_METHOD_DUMP(OS, get_signature) | ||
|  |   RAW_METHOD_DUMP(OS, get_sizeInUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_slot) | ||
|  |   RAW_METHOD_DUMP(OS, get_sourceFileName) | ||
|  |   RAW_METHOD_DUMP(OS, get_stride) | ||
|  |   RAW_METHOD_DUMP(OS, get_subTypeId) | ||
|  |   RAW_METHOD_DUMP(OS, get_symbolsFileName) | ||
|  |   RAW_METHOD_DUMP(OS, get_symIndexId) | ||
|  |   RAW_METHOD_DUMP(OS, get_targetOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress) | ||
|  |   RAW_METHOD_DUMP(OS, get_targetVirtualAddress) | ||
|  |   RAW_METHOD_DUMP(OS, get_targetSection) | ||
|  |   RAW_METHOD_DUMP(OS, get_textureSlot) | ||
|  |   RAW_METHOD_DUMP(OS, get_timeStamp) | ||
|  |   RAW_METHOD_DUMP(OS, get_token) | ||
|  |   RAW_METHOD_DUMP(OS, get_typeId) | ||
|  |   RAW_METHOD_DUMP(OS, get_uavSlot) | ||
|  |   RAW_METHOD_DUMP(OS, get_undecoratedName) | ||
|  |   RAW_METHOD_DUMP(OS, get_unmodifiedTypeId) | ||
|  |   RAW_METHOD_DUMP(OS, get_upperBoundId) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualBaseOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualTableShapeId) | ||
|  |   RAW_METHOD_DUMP(OS, get_dataKind) | ||
|  |   RAW_METHOD_DUMP(OS, get_symTag) | ||
|  |   RAW_METHOD_DUMP(OS, get_guid) | ||
|  |   RAW_METHOD_DUMP(OS, get_offset) | ||
|  |   RAW_METHOD_DUMP(OS, get_thisAdjust) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset) | ||
|  |   RAW_METHOD_DUMP(OS, get_locationType) | ||
|  |   RAW_METHOD_DUMP(OS, get_machineType) | ||
|  |   RAW_METHOD_DUMP(OS, get_thunkOrdinal) | ||
|  |   RAW_METHOD_DUMP(OS, get_length) | ||
|  |   RAW_METHOD_DUMP(OS, get_liveRangeLength) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualAddress) | ||
|  |   RAW_METHOD_DUMP(OS, get_udtKind) | ||
|  |   RAW_METHOD_DUMP(OS, get_constructor) | ||
|  |   RAW_METHOD_DUMP(OS, get_customCallingConvention) | ||
|  |   RAW_METHOD_DUMP(OS, get_farReturn) | ||
|  |   RAW_METHOD_DUMP(OS, get_code) | ||
|  |   RAW_METHOD_DUMP(OS, get_compilerGenerated) | ||
|  |   RAW_METHOD_DUMP(OS, get_constType) | ||
|  |   RAW_METHOD_DUMP(OS, get_editAndContinueEnabled) | ||
|  |   RAW_METHOD_DUMP(OS, get_function) | ||
|  |   RAW_METHOD_DUMP(OS, get_stride) | ||
|  |   RAW_METHOD_DUMP(OS, get_noStackOrdering) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasAlloca) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasAssignmentOperator) | ||
|  |   RAW_METHOD_DUMP(OS, get_isCTypes) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasCastOperator) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasDebugInfo) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasEH) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasEHa) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasInlAsm) | ||
|  |   RAW_METHOD_DUMP(OS, get_framePointerPresent) | ||
|  |   RAW_METHOD_DUMP(OS, get_inlSpec) | ||
|  |   RAW_METHOD_DUMP(OS, get_interruptReturn) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasLongJump) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasManagedCode) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasNestedTypes) | ||
|  |   RAW_METHOD_DUMP(OS, get_noInline) | ||
|  |   RAW_METHOD_DUMP(OS, get_noReturn) | ||
|  |   RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo) | ||
|  |   RAW_METHOD_DUMP(OS, get_overloadedOperator) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasSEH) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasSecurityChecks) | ||
|  |   RAW_METHOD_DUMP(OS, get_hasSetJump) | ||
|  |   RAW_METHOD_DUMP(OS, get_strictGSCheck) | ||
|  |   RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal) | ||
|  |   RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange) | ||
|  |   RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction) | ||
|  |   RAW_METHOD_DUMP(OS, get_isAggregated) | ||
|  |   RAW_METHOD_DUMP(OS, get_intro) | ||
|  |   RAW_METHOD_DUMP(OS, get_isCVTCIL) | ||
|  |   RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase) | ||
|  |   RAW_METHOD_DUMP(OS, get_isCxxReturnUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_isDataAligned) | ||
|  |   RAW_METHOD_DUMP(OS, get_isHLSLData) | ||
|  |   RAW_METHOD_DUMP(OS, get_isHotpatchable) | ||
|  |   RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass) | ||
|  |   RAW_METHOD_DUMP(OS, get_isInterfaceUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_intrinsic) | ||
|  |   RAW_METHOD_DUMP(OS, get_isLTCG) | ||
|  |   RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent) | ||
|  |   RAW_METHOD_DUMP(OS, get_isMSILNetmodule) | ||
|  |   RAW_METHOD_DUMP(OS, get_isMatrixRowMajor) | ||
|  |   RAW_METHOD_DUMP(OS, get_managed) | ||
|  |   RAW_METHOD_DUMP(OS, get_msil) | ||
|  |   RAW_METHOD_DUMP(OS, get_isMultipleInheritance) | ||
|  |   RAW_METHOD_DUMP(OS, get_isNaked) | ||
|  |   RAW_METHOD_DUMP(OS, get_nested) | ||
|  |   RAW_METHOD_DUMP(OS, get_isOptimizedAway) | ||
|  |   RAW_METHOD_DUMP(OS, get_packed) | ||
|  |   RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue) | ||
|  |   RAW_METHOD_DUMP(OS, get_isPointerToDataMember) | ||
|  |   RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction) | ||
|  |   RAW_METHOD_DUMP(OS, get_pure) | ||
|  |   RAW_METHOD_DUMP(OS, get_RValueReference) | ||
|  |   RAW_METHOD_DUMP(OS, get_isRefUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_reference) | ||
|  |   RAW_METHOD_DUMP(OS, get_restrictedType) | ||
|  |   RAW_METHOD_DUMP(OS, get_isReturnValue) | ||
|  |   RAW_METHOD_DUMP(OS, get_isSafeBuffers) | ||
|  |   RAW_METHOD_DUMP(OS, get_scoped) | ||
|  |   RAW_METHOD_DUMP(OS, get_isSdl) | ||
|  |   RAW_METHOD_DUMP(OS, get_isSingleInheritance) | ||
|  |   RAW_METHOD_DUMP(OS, get_isSplitted) | ||
|  |   RAW_METHOD_DUMP(OS, get_isStatic) | ||
|  |   RAW_METHOD_DUMP(OS, get_isStripped) | ||
|  |   RAW_METHOD_DUMP(OS, get_unalignedType) | ||
|  |   RAW_METHOD_DUMP(OS, get_notReached) | ||
|  |   RAW_METHOD_DUMP(OS, get_isValueUdt) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtual) | ||
|  |   RAW_METHOD_DUMP(OS, get_virtualBaseClass) | ||
|  |   RAW_METHOD_DUMP(OS, get_isVirtualInheritance) | ||
|  |   RAW_METHOD_DUMP(OS, get_volatileType) | ||
|  |   RAW_METHOD_DUMP(OS, get_wasInlined) | ||
|  |   RAW_METHOD_DUMP(OS, get_unused) | ||
|  |   RAW_METHOD_DUMP(OS, get_value) | ||
|  | } | ||
|  | 
 | ||
|  | std::unique_ptr<IPDBEnumSymbols> | ||
|  | DIARawSymbol::findChildren(PDB_SymType Type) const { | ||
|  |   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type); | ||
|  | 
 | ||
|  |   CComPtr<IDiaEnumSymbols> DiaEnumerator; | ||
|  |   if (S_OK != | ||
|  |       Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator)) { | ||
|  |     if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator)) | ||
|  |       return nullptr; | ||
|  |   } | ||
|  | 
 | ||
|  |   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator); | ||
|  | } | ||
|  | 
 | ||
|  | std::unique_ptr<IPDBEnumSymbols> | ||
|  | DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name, | ||
|  |                            PDB_NameSearchFlags Flags) const { | ||
|  |   llvm::SmallVector<UTF16, 32> Name16; | ||
|  |   llvm::convertUTF8ToUTF16String(Name, Name16); | ||
|  | 
 | ||
|  |   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type); | ||
|  |   DWORD CompareFlags = static_cast<DWORD>(Flags); | ||
|  |   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data()); | ||
|  | 
 | ||
|  |   CComPtr<IDiaEnumSymbols> DiaEnumerator; | ||
|  |   if (S_OK != | ||
|  |       Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator)) | ||
|  |     return nullptr; | ||
|  | 
 | ||
|  |   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator); | ||
|  | } | ||
|  | 
 | ||
|  | std::unique_ptr<IPDBEnumSymbols> | ||
|  | DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name, | ||
|  |                                 PDB_NameSearchFlags Flags, uint32_t RVA) const { | ||
|  |   llvm::SmallVector<UTF16, 32> Name16; | ||
|  |   llvm::convertUTF8ToUTF16String(Name, Name16); | ||
|  | 
 | ||
|  |   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type); | ||
|  |   DWORD CompareFlags = static_cast<DWORD>(Flags); | ||
|  |   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data()); | ||
|  | 
 | ||
|  |   CComPtr<IDiaEnumSymbols> DiaEnumerator; | ||
|  |   if (S_OK != | ||
|  |       Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA, | ||
|  |                                   &DiaEnumerator)) | ||
|  |     return nullptr; | ||
|  | 
 | ||
|  |   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator); | ||
|  | } | ||
|  | 
 | ||
|  | std::unique_ptr<IPDBEnumSymbols> | ||
|  | DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const { | ||
|  |   CComPtr<IDiaEnumSymbols> DiaEnumerator; | ||
|  |   if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator)) | ||
|  |     return nullptr; | ||
|  | 
 | ||
|  |   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator); | ||
|  | } | ||
|  | 
 | ||
|  | void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const { | ||
|  |   bytes.clear(); | ||
|  | 
 | ||
|  |   DWORD DataSize = 0; | ||
|  |   Symbol->get_dataBytes(0, &DataSize, nullptr); | ||
|  |   if (DataSize == 0) | ||
|  |     return; | ||
|  | 
 | ||
|  |   bytes.resize(DataSize); | ||
|  |   Symbol->get_dataBytes(DataSize, &DataSize, bytes.data()); | ||
|  | } | ||
|  | 
 | ||
|  | std::string | ||
|  | DIARawSymbol::getUndecoratedNameEx(PDB_UndnameFlags Flags) const { | ||
|  |   CComBSTR Result16; | ||
|  |   if (S_OK != Symbol->get_undecoratedNameEx((DWORD)Flags, &Result16)) | ||
|  |     return std::string(); | ||
|  | 
 | ||
|  |   const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str); | ||
|  |   llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength()); | ||
|  |   std::string Result8; | ||
|  |   if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8)) | ||
|  |     return std::string(); | ||
|  |   return Result8; | ||
|  | } | ||
|  | 
 | ||
|  | PDB_MemberAccess DIARawSymbol::getAccess() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol, | ||
|  |                                                      &IDiaSymbol::get_access); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getAddressOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getAddressSection() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getAge() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getArrayIndexTypeId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId); | ||
|  | } | ||
|  | 
 | ||
|  | void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const { | ||
|  |   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor); | ||
|  |   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor); | ||
|  |   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild); | ||
|  |   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getBaseDataOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getBaseDataSlot() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getBaseSymbolId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_BuiltinType DIARawSymbol::getBuiltinType() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol, | ||
|  |                                                     &IDiaSymbol::get_baseType); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getBitPosition() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_CallingConv DIARawSymbol::getCallingConvention() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_CallingConv>( | ||
|  |       Symbol, &IDiaSymbol::get_callingConvention); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getClassParentId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getCompilerName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getCount() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getCountLiveRanges() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges); | ||
|  | } | ||
|  | 
 | ||
|  | void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const { | ||
|  |   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor); | ||
|  |   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor); | ||
|  |   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild); | ||
|  |   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_Lang DIARawSymbol::getLanguage() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getLexicalParentId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getLibraryName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_liveRangeStartAddressOffset); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_liveRangeStartAddressSection); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const { | ||
|  |   return PrivateGetDIAValue( | ||
|  |       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress); | ||
|  | } | ||
|  | 
 | ||
|  | codeview::RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const { | ||
|  |   return PrivateGetDIAValue<DWORD, codeview::RegisterId>( | ||
|  |       Symbol, &IDiaSymbol::get_localBasePointerRegisterId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getLowerBoundId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getMemorySpaceKind() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_numberOfAcceleratorPointerTags); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getNumberOfColumns() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getNumberOfModifiers() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getNumberOfRegisterIndices() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getNumberOfRows() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getObjectFileName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getOemId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getOemSymbolId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getOffsetInUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_Cpu DIARawSymbol::getPlatform() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getRank() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank); | ||
|  | } | ||
|  | 
 | ||
|  | codeview::RegisterId DIARawSymbol::getRegisterId() const { | ||
|  |   return PrivateGetDIAValue<DWORD, codeview::RegisterId>( | ||
|  |       Symbol, &IDiaSymbol::get_registerId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getRegisterType() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getRelativeVirtualAddress() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSamplerSlot() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSignature() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSizeInUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSlot() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getSourceFileName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getStride() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSubTypeId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getSymbolsFileName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getSymIndexId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTargetOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_targetRelativeVirtualAddress); | ||
|  | } | ||
|  | 
 | ||
|  | uint64_t DIARawSymbol::getTargetVirtualAddress() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTargetSection() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTextureSlot() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTimeStamp() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getToken() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getTypeId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getUavSlot() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getUndecoratedName() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getUnmodifiedTypeId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getUpperBoundId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId); | ||
|  | } | ||
|  | 
 | ||
|  | Variant DIARawSymbol::getValue() const { | ||
|  |   VARIANT Value; | ||
|  |   Value.vt = VT_EMPTY; | ||
|  |   if (S_OK != Symbol->get_value(&Value)) | ||
|  |     return Variant(); | ||
|  | 
 | ||
|  |   return VariantFromVARIANT(Value); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getVirtualBaseDispIndex() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getVirtualBaseOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset); | ||
|  | } | ||
|  | 
 | ||
|  | uint32_t DIARawSymbol::getVirtualTableShapeId() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId); | ||
|  | } | ||
|  | 
 | ||
|  | std::unique_ptr<PDBSymbolTypeBuiltin> | ||
|  | DIARawSymbol::getVirtualBaseTableType() const { | ||
|  |   CComPtr<IDiaSymbol> TableType; | ||
|  |   if (FAILED(Symbol->get_virtualBaseTableType(&TableType)) || !TableType) | ||
|  |     return nullptr; | ||
|  | 
 | ||
|  |   auto RawVT = llvm::make_unique<DIARawSymbol>(Session, TableType); | ||
|  |   auto Pointer = | ||
|  |       llvm::make_unique<PDBSymbolTypePointer>(Session, std::move(RawVT)); | ||
|  |   return unique_dyn_cast<PDBSymbolTypeBuiltin>(Pointer->getPointeeType()); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_DataKind DIARawSymbol::getDataKind() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol, | ||
|  |                                                  &IDiaSymbol::get_dataKind); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_SymType DIARawSymbol::getSymTag() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol, | ||
|  |                                                 &IDiaSymbol::get_symTag); | ||
|  | } | ||
|  | 
 | ||
|  | codeview::GUID DIARawSymbol::getGuid() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid); | ||
|  | } | ||
|  | 
 | ||
|  | int32_t DIARawSymbol::getOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset); | ||
|  | } | ||
|  | 
 | ||
|  | int32_t DIARawSymbol::getThisAdjust() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust); | ||
|  | } | ||
|  | 
 | ||
|  | int32_t DIARawSymbol::getVirtualBasePointerOffset() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_LocType DIARawSymbol::getLocationType() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol, | ||
|  |                                                 &IDiaSymbol::get_locationType); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_Machine DIARawSymbol::getMachineType() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol, | ||
|  |                                                 &IDiaSymbol::get_machineType); | ||
|  | } | ||
|  | 
 | ||
|  | codeview::ThunkOrdinal DIARawSymbol::getThunkOrdinal() const { | ||
|  |   return PrivateGetDIAValue<DWORD, codeview::ThunkOrdinal>( | ||
|  |       Symbol, &IDiaSymbol::get_thunkOrdinal); | ||
|  | } | ||
|  | 
 | ||
|  | uint64_t DIARawSymbol::getLength() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length); | ||
|  | } | ||
|  | 
 | ||
|  | uint64_t DIARawSymbol::getLiveRangeLength() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength); | ||
|  | } | ||
|  | 
 | ||
|  | uint64_t DIARawSymbol::getVirtualAddress() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress); | ||
|  | } | ||
|  | 
 | ||
|  | PDB_UdtType DIARawSymbol::getUdtKind() const { | ||
|  |   return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol, | ||
|  |                                                 &IDiaSymbol::get_udtKind); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasConstructor() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasCustomCallingConvention() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasFarReturn() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isCode() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isCompilerGenerated() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isConstType() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isEditAndContinueEnabled() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isFunction() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::getAddressTaken() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::getNoStackOrdering() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasAlloca() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasAssignmentOperator() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasCTypes() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasCastOperator() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasDebugInfo() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasEH() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasEHa() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasInlAsm() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasInlineAttribute() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasInterruptReturn() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasFramePointer() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasLongJump() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasManagedCode() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasNestedTypes() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasNoInlineAttribute() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasNoReturnAttribute() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasOptimizedCodeDebugInfo() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasOverloadedOperator() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasSEH() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasSecurityChecks() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasSetJump() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasStrictGSCheck() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isAcceleratorGroupSharedLocal() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_isAcceleratorGroupSharedLocal); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_isAcceleratorPointerTagLiveRange); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isAcceleratorStubFunction() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isAggregated() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isIntroVirtualFunction() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isCVTCIL() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isConstructorVirtualBase() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isCxxReturnUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isDataAligned() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isHLSLData() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isHotpatchable() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isIndirectVirtualBaseClass() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isInterfaceUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isIntrinsic() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isLTCG() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isLocationControlFlowDependent() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_isLocationControlFlowDependent); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isMSILNetmodule() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isMatrixRowMajor() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isManagedCode() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isMSILCode() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isMultipleInheritance() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isNaked() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isNested() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isOptimizedAway() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isPacked() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isPointerBasedOnSymbolValue() const { | ||
|  |   return PrivateGetDIAValue(Symbol, | ||
|  |                             &IDiaSymbol::get_isPointerBasedOnSymbolValue); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isPointerToDataMember() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isPointerToMemberFunction() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isPureVirtual() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isRValueReference() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isRefUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isReference() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isRestrictedType() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isReturnValue() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isSafeBuffers() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isScoped() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isSdl() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isSingleInheritance() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isSplitted() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isStatic() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::hasPrivateSymbols() const { | ||
|  |   // hasPrivateSymbols is the opposite of isStripped, but we expose
 | ||
|  |   // hasPrivateSymbols as a more intuitive interface.
 | ||
|  |   return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isUnalignedType() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isUnreached() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isValueUdt() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isVirtual() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isVirtualBaseClass() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isVirtualInheritance() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::isVolatileType() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType); | ||
|  | } | ||
|  | 
 | ||
|  | bool DIARawSymbol::wasInlined() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined); | ||
|  | } | ||
|  | 
 | ||
|  | std::string DIARawSymbol::getUnused() const { | ||
|  |   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused); | ||
|  | } |