xref: /freebsd/contrib/llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp (revision 5b27928474e6a4103d65b347544705c40c9618fd)
10b57cec5SDimitry Andric //===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
100b57cec5SDimitry Andric #include "llvm/ADT/ArrayRef.h"
110b57cec5SDimitry Andric #include "llvm/ADT/STLExtras.h"
120b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/Formatters.h"
130b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h"
140b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
150b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIALineNumber.h"
160b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
170b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"
180b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/PDBExtras.h"
190b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
200b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/PDBSymbolTypePointer.h"
210b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h"
220b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h"
230b57cec5SDimitry Andric #include "llvm/Support/ConvertUTF.h"
240b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h"
250b57cec5SDimitry Andric 
260b57cec5SDimitry Andric using namespace llvm;
270b57cec5SDimitry Andric using namespace llvm::pdb;
280b57cec5SDimitry Andric 
290b57cec5SDimitry Andric namespace {
VariantFromVARIANT(const VARIANT & V)300b57cec5SDimitry Andric Variant VariantFromVARIANT(const VARIANT &V) {
310b57cec5SDimitry Andric   Variant Result;
320b57cec5SDimitry Andric   switch (V.vt) {
330b57cec5SDimitry Andric   case VT_I1:
340b57cec5SDimitry Andric     Result.Value.Int8 = V.cVal;
350b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Int8;
360b57cec5SDimitry Andric     break;
370b57cec5SDimitry Andric   case VT_I2:
380b57cec5SDimitry Andric     Result.Value.Int16 = V.iVal;
390b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Int16;
400b57cec5SDimitry Andric     break;
410b57cec5SDimitry Andric   case VT_I4:
420b57cec5SDimitry Andric     Result.Value.Int32 = V.intVal;
430b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Int32;
440b57cec5SDimitry Andric     break;
450b57cec5SDimitry Andric   case VT_I8:
460b57cec5SDimitry Andric     Result.Value.Int64 = V.llVal;
470b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Int64;
480b57cec5SDimitry Andric     break;
490b57cec5SDimitry Andric   case VT_UI1:
500b57cec5SDimitry Andric     Result.Value.UInt8 = V.bVal;
510b57cec5SDimitry Andric     Result.Type = PDB_VariantType::UInt8;
520b57cec5SDimitry Andric     break;
530b57cec5SDimitry Andric   case VT_UI2:
540b57cec5SDimitry Andric     Result.Value.UInt16 = V.uiVal;
550b57cec5SDimitry Andric     Result.Type = PDB_VariantType::UInt16;
560b57cec5SDimitry Andric     break;
570b57cec5SDimitry Andric   case VT_UI4:
580b57cec5SDimitry Andric     Result.Value.UInt32 = V.uintVal;
590b57cec5SDimitry Andric     Result.Type = PDB_VariantType::UInt32;
600b57cec5SDimitry Andric     break;
610b57cec5SDimitry Andric   case VT_UI8:
620b57cec5SDimitry Andric     Result.Value.UInt64 = V.ullVal;
630b57cec5SDimitry Andric     Result.Type = PDB_VariantType::UInt64;
640b57cec5SDimitry Andric     break;
650b57cec5SDimitry Andric   case VT_BOOL:
660b57cec5SDimitry Andric     Result.Value.Bool = (V.boolVal == VARIANT_TRUE) ? true : false;
670b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Bool;
680b57cec5SDimitry Andric     break;
690b57cec5SDimitry Andric   case VT_R4:
700b57cec5SDimitry Andric     Result.Value.Single = V.fltVal;
710b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Single;
720b57cec5SDimitry Andric     break;
730b57cec5SDimitry Andric   case VT_R8:
740b57cec5SDimitry Andric     Result.Value.Double = V.dblVal;
750b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Double;
760b57cec5SDimitry Andric     break;
770b57cec5SDimitry Andric   case VT_BSTR: {
780b57cec5SDimitry Andric     const char *SrcBytes = reinterpret_cast<const char *>(V.bstrVal);
790b57cec5SDimitry Andric     llvm::ArrayRef<char> SrcByteArray(SrcBytes, SysStringByteLen(V.bstrVal));
800b57cec5SDimitry Andric     std::string Result8;
810b57cec5SDimitry Andric     if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
820b57cec5SDimitry Andric       Result.Value.String = nullptr;
830b57cec5SDimitry Andric     Result.Value.String = new char[Result8.length() + 1];
840b57cec5SDimitry Andric     ::strcpy(Result.Value.String, Result8.c_str());
850b57cec5SDimitry Andric     Result.Type = PDB_VariantType::String;
860b57cec5SDimitry Andric     break;
870b57cec5SDimitry Andric   }
880b57cec5SDimitry Andric   default:
890b57cec5SDimitry Andric     Result.Type = PDB_VariantType::Unknown;
900b57cec5SDimitry Andric     break;
910b57cec5SDimitry Andric   }
920b57cec5SDimitry Andric   return Result;
930b57cec5SDimitry Andric }
940b57cec5SDimitry Andric 
950b57cec5SDimitry Andric template <typename ArgType>
PrivateGetDIAValue(IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(ArgType *))960b57cec5SDimitry Andric ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,
970b57cec5SDimitry Andric                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
980b57cec5SDimitry Andric   ArgType Value;
990b57cec5SDimitry Andric   if (S_OK == (Symbol->*Method)(&Value))
1000b57cec5SDimitry Andric     return static_cast<ArgType>(Value);
1010b57cec5SDimitry Andric 
1020b57cec5SDimitry Andric   return ArgType();
1030b57cec5SDimitry Andric }
1040b57cec5SDimitry Andric 
1050b57cec5SDimitry Andric template <typename ArgType, typename RetType>
PrivateGetDIAValue(IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(ArgType *))1060b57cec5SDimitry Andric RetType PrivateGetDIAValue(IDiaSymbol *Symbol,
1070b57cec5SDimitry Andric                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
1080b57cec5SDimitry Andric   ArgType Value;
1090b57cec5SDimitry Andric   if (S_OK == (Symbol->*Method)(&Value))
1100b57cec5SDimitry Andric     return static_cast<RetType>(Value);
1110b57cec5SDimitry Andric 
1120b57cec5SDimitry Andric   return RetType();
1130b57cec5SDimitry Andric }
1140b57cec5SDimitry Andric 
1150b57cec5SDimitry Andric std::string
PrivateGetDIAValue(IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(BSTR *))1160b57cec5SDimitry Andric PrivateGetDIAValue(IDiaSymbol *Symbol,
1170b57cec5SDimitry Andric                    HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
1180b57cec5SDimitry Andric   return invokeBstrMethod(*Symbol, Method);
1190b57cec5SDimitry Andric }
1200b57cec5SDimitry Andric 
1210b57cec5SDimitry Andric codeview::GUID
PrivateGetDIAValue(IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(GUID *))1220b57cec5SDimitry Andric PrivateGetDIAValue(IDiaSymbol *Symbol,
1230b57cec5SDimitry Andric                    HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {
1240b57cec5SDimitry Andric   GUID Result;
1250b57cec5SDimitry Andric   if (S_OK != (Symbol->*Method)(&Result))
1260b57cec5SDimitry Andric     return codeview::GUID();
1270b57cec5SDimitry Andric 
1280b57cec5SDimitry Andric   static_assert(sizeof(codeview::GUID) == sizeof(GUID),
1290b57cec5SDimitry Andric                 "GUID is the wrong size!");
1300b57cec5SDimitry Andric   codeview::GUID IdResult;
1310b57cec5SDimitry Andric   ::memcpy(&IdResult, &Result, sizeof(GUID));
1320b57cec5SDimitry Andric   return IdResult;
1330b57cec5SDimitry Andric }
1340b57cec5SDimitry Andric 
1350b57cec5SDimitry Andric template <typename PrintType, typename ArgType>
DumpDIAValueAs(llvm::raw_ostream & OS,int Indent,StringRef Name,IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(ArgType *))1360b57cec5SDimitry Andric void DumpDIAValueAs(llvm::raw_ostream &OS, int Indent, StringRef Name,
1370b57cec5SDimitry Andric                     IDiaSymbol *Symbol,
1380b57cec5SDimitry Andric                     HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
1390b57cec5SDimitry Andric   ArgType Value;
1400b57cec5SDimitry Andric   if (S_OK == (Symbol->*Method)(&Value))
1410b57cec5SDimitry Andric     dumpSymbolField(OS, Name, static_cast<PrintType>(Value), Indent);
1420b57cec5SDimitry Andric }
1430b57cec5SDimitry Andric 
DumpDIAIdValue(llvm::raw_ostream & OS,int Indent,StringRef Name,IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(DWORD *),const IPDBSession & Session,PdbSymbolIdField FieldId,PdbSymbolIdField ShowFlags,PdbSymbolIdField RecurseFlags)1440b57cec5SDimitry Andric void DumpDIAIdValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
1450b57cec5SDimitry Andric                     IDiaSymbol *Symbol,
1460b57cec5SDimitry Andric                     HRESULT (__stdcall IDiaSymbol::*Method)(DWORD *),
1470b57cec5SDimitry Andric                     const IPDBSession &Session, PdbSymbolIdField FieldId,
1480b57cec5SDimitry Andric                     PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags) {
1490b57cec5SDimitry Andric   DWORD Value;
1500b57cec5SDimitry Andric   if (S_OK == (Symbol->*Method)(&Value))
1510b57cec5SDimitry Andric     dumpSymbolIdField(OS, Name, Value, Indent, Session, FieldId, ShowFlags,
1520b57cec5SDimitry Andric                       RecurseFlags);
1530b57cec5SDimitry Andric }
1540b57cec5SDimitry Andric 
1550b57cec5SDimitry Andric template <typename ArgType>
DumpDIAValue(llvm::raw_ostream & OS,int Indent,StringRef Name,IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(ArgType *))1560b57cec5SDimitry Andric void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
1570b57cec5SDimitry Andric                   IDiaSymbol *Symbol,
1580b57cec5SDimitry Andric                   HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
1590b57cec5SDimitry Andric   ArgType Value;
1600b57cec5SDimitry Andric   if (S_OK == (Symbol->*Method)(&Value))
1610b57cec5SDimitry Andric     dumpSymbolField(OS, Name, Value, Indent);
1620b57cec5SDimitry Andric }
1630b57cec5SDimitry Andric 
DumpDIAValue(llvm::raw_ostream & OS,int Indent,StringRef Name,IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(BSTR *))1640b57cec5SDimitry Andric void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
1650b57cec5SDimitry Andric                   IDiaSymbol *Symbol,
1660b57cec5SDimitry Andric                   HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
1670b57cec5SDimitry Andric   BSTR Value = nullptr;
1680b57cec5SDimitry Andric   if (S_OK != (Symbol->*Method)(&Value))
1690b57cec5SDimitry Andric     return;
1700b57cec5SDimitry Andric   const char *Bytes = reinterpret_cast<const char *>(Value);
1710b57cec5SDimitry Andric   ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
1720b57cec5SDimitry Andric   std::string Result;
1730b57cec5SDimitry Andric   if (llvm::convertUTF16ToUTF8String(ByteArray, Result))
1740b57cec5SDimitry Andric     dumpSymbolField(OS, Name, Result, Indent);
1750b57cec5SDimitry Andric   ::SysFreeString(Value);
1760b57cec5SDimitry Andric }
1770b57cec5SDimitry Andric 
DumpDIAValue(llvm::raw_ostream & OS,int Indent,StringRef Name,IDiaSymbol * Symbol,HRESULT (__stdcall IDiaSymbol::* Method)(VARIANT *))1780b57cec5SDimitry Andric void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
1790b57cec5SDimitry Andric                   IDiaSymbol *Symbol,
1800b57cec5SDimitry Andric                   HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) {
1810b57cec5SDimitry Andric   VARIANT Value;
1820b57cec5SDimitry Andric   Value.vt = VT_EMPTY;
1830b57cec5SDimitry Andric   if (S_OK != (Symbol->*Method)(&Value))
1840b57cec5SDimitry Andric     return;
1850b57cec5SDimitry Andric   Variant V = VariantFromVARIANT(Value);
1860b57cec5SDimitry Andric 
1870b57cec5SDimitry Andric   dumpSymbolField(OS, Name, V, Indent);
1880b57cec5SDimitry Andric }
1890b57cec5SDimitry Andric } // namespace
1900b57cec5SDimitry Andric 
1910b57cec5SDimitry Andric namespace llvm {
operator <<(llvm::raw_ostream & OS,const GUID & G)1920b57cec5SDimitry Andric llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const GUID &G) {
1930b57cec5SDimitry Andric   StringRef GuidBytes(reinterpret_cast<const char *>(&G), sizeof(G));
1940b57cec5SDimitry Andric   codeview::detail::GuidAdapter A(GuidBytes);
1950b57cec5SDimitry Andric   A.format(OS, "");
1960b57cec5SDimitry Andric   return OS;
1970b57cec5SDimitry Andric }
1980b57cec5SDimitry Andric } // namespace llvm
1990b57cec5SDimitry Andric 
DIARawSymbol(const DIASession & PDBSession,CComPtr<IDiaSymbol> DiaSymbol)2000b57cec5SDimitry Andric DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,
2010b57cec5SDimitry Andric                            CComPtr<IDiaSymbol> DiaSymbol)
2020b57cec5SDimitry Andric     : Session(PDBSession), Symbol(DiaSymbol) {}
2030b57cec5SDimitry Andric 
2040b57cec5SDimitry Andric #define RAW_ID_METHOD_DUMP(Stream, Method, Session, FieldId, ShowFlags,        \
2050b57cec5SDimitry Andric                            RecurseFlags)                                       \
2060b57cec5SDimitry Andric   DumpDIAIdValue(Stream, Indent, StringRef{#Method}, Symbol,                   \
2070b57cec5SDimitry Andric                  &IDiaSymbol::get_##Method, Session, FieldId, ShowFlags,       \
2080b57cec5SDimitry Andric                  RecurseFlags);
2090b57cec5SDimitry Andric 
2100b57cec5SDimitry Andric #define RAW_METHOD_DUMP(Stream, Method)                                        \
2110b57cec5SDimitry Andric   DumpDIAValue(Stream, Indent, StringRef{#Method}, Symbol,                     \
2120b57cec5SDimitry Andric                &IDiaSymbol::get_##Method);
2130b57cec5SDimitry Andric 
2140b57cec5SDimitry Andric #define RAW_METHOD_DUMP_AS(Stream, Method, Type)                               \
2150b57cec5SDimitry Andric   DumpDIAValueAs<Type>(Stream, Indent, StringRef{#Method}, Symbol,             \
2160b57cec5SDimitry Andric                        &IDiaSymbol::get_##Method);
2170b57cec5SDimitry Andric 
dump(raw_ostream & OS,int Indent,PdbSymbolIdField ShowIdFields,PdbSymbolIdField RecurseIdFields) const2180b57cec5SDimitry Andric void DIARawSymbol::dump(raw_ostream &OS, int Indent,
2190b57cec5SDimitry Andric                         PdbSymbolIdField ShowIdFields,
2200b57cec5SDimitry Andric                         PdbSymbolIdField RecurseIdFields) const {
2210b57cec5SDimitry Andric   RAW_ID_METHOD_DUMP(OS, symIndexId, Session, PdbSymbolIdField::SymIndexId,
2220b57cec5SDimitry Andric                      ShowIdFields, RecurseIdFields);
2230b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, symTag, PDB_SymType);
2240b57cec5SDimitry Andric 
2250b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, access);
2260b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, addressOffset);
2270b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, addressSection);
2280b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, age);
2290b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, arrayIndexTypeId);
2300b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, backEndMajor);
2310b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, backEndMinor);
2320b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, backEndBuild);
2330b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, backEndQFE);
2340b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, baseDataOffset);
2350b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, baseDataSlot);
2360b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, baseSymbolId);
2370b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, baseType, PDB_BuiltinType);
2380b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, bitPosition);
2390b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, callingConvention, PDB_CallingConv);
2400b57cec5SDimitry Andric   RAW_ID_METHOD_DUMP(OS, classParentId, Session, PdbSymbolIdField::ClassParent,
2410b57cec5SDimitry Andric                      ShowIdFields, RecurseIdFields);
2420b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, compilerName);
2430b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, count);
2440b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, countLiveRanges);
2450b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, frontEndMajor);
2460b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, frontEndMinor);
2470b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, frontEndBuild);
2480b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, frontEndQFE);
2490b57cec5SDimitry Andric   RAW_ID_METHOD_DUMP(OS, lexicalParentId, Session,
2500b57cec5SDimitry Andric                      PdbSymbolIdField::LexicalParent, ShowIdFields,
2510b57cec5SDimitry Andric                      RecurseIdFields);
2520b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, libraryName);
2530b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, liveRangeStartAddressOffset);
2540b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, liveRangeStartAddressSection);
2550b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, liveRangeStartRelativeVirtualAddress);
2560b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, localBasePointerRegisterId);
2570b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, lowerBoundId);
2580b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, memorySpaceKind);
2590b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, name);
2600b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, numberOfAcceleratorPointerTags);
2610b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, numberOfColumns);
2620b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, numberOfModifiers);
2630b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, numberOfRegisterIndices);
2640b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, numberOfRows);
2650b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, objectFileName);
2660b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, oemId);
2670b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, oemSymbolId);
2680b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, offsetInUdt);
2690b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, platform);
2700b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, rank);
2710b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, registerId);
2720b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, registerType);
2730b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, relativeVirtualAddress);
2740b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, samplerSlot);
2750b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, signature);
2760b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, sizeInUdt);
2770b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, slot);
2780b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, sourceFileName);
2790b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, stride);
2800b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, subTypeId);
2810b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, symbolsFileName);
2820b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, targetOffset);
2830b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, targetRelativeVirtualAddress);
2840b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, targetVirtualAddress);
2850b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, targetSection);
2860b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, textureSlot);
2870b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, timeStamp);
2880b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, token);
2890b57cec5SDimitry Andric   RAW_ID_METHOD_DUMP(OS, typeId, Session, PdbSymbolIdField::Type, ShowIdFields,
2900b57cec5SDimitry Andric                      RecurseIdFields);
2910b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, uavSlot);
2920b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, undecoratedName);
2930b57cec5SDimitry Andric   RAW_ID_METHOD_DUMP(OS, unmodifiedTypeId, Session,
2940b57cec5SDimitry Andric                      PdbSymbolIdField::UnmodifiedType, ShowIdFields,
2950b57cec5SDimitry Andric                      RecurseIdFields);
2960b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, upperBoundId);
2970b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualBaseDispIndex);
2980b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualBaseOffset);
2990b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualTableShapeId);
3000b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, dataKind, PDB_DataKind);
3010b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, guid);
3020b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, offset);
3030b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, thisAdjust);
3040b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualBasePointerOffset);
3050b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, locationType, PDB_LocType);
3060b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, machineType);
3070b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, thunkOrdinal);
3080b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, length);
3090b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, liveRangeLength);
3100b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualAddress);
3110b57cec5SDimitry Andric   RAW_METHOD_DUMP_AS(OS, udtKind, PDB_UdtType);
3120b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, constructor);
3130b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, customCallingConvention);
3140b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, farReturn);
3150b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, code);
3160b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, compilerGenerated);
3170b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, constType);
3180b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, editAndContinueEnabled);
3190b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, function);
3200b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, stride);
3210b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, noStackOrdering);
3220b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasAlloca);
3230b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasAssignmentOperator);
3240b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isCTypes);
3250b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasCastOperator);
3260b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasDebugInfo);
3270b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasEH);
3280b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasEHa);
3290b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasInlAsm);
3300b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, framePointerPresent);
3310b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, inlSpec);
3320b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, interruptReturn);
3330b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasLongJump);
3340b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasManagedCode);
3350b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasNestedTypes);
3360b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, noInline);
3370b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, noReturn);
3380b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, optimizedCodeDebugInfo);
3390b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, overloadedOperator);
3400b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasSEH);
3410b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasSecurityChecks);
3420b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, hasSetJump);
3430b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, strictGSCheck);
3440b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isAcceleratorGroupSharedLocal);
3450b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isAcceleratorPointerTagLiveRange);
3460b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isAcceleratorStubFunction);
3470b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isAggregated);
3480b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, intro);
3490b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isCVTCIL);
3500b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isConstructorVirtualBase);
3510b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isCxxReturnUdt);
3520b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isDataAligned);
3530b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isHLSLData);
3540b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isHotpatchable);
3550b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, indirectVirtualBaseClass);
3560b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isInterfaceUdt);
3570b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, intrinsic);
3580b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isLTCG);
3590b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isLocationControlFlowDependent);
3600b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isMSILNetmodule);
3610b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isMatrixRowMajor);
3620b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, managed);
3630b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, msil);
3640b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isMultipleInheritance);
3650b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isNaked);
3660b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, nested);
3670b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isOptimizedAway);
3680b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, packed);
3690b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isPointerBasedOnSymbolValue);
3700b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isPointerToDataMember);
3710b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isPointerToMemberFunction);
3720b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, pure);
3730b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, RValueReference);
3740b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isRefUdt);
3750b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, reference);
3760b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, restrictedType);
3770b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isReturnValue);
3780b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isSafeBuffers);
3790b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, scoped);
3800b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isSdl);
3810b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isSingleInheritance);
3820b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isSplitted);
3830b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isStatic);
3840b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isStripped);
3850b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, unalignedType);
3860b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, notReached);
3870b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isValueUdt);
3880b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtual);
3890b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, virtualBaseClass);
3900b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, isVirtualInheritance);
3910b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, volatileType);
3920b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, wasInlined);
3930b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, unused);
3940b57cec5SDimitry Andric   RAW_METHOD_DUMP(OS, value);
3950b57cec5SDimitry Andric }
3960b57cec5SDimitry Andric 
3970b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findChildren(PDB_SymType Type) const3980b57cec5SDimitry Andric DIARawSymbol::findChildren(PDB_SymType Type) const {
3990b57cec5SDimitry Andric   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
4000b57cec5SDimitry Andric 
4010b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4020b57cec5SDimitry Andric   if (S_OK !=
4030b57cec5SDimitry Andric       Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator)) {
4040b57cec5SDimitry Andric     if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator))
4050b57cec5SDimitry Andric       return nullptr;
4060b57cec5SDimitry Andric   }
4070b57cec5SDimitry Andric 
408*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4090b57cec5SDimitry Andric }
4100b57cec5SDimitry Andric 
4110b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findChildren(PDB_SymType Type,StringRef Name,PDB_NameSearchFlags Flags) const4120b57cec5SDimitry Andric DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,
4130b57cec5SDimitry Andric                            PDB_NameSearchFlags Flags) const {
4140b57cec5SDimitry Andric   llvm::SmallVector<UTF16, 32> Name16;
4150b57cec5SDimitry Andric   llvm::convertUTF8ToUTF16String(Name, Name16);
4160b57cec5SDimitry Andric 
4170b57cec5SDimitry Andric   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
4180b57cec5SDimitry Andric   DWORD CompareFlags = static_cast<DWORD>(Flags);
4190b57cec5SDimitry Andric   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
4200b57cec5SDimitry Andric 
4210b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4220b57cec5SDimitry Andric   if (S_OK !=
4230b57cec5SDimitry Andric       Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))
4240b57cec5SDimitry Andric     return nullptr;
4250b57cec5SDimitry Andric 
426*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4270b57cec5SDimitry Andric }
4280b57cec5SDimitry Andric 
4290b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findChildrenByAddr(PDB_SymType Type,StringRef Name,PDB_NameSearchFlags Flags,uint32_t Section,uint32_t Offset) const4300b57cec5SDimitry Andric DIARawSymbol::findChildrenByAddr(PDB_SymType Type, StringRef Name,
4310b57cec5SDimitry Andric                                  PDB_NameSearchFlags Flags, uint32_t Section,
4320b57cec5SDimitry Andric                                  uint32_t Offset) const {
4330b57cec5SDimitry Andric   llvm::SmallVector<UTF16, 32> Name16;
4340b57cec5SDimitry Andric   llvm::convertUTF8ToUTF16String(Name, Name16);
4350b57cec5SDimitry Andric 
4360b57cec5SDimitry Andric   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
4370b57cec5SDimitry Andric 
4380b57cec5SDimitry Andric   DWORD CompareFlags = static_cast<DWORD>(Flags);
4390b57cec5SDimitry Andric   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
4400b57cec5SDimitry Andric 
4410b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4420b57cec5SDimitry Andric   if (S_OK != Symbol->findChildrenExByAddr(EnumVal, Name16Str, CompareFlags,
4430b57cec5SDimitry Andric                                            Section, Offset, &DiaEnumerator))
4440b57cec5SDimitry Andric     return nullptr;
4450b57cec5SDimitry Andric 
446*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4470b57cec5SDimitry Andric }
4480b57cec5SDimitry Andric 
4490b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findChildrenByVA(PDB_SymType Type,StringRef Name,PDB_NameSearchFlags Flags,uint64_t VA) const4500b57cec5SDimitry Andric DIARawSymbol::findChildrenByVA(PDB_SymType Type, StringRef Name,
4510b57cec5SDimitry Andric                                PDB_NameSearchFlags Flags, uint64_t VA) const {
4520b57cec5SDimitry Andric   llvm::SmallVector<UTF16, 32> Name16;
4530b57cec5SDimitry Andric   llvm::convertUTF8ToUTF16String(Name, Name16);
4540b57cec5SDimitry Andric 
4550b57cec5SDimitry Andric   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
4560b57cec5SDimitry Andric 
4570b57cec5SDimitry Andric   DWORD CompareFlags = static_cast<DWORD>(Flags);
4580b57cec5SDimitry Andric   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
4590b57cec5SDimitry Andric 
4600b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4610b57cec5SDimitry Andric   if (S_OK != Symbol->findChildrenExByVA(EnumVal, Name16Str, CompareFlags, VA,
4620b57cec5SDimitry Andric                                          &DiaEnumerator))
4630b57cec5SDimitry Andric     return nullptr;
4640b57cec5SDimitry Andric 
465*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4660b57cec5SDimitry Andric }
4670b57cec5SDimitry Andric 
4680b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findChildrenByRVA(PDB_SymType Type,StringRef Name,PDB_NameSearchFlags Flags,uint32_t RVA) const4690b57cec5SDimitry Andric DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,
4700b57cec5SDimitry Andric                                 PDB_NameSearchFlags Flags, uint32_t RVA) const {
4710b57cec5SDimitry Andric   llvm::SmallVector<UTF16, 32> Name16;
4720b57cec5SDimitry Andric   llvm::convertUTF8ToUTF16String(Name, Name16);
4730b57cec5SDimitry Andric 
4740b57cec5SDimitry Andric   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
4750b57cec5SDimitry Andric   DWORD CompareFlags = static_cast<DWORD>(Flags);
4760b57cec5SDimitry Andric   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
4770b57cec5SDimitry Andric 
4780b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4790b57cec5SDimitry Andric   if (S_OK != Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,
4800b57cec5SDimitry Andric                                           &DiaEnumerator))
4810b57cec5SDimitry Andric     return nullptr;
4820b57cec5SDimitry Andric 
483*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4840b57cec5SDimitry Andric }
4850b57cec5SDimitry Andric 
4860b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findInlineFramesByAddr(uint32_t Section,uint32_t Offset) const4870b57cec5SDimitry Andric DIARawSymbol::findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const {
4880b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4890b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineFramesByAddr(Section, Offset, &DiaEnumerator))
4900b57cec5SDimitry Andric     return nullptr;
4910b57cec5SDimitry Andric 
492*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
4930b57cec5SDimitry Andric }
4940b57cec5SDimitry Andric 
4950b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findInlineFramesByRVA(uint32_t RVA) const4960b57cec5SDimitry Andric DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const {
4970b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
4980b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))
4990b57cec5SDimitry Andric     return nullptr;
5000b57cec5SDimitry Andric 
501*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
5020b57cec5SDimitry Andric }
5030b57cec5SDimitry Andric 
5040b57cec5SDimitry Andric std::unique_ptr<IPDBEnumSymbols>
findInlineFramesByVA(uint64_t VA) const5050b57cec5SDimitry Andric DIARawSymbol::findInlineFramesByVA(uint64_t VA) const {
5060b57cec5SDimitry Andric   CComPtr<IDiaEnumSymbols> DiaEnumerator;
5070b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineFramesByVA(VA, &DiaEnumerator))
5080b57cec5SDimitry Andric     return nullptr;
5090b57cec5SDimitry Andric 
510*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
5110b57cec5SDimitry Andric }
5120b57cec5SDimitry Andric 
findInlineeLines() const5130b57cec5SDimitry Andric std::unique_ptr<IPDBEnumLineNumbers> DIARawSymbol::findInlineeLines() const {
5140b57cec5SDimitry Andric   CComPtr<IDiaEnumLineNumbers> DiaEnumerator;
5150b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineeLines(&DiaEnumerator))
5160b57cec5SDimitry Andric     return nullptr;
5170b57cec5SDimitry Andric 
518*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);
5190b57cec5SDimitry Andric }
5200b57cec5SDimitry Andric 
5210b57cec5SDimitry Andric std::unique_ptr<IPDBEnumLineNumbers>
findInlineeLinesByAddr(uint32_t Section,uint32_t Offset,uint32_t Length) const5220b57cec5SDimitry Andric DIARawSymbol::findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
5230b57cec5SDimitry Andric                                      uint32_t Length) const {
5240b57cec5SDimitry Andric   CComPtr<IDiaEnumLineNumbers> DiaEnumerator;
5250b57cec5SDimitry Andric   if (S_OK !=
5260b57cec5SDimitry Andric       Symbol->findInlineeLinesByAddr(Section, Offset, Length, &DiaEnumerator))
5270b57cec5SDimitry Andric     return nullptr;
5280b57cec5SDimitry Andric 
529*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);
5300b57cec5SDimitry Andric }
5310b57cec5SDimitry Andric 
5320b57cec5SDimitry Andric std::unique_ptr<IPDBEnumLineNumbers>
findInlineeLinesByRVA(uint32_t RVA,uint32_t Length) const5330b57cec5SDimitry Andric DIARawSymbol::findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const {
5340b57cec5SDimitry Andric   CComPtr<IDiaEnumLineNumbers> DiaEnumerator;
5350b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineeLinesByRVA(RVA, Length, &DiaEnumerator))
5360b57cec5SDimitry Andric     return nullptr;
5370b57cec5SDimitry Andric 
538*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);
5390b57cec5SDimitry Andric }
5400b57cec5SDimitry Andric 
5410b57cec5SDimitry Andric std::unique_ptr<IPDBEnumLineNumbers>
findInlineeLinesByVA(uint64_t VA,uint32_t Length) const5420b57cec5SDimitry Andric DIARawSymbol::findInlineeLinesByVA(uint64_t VA, uint32_t Length) const {
5430b57cec5SDimitry Andric   CComPtr<IDiaEnumLineNumbers> DiaEnumerator;
5440b57cec5SDimitry Andric   if (S_OK != Symbol->findInlineeLinesByVA(VA, Length, &DiaEnumerator))
5450b57cec5SDimitry Andric     return nullptr;
5460b57cec5SDimitry Andric 
547*8bcb0991SDimitry Andric   return std::make_unique<DIAEnumLineNumbers>(DiaEnumerator);
5480b57cec5SDimitry Andric }
5490b57cec5SDimitry Andric 
getDataBytes(llvm::SmallVector<uint8_t,32> & bytes) const5500b57cec5SDimitry Andric void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {
5510b57cec5SDimitry Andric   bytes.clear();
5520b57cec5SDimitry Andric 
5530b57cec5SDimitry Andric   DWORD DataSize = 0;
5540b57cec5SDimitry Andric   Symbol->get_dataBytes(0, &DataSize, nullptr);
5550b57cec5SDimitry Andric   if (DataSize == 0)
5560b57cec5SDimitry Andric     return;
5570b57cec5SDimitry Andric 
5580b57cec5SDimitry Andric   bytes.resize(DataSize);
5590b57cec5SDimitry Andric   Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());
5600b57cec5SDimitry Andric }
5610b57cec5SDimitry Andric 
getUndecoratedNameEx(PDB_UndnameFlags Flags) const5620b57cec5SDimitry Andric std::string DIARawSymbol::getUndecoratedNameEx(PDB_UndnameFlags Flags) const {
5630b57cec5SDimitry Andric   CComBSTR Result16;
5640b57cec5SDimitry Andric   if (S_OK != Symbol->get_undecoratedNameEx((DWORD)Flags, &Result16))
5650b57cec5SDimitry Andric     return std::string();
5660b57cec5SDimitry Andric 
5670b57cec5SDimitry Andric   const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
5680b57cec5SDimitry Andric   llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
5690b57cec5SDimitry Andric   std::string Result8;
5700b57cec5SDimitry Andric   if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
5710b57cec5SDimitry Andric     return std::string();
5720b57cec5SDimitry Andric   return Result8;
5730b57cec5SDimitry Andric }
5740b57cec5SDimitry Andric 
getAccess() const5750b57cec5SDimitry Andric PDB_MemberAccess DIARawSymbol::getAccess() const {
5760b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,
5770b57cec5SDimitry Andric                                                      &IDiaSymbol::get_access);
5780b57cec5SDimitry Andric }
5790b57cec5SDimitry Andric 
getAddressOffset() const5800b57cec5SDimitry Andric uint32_t DIARawSymbol::getAddressOffset() const {
5810b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);
5820b57cec5SDimitry Andric }
5830b57cec5SDimitry Andric 
getAddressSection() const5840b57cec5SDimitry Andric uint32_t DIARawSymbol::getAddressSection() const {
5850b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);
5860b57cec5SDimitry Andric }
5870b57cec5SDimitry Andric 
getAge() const5880b57cec5SDimitry Andric uint32_t DIARawSymbol::getAge() const {
5890b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);
5900b57cec5SDimitry Andric }
5910b57cec5SDimitry Andric 
getArrayIndexTypeId() const5920b57cec5SDimitry Andric SymIndexId DIARawSymbol::getArrayIndexTypeId() const {
5930b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);
5940b57cec5SDimitry Andric }
5950b57cec5SDimitry Andric 
getBackEndVersion(VersionInfo & Version) const5960b57cec5SDimitry Andric void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const {
5970b57cec5SDimitry Andric   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);
5980b57cec5SDimitry Andric   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);
5990b57cec5SDimitry Andric   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);
6000b57cec5SDimitry Andric   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);
6010b57cec5SDimitry Andric }
6020b57cec5SDimitry Andric 
getBaseDataOffset() const6030b57cec5SDimitry Andric uint32_t DIARawSymbol::getBaseDataOffset() const {
6040b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);
6050b57cec5SDimitry Andric }
6060b57cec5SDimitry Andric 
getBaseDataSlot() const6070b57cec5SDimitry Andric uint32_t DIARawSymbol::getBaseDataSlot() const {
6080b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);
6090b57cec5SDimitry Andric }
6100b57cec5SDimitry Andric 
getBaseSymbolId() const6110b57cec5SDimitry Andric SymIndexId DIARawSymbol::getBaseSymbolId() const {
6120b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);
6130b57cec5SDimitry Andric }
6140b57cec5SDimitry Andric 
getBuiltinType() const6150b57cec5SDimitry Andric PDB_BuiltinType DIARawSymbol::getBuiltinType() const {
6160b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol,
6170b57cec5SDimitry Andric                                                     &IDiaSymbol::get_baseType);
6180b57cec5SDimitry Andric }
6190b57cec5SDimitry Andric 
getBitPosition() const6200b57cec5SDimitry Andric uint32_t DIARawSymbol::getBitPosition() const {
6210b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);
6220b57cec5SDimitry Andric }
6230b57cec5SDimitry Andric 
getCallingConvention() const6240b57cec5SDimitry Andric PDB_CallingConv DIARawSymbol::getCallingConvention() const {
6250b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_CallingConv>(
6260b57cec5SDimitry Andric       Symbol, &IDiaSymbol::get_callingConvention);
6270b57cec5SDimitry Andric }
6280b57cec5SDimitry Andric 
getClassParentId() const6290b57cec5SDimitry Andric SymIndexId DIARawSymbol::getClassParentId() const {
6300b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);
6310b57cec5SDimitry Andric }
6320b57cec5SDimitry Andric 
getCompilerName() const6330b57cec5SDimitry Andric std::string DIARawSymbol::getCompilerName() const {
6340b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);
6350b57cec5SDimitry Andric }
6360b57cec5SDimitry Andric 
getCount() const6370b57cec5SDimitry Andric uint32_t DIARawSymbol::getCount() const {
6380b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);
6390b57cec5SDimitry Andric }
6400b57cec5SDimitry Andric 
getCountLiveRanges() const6410b57cec5SDimitry Andric uint32_t DIARawSymbol::getCountLiveRanges() const {
6420b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);
6430b57cec5SDimitry Andric }
6440b57cec5SDimitry Andric 
getFrontEndVersion(VersionInfo & Version) const6450b57cec5SDimitry Andric void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const {
6460b57cec5SDimitry Andric   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);
6470b57cec5SDimitry Andric   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);
6480b57cec5SDimitry Andric   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);
6490b57cec5SDimitry Andric   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);
6500b57cec5SDimitry Andric }
6510b57cec5SDimitry Andric 
getLanguage() const6520b57cec5SDimitry Andric PDB_Lang DIARawSymbol::getLanguage() const {
6530b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
6540b57cec5SDimitry Andric }
6550b57cec5SDimitry Andric 
getLexicalParentId() const6560b57cec5SDimitry Andric SymIndexId DIARawSymbol::getLexicalParentId() const {
6570b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);
6580b57cec5SDimitry Andric }
6590b57cec5SDimitry Andric 
getLibraryName() const6600b57cec5SDimitry Andric std::string DIARawSymbol::getLibraryName() const {
6610b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);
6620b57cec5SDimitry Andric }
6630b57cec5SDimitry Andric 
getLiveRangeStartAddressOffset() const6640b57cec5SDimitry Andric uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const {
6650b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
6660b57cec5SDimitry Andric                             &IDiaSymbol::get_liveRangeStartAddressOffset);
6670b57cec5SDimitry Andric }
6680b57cec5SDimitry Andric 
getLiveRangeStartAddressSection() const6690b57cec5SDimitry Andric uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const {
6700b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
6710b57cec5SDimitry Andric                             &IDiaSymbol::get_liveRangeStartAddressSection);
6720b57cec5SDimitry Andric }
6730b57cec5SDimitry Andric 
getLiveRangeStartRelativeVirtualAddress() const6740b57cec5SDimitry Andric uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const {
6750b57cec5SDimitry Andric   return PrivateGetDIAValue(
6760b57cec5SDimitry Andric       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
6770b57cec5SDimitry Andric }
6780b57cec5SDimitry Andric 
getLocalBasePointerRegisterId() const6790b57cec5SDimitry Andric codeview::RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
6800b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
6810b57cec5SDimitry Andric       Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
6820b57cec5SDimitry Andric }
6830b57cec5SDimitry Andric 
getLowerBoundId() const6840b57cec5SDimitry Andric SymIndexId DIARawSymbol::getLowerBoundId() const {
6850b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);
6860b57cec5SDimitry Andric }
6870b57cec5SDimitry Andric 
getMemorySpaceKind() const6880b57cec5SDimitry Andric uint32_t DIARawSymbol::getMemorySpaceKind() const {
6890b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);
6900b57cec5SDimitry Andric }
6910b57cec5SDimitry Andric 
getName() const6920b57cec5SDimitry Andric std::string DIARawSymbol::getName() const {
6930b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);
6940b57cec5SDimitry Andric }
6950b57cec5SDimitry Andric 
getNumberOfAcceleratorPointerTags() const6960b57cec5SDimitry Andric uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const {
6970b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
6980b57cec5SDimitry Andric                             &IDiaSymbol::get_numberOfAcceleratorPointerTags);
6990b57cec5SDimitry Andric }
7000b57cec5SDimitry Andric 
getNumberOfColumns() const7010b57cec5SDimitry Andric uint32_t DIARawSymbol::getNumberOfColumns() const {
7020b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);
7030b57cec5SDimitry Andric }
7040b57cec5SDimitry Andric 
getNumberOfModifiers() const7050b57cec5SDimitry Andric uint32_t DIARawSymbol::getNumberOfModifiers() const {
7060b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);
7070b57cec5SDimitry Andric }
7080b57cec5SDimitry Andric 
getNumberOfRegisterIndices() const7090b57cec5SDimitry Andric uint32_t DIARawSymbol::getNumberOfRegisterIndices() const {
7100b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);
7110b57cec5SDimitry Andric }
7120b57cec5SDimitry Andric 
getNumberOfRows() const7130b57cec5SDimitry Andric uint32_t DIARawSymbol::getNumberOfRows() const {
7140b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);
7150b57cec5SDimitry Andric }
7160b57cec5SDimitry Andric 
getObjectFileName() const7170b57cec5SDimitry Andric std::string DIARawSymbol::getObjectFileName() const {
7180b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);
7190b57cec5SDimitry Andric }
7200b57cec5SDimitry Andric 
getOemId() const7210b57cec5SDimitry Andric uint32_t DIARawSymbol::getOemId() const {
7220b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);
7230b57cec5SDimitry Andric }
7240b57cec5SDimitry Andric 
getOemSymbolId() const7250b57cec5SDimitry Andric SymIndexId DIARawSymbol::getOemSymbolId() const {
7260b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);
7270b57cec5SDimitry Andric }
7280b57cec5SDimitry Andric 
getOffsetInUdt() const7290b57cec5SDimitry Andric uint32_t DIARawSymbol::getOffsetInUdt() const {
7300b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);
7310b57cec5SDimitry Andric }
7320b57cec5SDimitry Andric 
getPlatform() const7330b57cec5SDimitry Andric PDB_Cpu DIARawSymbol::getPlatform() const {
7340b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);
7350b57cec5SDimitry Andric }
7360b57cec5SDimitry Andric 
getRank() const7370b57cec5SDimitry Andric uint32_t DIARawSymbol::getRank() const {
7380b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
7390b57cec5SDimitry Andric }
7400b57cec5SDimitry Andric 
getRegisterId() const7410b57cec5SDimitry Andric codeview::RegisterId DIARawSymbol::getRegisterId() const {
7420b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
7430b57cec5SDimitry Andric       Symbol, &IDiaSymbol::get_registerId);
7440b57cec5SDimitry Andric }
7450b57cec5SDimitry Andric 
getRegisterType() const7460b57cec5SDimitry Andric uint32_t DIARawSymbol::getRegisterType() const {
7470b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);
7480b57cec5SDimitry Andric }
7490b57cec5SDimitry Andric 
getRelativeVirtualAddress() const7500b57cec5SDimitry Andric uint32_t DIARawSymbol::getRelativeVirtualAddress() const {
7510b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);
7520b57cec5SDimitry Andric }
7530b57cec5SDimitry Andric 
getSamplerSlot() const7540b57cec5SDimitry Andric uint32_t DIARawSymbol::getSamplerSlot() const {
7550b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);
7560b57cec5SDimitry Andric }
7570b57cec5SDimitry Andric 
getSignature() const7580b57cec5SDimitry Andric uint32_t DIARawSymbol::getSignature() const {
7590b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);
7600b57cec5SDimitry Andric }
7610b57cec5SDimitry Andric 
getSizeInUdt() const7620b57cec5SDimitry Andric uint32_t DIARawSymbol::getSizeInUdt() const {
7630b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);
7640b57cec5SDimitry Andric }
7650b57cec5SDimitry Andric 
getSlot() const7660b57cec5SDimitry Andric uint32_t DIARawSymbol::getSlot() const {
7670b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);
7680b57cec5SDimitry Andric }
7690b57cec5SDimitry Andric 
getSourceFileName() const7700b57cec5SDimitry Andric std::string DIARawSymbol::getSourceFileName() const {
7710b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);
7720b57cec5SDimitry Andric }
7730b57cec5SDimitry Andric 
getSrcLineOnTypeDefn() const7740b57cec5SDimitry Andric std::unique_ptr<IPDBLineNumber> DIARawSymbol::getSrcLineOnTypeDefn() const {
7750b57cec5SDimitry Andric   CComPtr<IDiaLineNumber> LineNumber;
7760b57cec5SDimitry Andric   if (FAILED(Symbol->getSrcLineOnTypeDefn(&LineNumber)) || !LineNumber)
7770b57cec5SDimitry Andric     return nullptr;
7780b57cec5SDimitry Andric 
779*8bcb0991SDimitry Andric   return std::make_unique<DIALineNumber>(LineNumber);
7800b57cec5SDimitry Andric }
7810b57cec5SDimitry Andric 
getStride() const7820b57cec5SDimitry Andric uint32_t DIARawSymbol::getStride() const {
7830b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
7840b57cec5SDimitry Andric }
7850b57cec5SDimitry Andric 
getSubTypeId() const7860b57cec5SDimitry Andric SymIndexId DIARawSymbol::getSubTypeId() const {
7870b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);
7880b57cec5SDimitry Andric }
7890b57cec5SDimitry Andric 
getSymbolsFileName() const7900b57cec5SDimitry Andric std::string DIARawSymbol::getSymbolsFileName() const {
7910b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);
7920b57cec5SDimitry Andric }
7930b57cec5SDimitry Andric 
getSymIndexId() const7940b57cec5SDimitry Andric SymIndexId DIARawSymbol::getSymIndexId() const {
7950b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);
7960b57cec5SDimitry Andric }
7970b57cec5SDimitry Andric 
getTargetOffset() const7980b57cec5SDimitry Andric uint32_t DIARawSymbol::getTargetOffset() const {
7990b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);
8000b57cec5SDimitry Andric }
8010b57cec5SDimitry Andric 
getTargetRelativeVirtualAddress() const8020b57cec5SDimitry Andric uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const {
8030b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
8040b57cec5SDimitry Andric                             &IDiaSymbol::get_targetRelativeVirtualAddress);
8050b57cec5SDimitry Andric }
8060b57cec5SDimitry Andric 
getTargetVirtualAddress() const8070b57cec5SDimitry Andric uint64_t DIARawSymbol::getTargetVirtualAddress() const {
8080b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);
8090b57cec5SDimitry Andric }
8100b57cec5SDimitry Andric 
getTargetSection() const8110b57cec5SDimitry Andric uint32_t DIARawSymbol::getTargetSection() const {
8120b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);
8130b57cec5SDimitry Andric }
8140b57cec5SDimitry Andric 
getTextureSlot() const8150b57cec5SDimitry Andric uint32_t DIARawSymbol::getTextureSlot() const {
8160b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);
8170b57cec5SDimitry Andric }
8180b57cec5SDimitry Andric 
getTimeStamp() const8190b57cec5SDimitry Andric uint32_t DIARawSymbol::getTimeStamp() const {
8200b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);
8210b57cec5SDimitry Andric }
8220b57cec5SDimitry Andric 
getToken() const8230b57cec5SDimitry Andric uint32_t DIARawSymbol::getToken() const {
8240b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);
8250b57cec5SDimitry Andric }
8260b57cec5SDimitry Andric 
getTypeId() const8270b57cec5SDimitry Andric SymIndexId DIARawSymbol::getTypeId() const {
8280b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);
8290b57cec5SDimitry Andric }
8300b57cec5SDimitry Andric 
getUavSlot() const8310b57cec5SDimitry Andric uint32_t DIARawSymbol::getUavSlot() const {
8320b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);
8330b57cec5SDimitry Andric }
8340b57cec5SDimitry Andric 
getUndecoratedName() const8350b57cec5SDimitry Andric std::string DIARawSymbol::getUndecoratedName() const {
8360b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);
8370b57cec5SDimitry Andric }
8380b57cec5SDimitry Andric 
getUnmodifiedTypeId() const8390b57cec5SDimitry Andric SymIndexId DIARawSymbol::getUnmodifiedTypeId() const {
8400b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);
8410b57cec5SDimitry Andric }
8420b57cec5SDimitry Andric 
getUpperBoundId() const8430b57cec5SDimitry Andric SymIndexId DIARawSymbol::getUpperBoundId() const {
8440b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);
8450b57cec5SDimitry Andric }
8460b57cec5SDimitry Andric 
getValue() const8470b57cec5SDimitry Andric Variant DIARawSymbol::getValue() const {
8480b57cec5SDimitry Andric   VARIANT Value;
8490b57cec5SDimitry Andric   Value.vt = VT_EMPTY;
8500b57cec5SDimitry Andric   if (S_OK != Symbol->get_value(&Value))
8510b57cec5SDimitry Andric     return Variant();
8520b57cec5SDimitry Andric 
8530b57cec5SDimitry Andric   return VariantFromVARIANT(Value);
8540b57cec5SDimitry Andric }
8550b57cec5SDimitry Andric 
getVirtualBaseDispIndex() const8560b57cec5SDimitry Andric uint32_t DIARawSymbol::getVirtualBaseDispIndex() const {
8570b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);
8580b57cec5SDimitry Andric }
8590b57cec5SDimitry Andric 
getVirtualBaseOffset() const8600b57cec5SDimitry Andric uint32_t DIARawSymbol::getVirtualBaseOffset() const {
8610b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);
8620b57cec5SDimitry Andric }
8630b57cec5SDimitry Andric 
getVirtualTableShapeId() const8640b57cec5SDimitry Andric SymIndexId DIARawSymbol::getVirtualTableShapeId() const {
8650b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);
8660b57cec5SDimitry Andric }
8670b57cec5SDimitry Andric 
8680b57cec5SDimitry Andric std::unique_ptr<PDBSymbolTypeBuiltin>
getVirtualBaseTableType() const8690b57cec5SDimitry Andric DIARawSymbol::getVirtualBaseTableType() const {
8700b57cec5SDimitry Andric   CComPtr<IDiaSymbol> TableType;
8710b57cec5SDimitry Andric   if (FAILED(Symbol->get_virtualBaseTableType(&TableType)) || !TableType)
8720b57cec5SDimitry Andric     return nullptr;
8730b57cec5SDimitry Andric 
874*8bcb0991SDimitry Andric   auto RawVT = std::make_unique<DIARawSymbol>(Session, TableType);
8750b57cec5SDimitry Andric   auto Pointer =
8760b57cec5SDimitry Andric       PDBSymbol::createAs<PDBSymbolTypePointer>(Session, std::move(RawVT));
8770b57cec5SDimitry Andric   return unique_dyn_cast<PDBSymbolTypeBuiltin>(Pointer->getPointeeType());
8780b57cec5SDimitry Andric }
8790b57cec5SDimitry Andric 
getDataKind() const8800b57cec5SDimitry Andric PDB_DataKind DIARawSymbol::getDataKind() const {
8810b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,
8820b57cec5SDimitry Andric                                                  &IDiaSymbol::get_dataKind);
8830b57cec5SDimitry Andric }
8840b57cec5SDimitry Andric 
getSymTag() const8850b57cec5SDimitry Andric PDB_SymType DIARawSymbol::getSymTag() const {
8860b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,
8870b57cec5SDimitry Andric                                                 &IDiaSymbol::get_symTag);
8880b57cec5SDimitry Andric }
8890b57cec5SDimitry Andric 
getGuid() const8900b57cec5SDimitry Andric codeview::GUID DIARawSymbol::getGuid() const {
8910b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);
8920b57cec5SDimitry Andric }
8930b57cec5SDimitry Andric 
getOffset() const8940b57cec5SDimitry Andric int32_t DIARawSymbol::getOffset() const {
8950b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);
8960b57cec5SDimitry Andric }
8970b57cec5SDimitry Andric 
getThisAdjust() const8980b57cec5SDimitry Andric int32_t DIARawSymbol::getThisAdjust() const {
8990b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);
9000b57cec5SDimitry Andric }
9010b57cec5SDimitry Andric 
getVirtualBasePointerOffset() const9020b57cec5SDimitry Andric int32_t DIARawSymbol::getVirtualBasePointerOffset() const {
9030b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);
9040b57cec5SDimitry Andric }
9050b57cec5SDimitry Andric 
getLocationType() const9060b57cec5SDimitry Andric PDB_LocType DIARawSymbol::getLocationType() const {
9070b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,
9080b57cec5SDimitry Andric                                                 &IDiaSymbol::get_locationType);
9090b57cec5SDimitry Andric }
9100b57cec5SDimitry Andric 
getMachineType() const9110b57cec5SDimitry Andric PDB_Machine DIARawSymbol::getMachineType() const {
9120b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,
9130b57cec5SDimitry Andric                                                 &IDiaSymbol::get_machineType);
9140b57cec5SDimitry Andric }
9150b57cec5SDimitry Andric 
getThunkOrdinal() const9160b57cec5SDimitry Andric codeview::ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
9170b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, codeview::ThunkOrdinal>(
9180b57cec5SDimitry Andric       Symbol, &IDiaSymbol::get_thunkOrdinal);
9190b57cec5SDimitry Andric }
9200b57cec5SDimitry Andric 
getLength() const9210b57cec5SDimitry Andric uint64_t DIARawSymbol::getLength() const {
9220b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);
9230b57cec5SDimitry Andric }
9240b57cec5SDimitry Andric 
getLiveRangeLength() const9250b57cec5SDimitry Andric uint64_t DIARawSymbol::getLiveRangeLength() const {
9260b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);
9270b57cec5SDimitry Andric }
9280b57cec5SDimitry Andric 
getVirtualAddress() const9290b57cec5SDimitry Andric uint64_t DIARawSymbol::getVirtualAddress() const {
9300b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);
9310b57cec5SDimitry Andric }
9320b57cec5SDimitry Andric 
getUdtKind() const9330b57cec5SDimitry Andric PDB_UdtType DIARawSymbol::getUdtKind() const {
9340b57cec5SDimitry Andric   return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,
9350b57cec5SDimitry Andric                                                 &IDiaSymbol::get_udtKind);
9360b57cec5SDimitry Andric }
9370b57cec5SDimitry Andric 
hasConstructor() const9380b57cec5SDimitry Andric bool DIARawSymbol::hasConstructor() const {
9390b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);
9400b57cec5SDimitry Andric }
9410b57cec5SDimitry Andric 
hasCustomCallingConvention() const9420b57cec5SDimitry Andric bool DIARawSymbol::hasCustomCallingConvention() const {
9430b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);
9440b57cec5SDimitry Andric }
9450b57cec5SDimitry Andric 
hasFarReturn() const9460b57cec5SDimitry Andric bool DIARawSymbol::hasFarReturn() const {
9470b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);
9480b57cec5SDimitry Andric }
9490b57cec5SDimitry Andric 
isCode() const9500b57cec5SDimitry Andric bool DIARawSymbol::isCode() const {
9510b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);
9520b57cec5SDimitry Andric }
9530b57cec5SDimitry Andric 
isCompilerGenerated() const9540b57cec5SDimitry Andric bool DIARawSymbol::isCompilerGenerated() const {
9550b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);
9560b57cec5SDimitry Andric }
9570b57cec5SDimitry Andric 
isConstType() const9580b57cec5SDimitry Andric bool DIARawSymbol::isConstType() const {
9590b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);
9600b57cec5SDimitry Andric }
9610b57cec5SDimitry Andric 
isEditAndContinueEnabled() const9620b57cec5SDimitry Andric bool DIARawSymbol::isEditAndContinueEnabled() const {
9630b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);
9640b57cec5SDimitry Andric }
9650b57cec5SDimitry Andric 
isFunction() const9660b57cec5SDimitry Andric bool DIARawSymbol::isFunction() const {
9670b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);
9680b57cec5SDimitry Andric }
9690b57cec5SDimitry Andric 
getAddressTaken() const9700b57cec5SDimitry Andric bool DIARawSymbol::getAddressTaken() const {
9710b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
9720b57cec5SDimitry Andric }
9730b57cec5SDimitry Andric 
getNoStackOrdering() const9740b57cec5SDimitry Andric bool DIARawSymbol::getNoStackOrdering() const {
9750b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);
9760b57cec5SDimitry Andric }
9770b57cec5SDimitry Andric 
hasAlloca() const9780b57cec5SDimitry Andric bool DIARawSymbol::hasAlloca() const {
9790b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);
9800b57cec5SDimitry Andric }
9810b57cec5SDimitry Andric 
hasAssignmentOperator() const9820b57cec5SDimitry Andric bool DIARawSymbol::hasAssignmentOperator() const {
9830b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);
9840b57cec5SDimitry Andric }
9850b57cec5SDimitry Andric 
hasCTypes() const9860b57cec5SDimitry Andric bool DIARawSymbol::hasCTypes() const {
9870b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);
9880b57cec5SDimitry Andric }
9890b57cec5SDimitry Andric 
hasCastOperator() const9900b57cec5SDimitry Andric bool DIARawSymbol::hasCastOperator() const {
9910b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);
9920b57cec5SDimitry Andric }
9930b57cec5SDimitry Andric 
hasDebugInfo() const9940b57cec5SDimitry Andric bool DIARawSymbol::hasDebugInfo() const {
9950b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);
9960b57cec5SDimitry Andric }
9970b57cec5SDimitry Andric 
hasEH() const9980b57cec5SDimitry Andric bool DIARawSymbol::hasEH() const {
9990b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);
10000b57cec5SDimitry Andric }
10010b57cec5SDimitry Andric 
hasEHa() const10020b57cec5SDimitry Andric bool DIARawSymbol::hasEHa() const {
10030b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);
10040b57cec5SDimitry Andric }
10050b57cec5SDimitry Andric 
hasInlAsm() const10060b57cec5SDimitry Andric bool DIARawSymbol::hasInlAsm() const {
10070b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);
10080b57cec5SDimitry Andric }
10090b57cec5SDimitry Andric 
hasInlineAttribute() const10100b57cec5SDimitry Andric bool DIARawSymbol::hasInlineAttribute() const {
10110b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);
10120b57cec5SDimitry Andric }
10130b57cec5SDimitry Andric 
hasInterruptReturn() const10140b57cec5SDimitry Andric bool DIARawSymbol::hasInterruptReturn() const {
10150b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
10160b57cec5SDimitry Andric }
10170b57cec5SDimitry Andric 
hasFramePointer() const10180b57cec5SDimitry Andric bool DIARawSymbol::hasFramePointer() const {
10190b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
10200b57cec5SDimitry Andric }
10210b57cec5SDimitry Andric 
hasLongJump() const10220b57cec5SDimitry Andric bool DIARawSymbol::hasLongJump() const {
10230b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
10240b57cec5SDimitry Andric }
10250b57cec5SDimitry Andric 
hasManagedCode() const10260b57cec5SDimitry Andric bool DIARawSymbol::hasManagedCode() const {
10270b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);
10280b57cec5SDimitry Andric }
10290b57cec5SDimitry Andric 
hasNestedTypes() const10300b57cec5SDimitry Andric bool DIARawSymbol::hasNestedTypes() const {
10310b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);
10320b57cec5SDimitry Andric }
10330b57cec5SDimitry Andric 
hasNoInlineAttribute() const10340b57cec5SDimitry Andric bool DIARawSymbol::hasNoInlineAttribute() const {
10350b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);
10360b57cec5SDimitry Andric }
10370b57cec5SDimitry Andric 
hasNoReturnAttribute() const10380b57cec5SDimitry Andric bool DIARawSymbol::hasNoReturnAttribute() const {
10390b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);
10400b57cec5SDimitry Andric }
10410b57cec5SDimitry Andric 
hasOptimizedCodeDebugInfo() const10420b57cec5SDimitry Andric bool DIARawSymbol::hasOptimizedCodeDebugInfo() const {
10430b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);
10440b57cec5SDimitry Andric }
10450b57cec5SDimitry Andric 
hasOverloadedOperator() const10460b57cec5SDimitry Andric bool DIARawSymbol::hasOverloadedOperator() const {
10470b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);
10480b57cec5SDimitry Andric }
10490b57cec5SDimitry Andric 
hasSEH() const10500b57cec5SDimitry Andric bool DIARawSymbol::hasSEH() const {
10510b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);
10520b57cec5SDimitry Andric }
10530b57cec5SDimitry Andric 
hasSecurityChecks() const10540b57cec5SDimitry Andric bool DIARawSymbol::hasSecurityChecks() const {
10550b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);
10560b57cec5SDimitry Andric }
10570b57cec5SDimitry Andric 
hasSetJump() const10580b57cec5SDimitry Andric bool DIARawSymbol::hasSetJump() const {
10590b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);
10600b57cec5SDimitry Andric }
10610b57cec5SDimitry Andric 
hasStrictGSCheck() const10620b57cec5SDimitry Andric bool DIARawSymbol::hasStrictGSCheck() const {
10630b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);
10640b57cec5SDimitry Andric }
10650b57cec5SDimitry Andric 
isAcceleratorGroupSharedLocal() const10660b57cec5SDimitry Andric bool DIARawSymbol::isAcceleratorGroupSharedLocal() const {
10670b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
10680b57cec5SDimitry Andric                             &IDiaSymbol::get_isAcceleratorGroupSharedLocal);
10690b57cec5SDimitry Andric }
10700b57cec5SDimitry Andric 
isAcceleratorPointerTagLiveRange() const10710b57cec5SDimitry Andric bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const {
10720b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
10730b57cec5SDimitry Andric                             &IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
10740b57cec5SDimitry Andric }
10750b57cec5SDimitry Andric 
isAcceleratorStubFunction() const10760b57cec5SDimitry Andric bool DIARawSymbol::isAcceleratorStubFunction() const {
10770b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);
10780b57cec5SDimitry Andric }
10790b57cec5SDimitry Andric 
isAggregated() const10800b57cec5SDimitry Andric bool DIARawSymbol::isAggregated() const {
10810b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);
10820b57cec5SDimitry Andric }
10830b57cec5SDimitry Andric 
isIntroVirtualFunction() const10840b57cec5SDimitry Andric bool DIARawSymbol::isIntroVirtualFunction() const {
10850b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);
10860b57cec5SDimitry Andric }
10870b57cec5SDimitry Andric 
isCVTCIL() const10880b57cec5SDimitry Andric bool DIARawSymbol::isCVTCIL() const {
10890b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);
10900b57cec5SDimitry Andric }
10910b57cec5SDimitry Andric 
isConstructorVirtualBase() const10920b57cec5SDimitry Andric bool DIARawSymbol::isConstructorVirtualBase() const {
10930b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);
10940b57cec5SDimitry Andric }
10950b57cec5SDimitry Andric 
isCxxReturnUdt() const10960b57cec5SDimitry Andric bool DIARawSymbol::isCxxReturnUdt() const {
10970b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);
10980b57cec5SDimitry Andric }
10990b57cec5SDimitry Andric 
isDataAligned() const11000b57cec5SDimitry Andric bool DIARawSymbol::isDataAligned() const {
11010b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);
11020b57cec5SDimitry Andric }
11030b57cec5SDimitry Andric 
isHLSLData() const11040b57cec5SDimitry Andric bool DIARawSymbol::isHLSLData() const {
11050b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);
11060b57cec5SDimitry Andric }
11070b57cec5SDimitry Andric 
isHotpatchable() const11080b57cec5SDimitry Andric bool DIARawSymbol::isHotpatchable() const {
11090b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);
11100b57cec5SDimitry Andric }
11110b57cec5SDimitry Andric 
isIndirectVirtualBaseClass() const11120b57cec5SDimitry Andric bool DIARawSymbol::isIndirectVirtualBaseClass() const {
11130b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);
11140b57cec5SDimitry Andric }
11150b57cec5SDimitry Andric 
isInterfaceUdt() const11160b57cec5SDimitry Andric bool DIARawSymbol::isInterfaceUdt() const {
11170b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);
11180b57cec5SDimitry Andric }
11190b57cec5SDimitry Andric 
isIntrinsic() const11200b57cec5SDimitry Andric bool DIARawSymbol::isIntrinsic() const {
11210b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);
11220b57cec5SDimitry Andric }
11230b57cec5SDimitry Andric 
isLTCG() const11240b57cec5SDimitry Andric bool DIARawSymbol::isLTCG() const {
11250b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);
11260b57cec5SDimitry Andric }
11270b57cec5SDimitry Andric 
isLocationControlFlowDependent() const11280b57cec5SDimitry Andric bool DIARawSymbol::isLocationControlFlowDependent() const {
11290b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
11300b57cec5SDimitry Andric                             &IDiaSymbol::get_isLocationControlFlowDependent);
11310b57cec5SDimitry Andric }
11320b57cec5SDimitry Andric 
isMSILNetmodule() const11330b57cec5SDimitry Andric bool DIARawSymbol::isMSILNetmodule() const {
11340b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);
11350b57cec5SDimitry Andric }
11360b57cec5SDimitry Andric 
isMatrixRowMajor() const11370b57cec5SDimitry Andric bool DIARawSymbol::isMatrixRowMajor() const {
11380b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);
11390b57cec5SDimitry Andric }
11400b57cec5SDimitry Andric 
isManagedCode() const11410b57cec5SDimitry Andric bool DIARawSymbol::isManagedCode() const {
11420b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);
11430b57cec5SDimitry Andric }
11440b57cec5SDimitry Andric 
isMSILCode() const11450b57cec5SDimitry Andric bool DIARawSymbol::isMSILCode() const {
11460b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);
11470b57cec5SDimitry Andric }
11480b57cec5SDimitry Andric 
isMultipleInheritance() const11490b57cec5SDimitry Andric bool DIARawSymbol::isMultipleInheritance() const {
11500b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);
11510b57cec5SDimitry Andric }
11520b57cec5SDimitry Andric 
isNaked() const11530b57cec5SDimitry Andric bool DIARawSymbol::isNaked() const {
11540b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);
11550b57cec5SDimitry Andric }
11560b57cec5SDimitry Andric 
isNested() const11570b57cec5SDimitry Andric bool DIARawSymbol::isNested() const {
11580b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);
11590b57cec5SDimitry Andric }
11600b57cec5SDimitry Andric 
isOptimizedAway() const11610b57cec5SDimitry Andric bool DIARawSymbol::isOptimizedAway() const {
11620b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);
11630b57cec5SDimitry Andric }
11640b57cec5SDimitry Andric 
isPacked() const11650b57cec5SDimitry Andric bool DIARawSymbol::isPacked() const {
11660b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);
11670b57cec5SDimitry Andric }
11680b57cec5SDimitry Andric 
isPointerBasedOnSymbolValue() const11690b57cec5SDimitry Andric bool DIARawSymbol::isPointerBasedOnSymbolValue() const {
11700b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol,
11710b57cec5SDimitry Andric                             &IDiaSymbol::get_isPointerBasedOnSymbolValue);
11720b57cec5SDimitry Andric }
11730b57cec5SDimitry Andric 
isPointerToDataMember() const11740b57cec5SDimitry Andric bool DIARawSymbol::isPointerToDataMember() const {
11750b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);
11760b57cec5SDimitry Andric }
11770b57cec5SDimitry Andric 
isPointerToMemberFunction() const11780b57cec5SDimitry Andric bool DIARawSymbol::isPointerToMemberFunction() const {
11790b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);
11800b57cec5SDimitry Andric }
11810b57cec5SDimitry Andric 
isPureVirtual() const11820b57cec5SDimitry Andric bool DIARawSymbol::isPureVirtual() const {
11830b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);
11840b57cec5SDimitry Andric }
11850b57cec5SDimitry Andric 
isRValueReference() const11860b57cec5SDimitry Andric bool DIARawSymbol::isRValueReference() const {
11870b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);
11880b57cec5SDimitry Andric }
11890b57cec5SDimitry Andric 
isRefUdt() const11900b57cec5SDimitry Andric bool DIARawSymbol::isRefUdt() const {
11910b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);
11920b57cec5SDimitry Andric }
11930b57cec5SDimitry Andric 
isReference() const11940b57cec5SDimitry Andric bool DIARawSymbol::isReference() const {
11950b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);
11960b57cec5SDimitry Andric }
11970b57cec5SDimitry Andric 
isRestrictedType() const11980b57cec5SDimitry Andric bool DIARawSymbol::isRestrictedType() const {
11990b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);
12000b57cec5SDimitry Andric }
12010b57cec5SDimitry Andric 
isReturnValue() const12020b57cec5SDimitry Andric bool DIARawSymbol::isReturnValue() const {
12030b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);
12040b57cec5SDimitry Andric }
12050b57cec5SDimitry Andric 
isSafeBuffers() const12060b57cec5SDimitry Andric bool DIARawSymbol::isSafeBuffers() const {
12070b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);
12080b57cec5SDimitry Andric }
12090b57cec5SDimitry Andric 
isScoped() const12100b57cec5SDimitry Andric bool DIARawSymbol::isScoped() const {
12110b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);
12120b57cec5SDimitry Andric }
12130b57cec5SDimitry Andric 
isSdl() const12140b57cec5SDimitry Andric bool DIARawSymbol::isSdl() const {
12150b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);
12160b57cec5SDimitry Andric }
12170b57cec5SDimitry Andric 
isSingleInheritance() const12180b57cec5SDimitry Andric bool DIARawSymbol::isSingleInheritance() const {
12190b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);
12200b57cec5SDimitry Andric }
12210b57cec5SDimitry Andric 
isSplitted() const12220b57cec5SDimitry Andric bool DIARawSymbol::isSplitted() const {
12230b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);
12240b57cec5SDimitry Andric }
12250b57cec5SDimitry Andric 
isStatic() const12260b57cec5SDimitry Andric bool DIARawSymbol::isStatic() const {
12270b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);
12280b57cec5SDimitry Andric }
12290b57cec5SDimitry Andric 
hasPrivateSymbols() const12300b57cec5SDimitry Andric bool DIARawSymbol::hasPrivateSymbols() const {
12310b57cec5SDimitry Andric   // hasPrivateSymbols is the opposite of isStripped, but we expose
12320b57cec5SDimitry Andric   // hasPrivateSymbols as a more intuitive interface.
12330b57cec5SDimitry Andric   return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);
12340b57cec5SDimitry Andric }
12350b57cec5SDimitry Andric 
isUnalignedType() const12360b57cec5SDimitry Andric bool DIARawSymbol::isUnalignedType() const {
12370b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);
12380b57cec5SDimitry Andric }
12390b57cec5SDimitry Andric 
isUnreached() const12400b57cec5SDimitry Andric bool DIARawSymbol::isUnreached() const {
12410b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);
12420b57cec5SDimitry Andric }
12430b57cec5SDimitry Andric 
isValueUdt() const12440b57cec5SDimitry Andric bool DIARawSymbol::isValueUdt() const {
12450b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);
12460b57cec5SDimitry Andric }
12470b57cec5SDimitry Andric 
isVirtual() const12480b57cec5SDimitry Andric bool DIARawSymbol::isVirtual() const {
12490b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);
12500b57cec5SDimitry Andric }
12510b57cec5SDimitry Andric 
isVirtualBaseClass() const12520b57cec5SDimitry Andric bool DIARawSymbol::isVirtualBaseClass() const {
12530b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);
12540b57cec5SDimitry Andric }
12550b57cec5SDimitry Andric 
isVirtualInheritance() const12560b57cec5SDimitry Andric bool DIARawSymbol::isVirtualInheritance() const {
12570b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);
12580b57cec5SDimitry Andric }
12590b57cec5SDimitry Andric 
isVolatileType() const12600b57cec5SDimitry Andric bool DIARawSymbol::isVolatileType() const {
12610b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);
12620b57cec5SDimitry Andric }
12630b57cec5SDimitry Andric 
wasInlined() const12640b57cec5SDimitry Andric bool DIARawSymbol::wasInlined() const {
12650b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined);
12660b57cec5SDimitry Andric }
12670b57cec5SDimitry Andric 
getUnused() const12680b57cec5SDimitry Andric std::string DIARawSymbol::getUnused() const {
12690b57cec5SDimitry Andric   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused);
12700b57cec5SDimitry Andric }
1271