Home | History | Annotate | Download | only in DIA
      1 //===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "llvm/ADT/STLExtras.h"
     11 #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
     12 #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
     13 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
     14 #include "llvm/DebugInfo/PDB/PDBExtras.h"
     15 #include "llvm/Support/ConvertUTF.h"
     16 #include "llvm/Support/raw_ostream.h"
     17 
     18 using namespace llvm;
     19 
     20 namespace {
     21 Variant VariantFromVARIANT(const VARIANT &V) {
     22   Variant Result;
     23   switch (V.vt) {
     24   case VT_I1:
     25     Result.Int8 = V.cVal;
     26     Result.Type = PDB_VariantType::Int8;
     27     break;
     28   case VT_I2:
     29     Result.Int16 = V.iVal;
     30     Result.Type = PDB_VariantType::Int16;
     31     break;
     32   case VT_I4:
     33     Result.Int32 = V.intVal;
     34     Result.Type = PDB_VariantType::Int32;
     35     break;
     36   case VT_I8:
     37     Result.Int64 = V.llVal;
     38     Result.Type = PDB_VariantType::Int64;
     39     break;
     40   case VT_UI1:
     41     Result.UInt8 = V.bVal;
     42     Result.Type = PDB_VariantType::UInt8;
     43     break;
     44   case VT_UI2:
     45     Result.UInt16 = V.uiVal;
     46     Result.Type = PDB_VariantType::UInt16;
     47     break;
     48   case VT_UI4:
     49     Result.UInt32 = V.uintVal;
     50     Result.Type = PDB_VariantType::UInt32;
     51     break;
     52   case VT_UI8:
     53     Result.UInt64 = V.ullVal;
     54     Result.Type = PDB_VariantType::UInt64;
     55     break;
     56   case VT_BOOL:
     57     Result.Bool = (V.boolVal == VARIANT_TRUE) ? true : false;
     58     Result.Type = PDB_VariantType::Bool;
     59     break;
     60   case VT_R4:
     61     Result.Single = V.fltVal;
     62     Result.Type = PDB_VariantType::Single;
     63     break;
     64   case VT_R8:
     65     Result.Double = V.dblVal;
     66     Result.Type = PDB_VariantType::Double;
     67     break;
     68   default:
     69     Result.Type = PDB_VariantType::Unknown;
     70     break;
     71   }
     72   return Result;
     73 }
     74 
     75 template <typename ArgType>
     76 ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,
     77                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
     78   ArgType Value;
     79   if (S_OK == (Symbol->*Method)(&Value))
     80     return static_cast<ArgType>(Value);
     81 
     82   return ArgType();
     83 }
     84 
     85 template <typename ArgType, typename RetType>
     86 RetType PrivateGetDIAValue(IDiaSymbol *Symbol,
     87                            HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
     88   ArgType Value;
     89   if (S_OK == (Symbol->*Method)(&Value))
     90     return static_cast<RetType>(Value);
     91 
     92   return RetType();
     93 }
     94 
     95 std::string
     96 PrivateGetDIAValue(IDiaSymbol *Symbol,
     97                    HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
     98   CComBSTR Result16;
     99   if (S_OK != (Symbol->*Method)(&Result16))
    100     return std::string();
    101 
    102   const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
    103   llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
    104   std::string Result8;
    105   if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
    106     return std::string();
    107   return Result8;
    108 }
    109 
    110 PDB_UniqueId
    111 PrivateGetDIAValue(IDiaSymbol *Symbol,
    112                    HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {
    113   GUID Result;
    114   if (S_OK != (Symbol->*Method)(&Result))
    115     return PDB_UniqueId();
    116 
    117   static_assert(sizeof(PDB_UniqueId) == sizeof(GUID),
    118                 "PDB_UniqueId is the wrong size!");
    119   PDB_UniqueId IdResult;
    120   ::memcpy(&IdResult, &Result, sizeof(GUID));
    121   return IdResult;
    122 }
    123 
    124 template <typename ArgType>
    125 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
    126                   IDiaSymbol *Symbol,
    127                   HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
    128   ArgType Value;
    129   if (S_OK == (Symbol->*Method)(&Value)) {
    130     OS << "\n";
    131     OS.indent(Indent);
    132     OS << Name << ": " << Value;
    133   }
    134 }
    135 
    136 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
    137                   IDiaSymbol *Symbol,
    138                   HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
    139   BSTR Value = nullptr;
    140   if (S_OK != (Symbol->*Method)(&Value))
    141     return;
    142   const char *Bytes = reinterpret_cast<const char *>(Value);
    143   ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
    144   std::string Result;
    145   if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) {
    146     OS << "\n";
    147     OS.indent(Indent);
    148     OS << Name << ": " << Result;
    149   }
    150   ::SysFreeString(Value);
    151 }
    152 
    153 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
    154                   IDiaSymbol *Symbol,
    155                   HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) {
    156   VARIANT Value;
    157   Value.vt = VT_EMPTY;
    158   if (S_OK != (Symbol->*Method)(&Value))
    159     return;
    160   OS << "\n";
    161   OS.indent(Indent);
    162   Variant V = VariantFromVARIANT(Value);
    163   OS << V;
    164 }
    165 }
    166 
    167 namespace llvm {
    168 raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid) {
    169   const PDB_UniqueId *Id = reinterpret_cast<const PDB_UniqueId *>(&Guid);
    170   OS << *Id;
    171   return OS;
    172 }
    173 }
    174 
    175 DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,
    176                            CComPtr<IDiaSymbol> DiaSymbol)
    177     : Session(PDBSession), Symbol(DiaSymbol) {}
    178 
    179 #define RAW_METHOD_DUMP(Stream, Method)                                        \
    180   DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
    181 
    182 void DIARawSymbol::dump(raw_ostream &OS, int Indent) const {
    183   RAW_METHOD_DUMP(OS, get_access)
    184   RAW_METHOD_DUMP(OS, get_addressOffset)
    185   RAW_METHOD_DUMP(OS, get_addressSection)
    186   RAW_METHOD_DUMP(OS, get_age)
    187   RAW_METHOD_DUMP(OS, get_arrayIndexTypeId)
    188   RAW_METHOD_DUMP(OS, get_backEndMajor)
    189   RAW_METHOD_DUMP(OS, get_backEndMinor)
    190   RAW_METHOD_DUMP(OS, get_backEndBuild)
    191   RAW_METHOD_DUMP(OS, get_backEndQFE)
    192   RAW_METHOD_DUMP(OS, get_baseDataOffset)
    193   RAW_METHOD_DUMP(OS, get_baseDataSlot)
    194   RAW_METHOD_DUMP(OS, get_baseSymbolId)
    195   RAW_METHOD_DUMP(OS, get_baseType)
    196   RAW_METHOD_DUMP(OS, get_bitPosition)
    197   RAW_METHOD_DUMP(OS, get_callingConvention)
    198   RAW_METHOD_DUMP(OS, get_classParentId)
    199   RAW_METHOD_DUMP(OS, get_compilerName)
    200   RAW_METHOD_DUMP(OS, get_count)
    201   RAW_METHOD_DUMP(OS, get_countLiveRanges)
    202   RAW_METHOD_DUMP(OS, get_frontEndMajor)
    203   RAW_METHOD_DUMP(OS, get_frontEndMinor)
    204   RAW_METHOD_DUMP(OS, get_frontEndBuild)
    205   RAW_METHOD_DUMP(OS, get_frontEndQFE)
    206   RAW_METHOD_DUMP(OS, get_lexicalParentId)
    207   RAW_METHOD_DUMP(OS, get_libraryName)
    208   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset)
    209   RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection)
    210   RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress)
    211   RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId)
    212   RAW_METHOD_DUMP(OS, get_lowerBoundId)
    213   RAW_METHOD_DUMP(OS, get_memorySpaceKind)
    214   RAW_METHOD_DUMP(OS, get_name)
    215   RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags)
    216   RAW_METHOD_DUMP(OS, get_numberOfColumns)
    217   RAW_METHOD_DUMP(OS, get_numberOfModifiers)
    218   RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices)
    219   RAW_METHOD_DUMP(OS, get_numberOfRows)
    220   RAW_METHOD_DUMP(OS, get_objectFileName)
    221   RAW_METHOD_DUMP(OS, get_oemId)
    222   RAW_METHOD_DUMP(OS, get_oemSymbolId)
    223   RAW_METHOD_DUMP(OS, get_offsetInUdt)
    224   RAW_METHOD_DUMP(OS, get_platform)
    225   RAW_METHOD_DUMP(OS, get_rank)
    226   RAW_METHOD_DUMP(OS, get_registerId)
    227   RAW_METHOD_DUMP(OS, get_registerType)
    228   RAW_METHOD_DUMP(OS, get_relativeVirtualAddress)
    229   RAW_METHOD_DUMP(OS, get_samplerSlot)
    230   RAW_METHOD_DUMP(OS, get_signature)
    231   RAW_METHOD_DUMP(OS, get_sizeInUdt)
    232   RAW_METHOD_DUMP(OS, get_slot)
    233   RAW_METHOD_DUMP(OS, get_sourceFileName)
    234   RAW_METHOD_DUMP(OS, get_stride)
    235   RAW_METHOD_DUMP(OS, get_subTypeId)
    236   RAW_METHOD_DUMP(OS, get_symbolsFileName)
    237   RAW_METHOD_DUMP(OS, get_symIndexId)
    238   RAW_METHOD_DUMP(OS, get_targetOffset)
    239   RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress)
    240   RAW_METHOD_DUMP(OS, get_targetVirtualAddress)
    241   RAW_METHOD_DUMP(OS, get_targetSection)
    242   RAW_METHOD_DUMP(OS, get_textureSlot)
    243   RAW_METHOD_DUMP(OS, get_timeStamp)
    244   RAW_METHOD_DUMP(OS, get_token)
    245   RAW_METHOD_DUMP(OS, get_typeId)
    246   RAW_METHOD_DUMP(OS, get_uavSlot)
    247   RAW_METHOD_DUMP(OS, get_undecoratedName)
    248   RAW_METHOD_DUMP(OS, get_unmodifiedTypeId)
    249   RAW_METHOD_DUMP(OS, get_upperBoundId)
    250   RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex)
    251   RAW_METHOD_DUMP(OS, get_virtualBaseOffset)
    252   RAW_METHOD_DUMP(OS, get_virtualTableShapeId)
    253   RAW_METHOD_DUMP(OS, get_dataKind)
    254   RAW_METHOD_DUMP(OS, get_symTag)
    255   RAW_METHOD_DUMP(OS, get_guid)
    256   RAW_METHOD_DUMP(OS, get_offset)
    257   RAW_METHOD_DUMP(OS, get_thisAdjust)
    258   RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset)
    259   RAW_METHOD_DUMP(OS, get_locationType)
    260   RAW_METHOD_DUMP(OS, get_machineType)
    261   RAW_METHOD_DUMP(OS, get_thunkOrdinal)
    262   RAW_METHOD_DUMP(OS, get_length)
    263   RAW_METHOD_DUMP(OS, get_liveRangeLength)
    264   RAW_METHOD_DUMP(OS, get_virtualAddress)
    265   RAW_METHOD_DUMP(OS, get_udtKind)
    266   RAW_METHOD_DUMP(OS, get_constructor)
    267   RAW_METHOD_DUMP(OS, get_customCallingConvention)
    268   RAW_METHOD_DUMP(OS, get_farReturn)
    269   RAW_METHOD_DUMP(OS, get_code)
    270   RAW_METHOD_DUMP(OS, get_compilerGenerated)
    271   RAW_METHOD_DUMP(OS, get_constType)
    272   RAW_METHOD_DUMP(OS, get_editAndContinueEnabled)
    273   RAW_METHOD_DUMP(OS, get_function)
    274   RAW_METHOD_DUMP(OS, get_stride)
    275   RAW_METHOD_DUMP(OS, get_noStackOrdering)
    276   RAW_METHOD_DUMP(OS, get_hasAlloca)
    277   RAW_METHOD_DUMP(OS, get_hasAssignmentOperator)
    278   RAW_METHOD_DUMP(OS, get_isCTypes)
    279   RAW_METHOD_DUMP(OS, get_hasCastOperator)
    280   RAW_METHOD_DUMP(OS, get_hasDebugInfo)
    281   RAW_METHOD_DUMP(OS, get_hasEH)
    282   RAW_METHOD_DUMP(OS, get_hasEHa)
    283   RAW_METHOD_DUMP(OS, get_hasInlAsm)
    284   RAW_METHOD_DUMP(OS, get_framePointerPresent)
    285   RAW_METHOD_DUMP(OS, get_inlSpec)
    286   RAW_METHOD_DUMP(OS, get_interruptReturn)
    287   RAW_METHOD_DUMP(OS, get_hasLongJump)
    288   RAW_METHOD_DUMP(OS, get_hasManagedCode)
    289   RAW_METHOD_DUMP(OS, get_hasNestedTypes)
    290   RAW_METHOD_DUMP(OS, get_noInline)
    291   RAW_METHOD_DUMP(OS, get_noReturn)
    292   RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo)
    293   RAW_METHOD_DUMP(OS, get_overloadedOperator)
    294   RAW_METHOD_DUMP(OS, get_hasSEH)
    295   RAW_METHOD_DUMP(OS, get_hasSecurityChecks)
    296   RAW_METHOD_DUMP(OS, get_hasSetJump)
    297   RAW_METHOD_DUMP(OS, get_strictGSCheck)
    298   RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal)
    299   RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange)
    300   RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction)
    301   RAW_METHOD_DUMP(OS, get_isAggregated)
    302   RAW_METHOD_DUMP(OS, get_intro)
    303   RAW_METHOD_DUMP(OS, get_isCVTCIL)
    304   RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase)
    305   RAW_METHOD_DUMP(OS, get_isCxxReturnUdt)
    306   RAW_METHOD_DUMP(OS, get_isDataAligned)
    307   RAW_METHOD_DUMP(OS, get_isHLSLData)
    308   RAW_METHOD_DUMP(OS, get_isHotpatchable)
    309   RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass)
    310   RAW_METHOD_DUMP(OS, get_isInterfaceUdt)
    311   RAW_METHOD_DUMP(OS, get_intrinsic)
    312   RAW_METHOD_DUMP(OS, get_isLTCG)
    313   RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent)
    314   RAW_METHOD_DUMP(OS, get_isMSILNetmodule)
    315   RAW_METHOD_DUMP(OS, get_isMatrixRowMajor)
    316   RAW_METHOD_DUMP(OS, get_managed)
    317   RAW_METHOD_DUMP(OS, get_msil)
    318   RAW_METHOD_DUMP(OS, get_isMultipleInheritance)
    319   RAW_METHOD_DUMP(OS, get_isNaked)
    320   RAW_METHOD_DUMP(OS, get_nested)
    321   RAW_METHOD_DUMP(OS, get_isOptimizedAway)
    322   RAW_METHOD_DUMP(OS, get_packed)
    323   RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue)
    324   RAW_METHOD_DUMP(OS, get_isPointerToDataMember)
    325   RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction)
    326   RAW_METHOD_DUMP(OS, get_pure)
    327   RAW_METHOD_DUMP(OS, get_RValueReference)
    328   RAW_METHOD_DUMP(OS, get_isRefUdt)
    329   RAW_METHOD_DUMP(OS, get_reference)
    330   RAW_METHOD_DUMP(OS, get_restrictedType)
    331   RAW_METHOD_DUMP(OS, get_isReturnValue)
    332   RAW_METHOD_DUMP(OS, get_isSafeBuffers)
    333   RAW_METHOD_DUMP(OS, get_scoped)
    334   RAW_METHOD_DUMP(OS, get_isSdl)
    335   RAW_METHOD_DUMP(OS, get_isSingleInheritance)
    336   RAW_METHOD_DUMP(OS, get_isSplitted)
    337   RAW_METHOD_DUMP(OS, get_isStatic)
    338   RAW_METHOD_DUMP(OS, get_isStripped)
    339   RAW_METHOD_DUMP(OS, get_unalignedType)
    340   RAW_METHOD_DUMP(OS, get_notReached)
    341   RAW_METHOD_DUMP(OS, get_isValueUdt)
    342   RAW_METHOD_DUMP(OS, get_virtual)
    343   RAW_METHOD_DUMP(OS, get_virtualBaseClass)
    344   RAW_METHOD_DUMP(OS, get_isVirtualInheritance)
    345   RAW_METHOD_DUMP(OS, get_volatileType)
    346   RAW_METHOD_DUMP(OS, get_wasInlined)
    347   RAW_METHOD_DUMP(OS, get_unused)
    348   RAW_METHOD_DUMP(OS, get_value)
    349 }
    350 
    351 std::unique_ptr<IPDBEnumSymbols>
    352 DIARawSymbol::findChildren(PDB_SymType Type) const {
    353   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
    354 
    355   CComPtr<IDiaEnumSymbols> DiaEnumerator;
    356   if (S_OK != Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator))
    357     return nullptr;
    358 
    359   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
    360 }
    361 
    362 std::unique_ptr<IPDBEnumSymbols>
    363 DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,
    364                            PDB_NameSearchFlags Flags) const {
    365   llvm::SmallVector<UTF16, 32> Name16;
    366   llvm::convertUTF8ToUTF16String(Name, Name16);
    367 
    368   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
    369   DWORD CompareFlags = static_cast<DWORD>(Flags);
    370   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
    371 
    372   CComPtr<IDiaEnumSymbols> DiaEnumerator;
    373   if (S_OK !=
    374       Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))
    375     return nullptr;
    376 
    377   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
    378 }
    379 
    380 std::unique_ptr<IPDBEnumSymbols>
    381 DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,
    382                                 PDB_NameSearchFlags Flags, uint32_t RVA) const {
    383   llvm::SmallVector<UTF16, 32> Name16;
    384   llvm::convertUTF8ToUTF16String(Name, Name16);
    385 
    386   enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
    387   DWORD CompareFlags = static_cast<DWORD>(Flags);
    388   wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
    389 
    390   CComPtr<IDiaEnumSymbols> DiaEnumerator;
    391   if (S_OK !=
    392       Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,
    393                                   &DiaEnumerator))
    394     return nullptr;
    395 
    396   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
    397 }
    398 
    399 std::unique_ptr<IPDBEnumSymbols>
    400 DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const {
    401   CComPtr<IDiaEnumSymbols> DiaEnumerator;
    402   if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))
    403     return nullptr;
    404 
    405   return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
    406 }
    407 
    408 void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {
    409   bytes.clear();
    410 
    411   DWORD DataSize = 0;
    412   Symbol->get_dataBytes(0, &DataSize, nullptr);
    413   if (DataSize == 0)
    414     return;
    415 
    416   bytes.resize(DataSize);
    417   Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());
    418 }
    419 
    420 PDB_MemberAccess DIARawSymbol::getAccess() const {
    421   return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,
    422                                                      &IDiaSymbol::get_access);
    423 }
    424 
    425 uint32_t DIARawSymbol::getAddressOffset() const {
    426   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);
    427 }
    428 
    429 uint32_t DIARawSymbol::getAddressSection() const {
    430   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);
    431 }
    432 
    433 uint32_t DIARawSymbol::getAge() const {
    434   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);
    435 }
    436 
    437 uint32_t DIARawSymbol::getArrayIndexTypeId() const {
    438   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);
    439 }
    440 
    441 void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const {
    442   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);
    443   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);
    444   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);
    445   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);
    446 }
    447 
    448 uint32_t DIARawSymbol::getBaseDataOffset() const {
    449   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);
    450 }
    451 
    452 uint32_t DIARawSymbol::getBaseDataSlot() const {
    453   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);
    454 }
    455 
    456 uint32_t DIARawSymbol::getBaseSymbolId() const {
    457   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);
    458 }
    459 
    460 PDB_BuiltinType DIARawSymbol::getBuiltinType() const {
    461   return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol,
    462                                                     &IDiaSymbol::get_baseType);
    463 }
    464 
    465 uint32_t DIARawSymbol::getBitPosition() const {
    466   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);
    467 }
    468 
    469 PDB_CallingConv DIARawSymbol::getCallingConvention() const {
    470   return PrivateGetDIAValue<DWORD, PDB_CallingConv>(
    471       Symbol, &IDiaSymbol::get_callingConvention);
    472 }
    473 
    474 uint32_t DIARawSymbol::getClassParentId() const {
    475   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);
    476 }
    477 
    478 std::string DIARawSymbol::getCompilerName() const {
    479   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);
    480 }
    481 
    482 uint32_t DIARawSymbol::getCount() const {
    483   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);
    484 }
    485 
    486 uint32_t DIARawSymbol::getCountLiveRanges() const {
    487   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);
    488 }
    489 
    490 void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const {
    491   Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);
    492   Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);
    493   Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);
    494   Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);
    495 }
    496 
    497 PDB_Lang DIARawSymbol::getLanguage() const {
    498   return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
    499 }
    500 
    501 uint32_t DIARawSymbol::getLexicalParentId() const {
    502   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);
    503 }
    504 
    505 std::string DIARawSymbol::getLibraryName() const {
    506   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);
    507 }
    508 
    509 uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const {
    510   return PrivateGetDIAValue(Symbol,
    511                             &IDiaSymbol::get_liveRangeStartAddressOffset);
    512 }
    513 
    514 uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const {
    515   return PrivateGetDIAValue(Symbol,
    516                             &IDiaSymbol::get_liveRangeStartAddressSection);
    517 }
    518 
    519 uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const {
    520   return PrivateGetDIAValue(
    521       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
    522 }
    523 
    524 PDB_RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
    525   return PrivateGetDIAValue<DWORD, PDB_RegisterId>(
    526       Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
    527 }
    528 
    529 uint32_t DIARawSymbol::getLowerBoundId() const {
    530   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);
    531 }
    532 
    533 uint32_t DIARawSymbol::getMemorySpaceKind() const {
    534   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);
    535 }
    536 
    537 std::string DIARawSymbol::getName() const {
    538   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);
    539 }
    540 
    541 uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const {
    542   return PrivateGetDIAValue(Symbol,
    543                             &IDiaSymbol::get_numberOfAcceleratorPointerTags);
    544 }
    545 
    546 uint32_t DIARawSymbol::getNumberOfColumns() const {
    547   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);
    548 }
    549 
    550 uint32_t DIARawSymbol::getNumberOfModifiers() const {
    551   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);
    552 }
    553 
    554 uint32_t DIARawSymbol::getNumberOfRegisterIndices() const {
    555   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);
    556 }
    557 
    558 uint32_t DIARawSymbol::getNumberOfRows() const {
    559   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);
    560 }
    561 
    562 std::string DIARawSymbol::getObjectFileName() const {
    563   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);
    564 }
    565 
    566 uint32_t DIARawSymbol::getOemId() const {
    567   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);
    568 }
    569 
    570 uint32_t DIARawSymbol::getOemSymbolId() const {
    571   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);
    572 }
    573 
    574 uint32_t DIARawSymbol::getOffsetInUdt() const {
    575   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);
    576 }
    577 
    578 PDB_Cpu DIARawSymbol::getPlatform() const {
    579   return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);
    580 }
    581 
    582 uint32_t DIARawSymbol::getRank() const {
    583   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
    584 }
    585 
    586 PDB_RegisterId DIARawSymbol::getRegisterId() const {
    587   return PrivateGetDIAValue<DWORD, PDB_RegisterId>(Symbol,
    588                                                    &IDiaSymbol::get_registerId);
    589 }
    590 
    591 uint32_t DIARawSymbol::getRegisterType() const {
    592   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);
    593 }
    594 
    595 uint32_t DIARawSymbol::getRelativeVirtualAddress() const {
    596   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);
    597 }
    598 
    599 uint32_t DIARawSymbol::getSamplerSlot() const {
    600   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);
    601 }
    602 
    603 uint32_t DIARawSymbol::getSignature() const {
    604   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);
    605 }
    606 
    607 uint32_t DIARawSymbol::getSizeInUdt() const {
    608   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);
    609 }
    610 
    611 uint32_t DIARawSymbol::getSlot() const {
    612   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);
    613 }
    614 
    615 std::string DIARawSymbol::getSourceFileName() const {
    616   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);
    617 }
    618 
    619 uint32_t DIARawSymbol::getStride() const {
    620   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
    621 }
    622 
    623 uint32_t DIARawSymbol::getSubTypeId() const {
    624   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);
    625 }
    626 
    627 std::string DIARawSymbol::getSymbolsFileName() const {
    628   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);
    629 }
    630 
    631 uint32_t DIARawSymbol::getSymIndexId() const {
    632   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);
    633 }
    634 
    635 uint32_t DIARawSymbol::getTargetOffset() const {
    636   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);
    637 }
    638 
    639 uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const {
    640   return PrivateGetDIAValue(Symbol,
    641                             &IDiaSymbol::get_targetRelativeVirtualAddress);
    642 }
    643 
    644 uint64_t DIARawSymbol::getTargetVirtualAddress() const {
    645   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);
    646 }
    647 
    648 uint32_t DIARawSymbol::getTargetSection() const {
    649   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);
    650 }
    651 
    652 uint32_t DIARawSymbol::getTextureSlot() const {
    653   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);
    654 }
    655 
    656 uint32_t DIARawSymbol::getTimeStamp() const {
    657   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);
    658 }
    659 
    660 uint32_t DIARawSymbol::getToken() const {
    661   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);
    662 }
    663 
    664 uint32_t DIARawSymbol::getTypeId() const {
    665   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);
    666 }
    667 
    668 uint32_t DIARawSymbol::getUavSlot() const {
    669   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);
    670 }
    671 
    672 std::string DIARawSymbol::getUndecoratedName() const {
    673   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);
    674 }
    675 
    676 uint32_t DIARawSymbol::getUnmodifiedTypeId() const {
    677   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);
    678 }
    679 
    680 uint32_t DIARawSymbol::getUpperBoundId() const {
    681   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);
    682 }
    683 
    684 Variant DIARawSymbol::getValue() const {
    685   VARIANT Value;
    686   Value.vt = VT_EMPTY;
    687   if (S_OK != Symbol->get_value(&Value))
    688     return Variant();
    689 
    690   return VariantFromVARIANT(Value);
    691 }
    692 
    693 uint32_t DIARawSymbol::getVirtualBaseDispIndex() const {
    694   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);
    695 }
    696 
    697 uint32_t DIARawSymbol::getVirtualBaseOffset() const {
    698   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);
    699 }
    700 
    701 uint32_t DIARawSymbol::getVirtualTableShapeId() const {
    702   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);
    703 }
    704 
    705 PDB_DataKind DIARawSymbol::getDataKind() const {
    706   return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,
    707                                                  &IDiaSymbol::get_dataKind);
    708 }
    709 
    710 PDB_SymType DIARawSymbol::getSymTag() const {
    711   return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,
    712                                                 &IDiaSymbol::get_symTag);
    713 }
    714 
    715 PDB_UniqueId DIARawSymbol::getGuid() const {
    716   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);
    717 }
    718 
    719 int32_t DIARawSymbol::getOffset() const {
    720   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);
    721 }
    722 
    723 int32_t DIARawSymbol::getThisAdjust() const {
    724   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);
    725 }
    726 
    727 int32_t DIARawSymbol::getVirtualBasePointerOffset() const {
    728   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);
    729 }
    730 
    731 PDB_LocType DIARawSymbol::getLocationType() const {
    732   return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,
    733                                                 &IDiaSymbol::get_locationType);
    734 }
    735 
    736 PDB_Machine DIARawSymbol::getMachineType() const {
    737   return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,
    738                                                 &IDiaSymbol::get_machineType);
    739 }
    740 
    741 PDB_ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
    742   return PrivateGetDIAValue<DWORD, PDB_ThunkOrdinal>(
    743       Symbol, &IDiaSymbol::get_thunkOrdinal);
    744 }
    745 
    746 uint64_t DIARawSymbol::getLength() const {
    747   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);
    748 }
    749 
    750 uint64_t DIARawSymbol::getLiveRangeLength() const {
    751   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);
    752 }
    753 
    754 uint64_t DIARawSymbol::getVirtualAddress() const {
    755   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);
    756 }
    757 
    758 PDB_UdtType DIARawSymbol::getUdtKind() const {
    759   return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,
    760                                                 &IDiaSymbol::get_udtKind);
    761 }
    762 
    763 bool DIARawSymbol::hasConstructor() const {
    764   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);
    765 }
    766 
    767 bool DIARawSymbol::hasCustomCallingConvention() const {
    768   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);
    769 }
    770 
    771 bool DIARawSymbol::hasFarReturn() const {
    772   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);
    773 }
    774 
    775 bool DIARawSymbol::isCode() const {
    776   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);
    777 }
    778 
    779 bool DIARawSymbol::isCompilerGenerated() const {
    780   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);
    781 }
    782 
    783 bool DIARawSymbol::isConstType() const {
    784   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);
    785 }
    786 
    787 bool DIARawSymbol::isEditAndContinueEnabled() const {
    788   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);
    789 }
    790 
    791 bool DIARawSymbol::isFunction() const {
    792   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);
    793 }
    794 
    795 bool DIARawSymbol::getAddressTaken() const {
    796   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
    797 }
    798 
    799 bool DIARawSymbol::getNoStackOrdering() const {
    800   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);
    801 }
    802 
    803 bool DIARawSymbol::hasAlloca() const {
    804   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);
    805 }
    806 
    807 bool DIARawSymbol::hasAssignmentOperator() const {
    808   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);
    809 }
    810 
    811 bool DIARawSymbol::hasCTypes() const {
    812   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);
    813 }
    814 
    815 bool DIARawSymbol::hasCastOperator() const {
    816   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);
    817 }
    818 
    819 bool DIARawSymbol::hasDebugInfo() const {
    820   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);
    821 }
    822 
    823 bool DIARawSymbol::hasEH() const {
    824   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);
    825 }
    826 
    827 bool DIARawSymbol::hasEHa() const {
    828   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);
    829 }
    830 
    831 bool DIARawSymbol::hasInlAsm() const {
    832   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);
    833 }
    834 
    835 bool DIARawSymbol::hasInlineAttribute() const {
    836   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);
    837 }
    838 
    839 bool DIARawSymbol::hasInterruptReturn() const {
    840   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
    841 }
    842 
    843 bool DIARawSymbol::hasFramePointer() const {
    844   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
    845 }
    846 
    847 bool DIARawSymbol::hasLongJump() const {
    848   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
    849 }
    850 
    851 bool DIARawSymbol::hasManagedCode() const {
    852   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);
    853 }
    854 
    855 bool DIARawSymbol::hasNestedTypes() const {
    856   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);
    857 }
    858 
    859 bool DIARawSymbol::hasNoInlineAttribute() const {
    860   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);
    861 }
    862 
    863 bool DIARawSymbol::hasNoReturnAttribute() const {
    864   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);
    865 }
    866 
    867 bool DIARawSymbol::hasOptimizedCodeDebugInfo() const {
    868   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);
    869 }
    870 
    871 bool DIARawSymbol::hasOverloadedOperator() const {
    872   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);
    873 }
    874 
    875 bool DIARawSymbol::hasSEH() const {
    876   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);
    877 }
    878 
    879 bool DIARawSymbol::hasSecurityChecks() const {
    880   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);
    881 }
    882 
    883 bool DIARawSymbol::hasSetJump() const {
    884   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);
    885 }
    886 
    887 bool DIARawSymbol::hasStrictGSCheck() const {
    888   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);
    889 }
    890 
    891 bool DIARawSymbol::isAcceleratorGroupSharedLocal() const {
    892   return PrivateGetDIAValue(Symbol,
    893                             &IDiaSymbol::get_isAcceleratorGroupSharedLocal);
    894 }
    895 
    896 bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const {
    897   return PrivateGetDIAValue(Symbol,
    898                             &IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
    899 }
    900 
    901 bool DIARawSymbol::isAcceleratorStubFunction() const {
    902   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);
    903 }
    904 
    905 bool DIARawSymbol::isAggregated() const {
    906   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);
    907 }
    908 
    909 bool DIARawSymbol::isIntroVirtualFunction() const {
    910   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);
    911 }
    912 
    913 bool DIARawSymbol::isCVTCIL() const {
    914   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);
    915 }
    916 
    917 bool DIARawSymbol::isConstructorVirtualBase() const {
    918   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);
    919 }
    920 
    921 bool DIARawSymbol::isCxxReturnUdt() const {
    922   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);
    923 }
    924 
    925 bool DIARawSymbol::isDataAligned() const {
    926   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);
    927 }
    928 
    929 bool DIARawSymbol::isHLSLData() const {
    930   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);
    931 }
    932 
    933 bool DIARawSymbol::isHotpatchable() const {
    934   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);
    935 }
    936 
    937 bool DIARawSymbol::isIndirectVirtualBaseClass() const {
    938   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);
    939 }
    940 
    941 bool DIARawSymbol::isInterfaceUdt() const {
    942   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);
    943 }
    944 
    945 bool DIARawSymbol::isIntrinsic() const {
    946   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);
    947 }
    948 
    949 bool DIARawSymbol::isLTCG() const {
    950   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);
    951 }
    952 
    953 bool DIARawSymbol::isLocationControlFlowDependent() const {
    954   return PrivateGetDIAValue(Symbol,
    955                             &IDiaSymbol::get_isLocationControlFlowDependent);
    956 }
    957 
    958 bool DIARawSymbol::isMSILNetmodule() const {
    959   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);
    960 }
    961 
    962 bool DIARawSymbol::isMatrixRowMajor() const {
    963   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);
    964 }
    965 
    966 bool DIARawSymbol::isManagedCode() const {
    967   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);
    968 }
    969 
    970 bool DIARawSymbol::isMSILCode() const {
    971   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);
    972 }
    973 
    974 bool DIARawSymbol::isMultipleInheritance() const {
    975   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);
    976 }
    977 
    978 bool DIARawSymbol::isNaked() const {
    979   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);
    980 }
    981 
    982 bool DIARawSymbol::isNested() const {
    983   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);
    984 }
    985 
    986 bool DIARawSymbol::isOptimizedAway() const {
    987   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);
    988 }
    989 
    990 bool DIARawSymbol::isPacked() const {
    991   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);
    992 }
    993 
    994 bool DIARawSymbol::isPointerBasedOnSymbolValue() const {
    995   return PrivateGetDIAValue(Symbol,
    996                             &IDiaSymbol::get_isPointerBasedOnSymbolValue);
    997 }
    998 
    999 bool DIARawSymbol::isPointerToDataMember() const {
   1000   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);
   1001 }
   1002 
   1003 bool DIARawSymbol::isPointerToMemberFunction() const {
   1004   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);
   1005 }
   1006 
   1007 bool DIARawSymbol::isPureVirtual() const {
   1008   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);
   1009 }
   1010 
   1011 bool DIARawSymbol::isRValueReference() const {
   1012   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);
   1013 }
   1014 
   1015 bool DIARawSymbol::isRefUdt() const {
   1016   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);
   1017 }
   1018 
   1019 bool DIARawSymbol::isReference() const {
   1020   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);
   1021 }
   1022 
   1023 bool DIARawSymbol::isRestrictedType() const {
   1024   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);
   1025 }
   1026 
   1027 bool DIARawSymbol::isReturnValue() const {
   1028   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);
   1029 }
   1030 
   1031 bool DIARawSymbol::isSafeBuffers() const {
   1032   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);
   1033 }
   1034 
   1035 bool DIARawSymbol::isScoped() const {
   1036   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);
   1037 }
   1038 
   1039 bool DIARawSymbol::isSdl() const {
   1040   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);
   1041 }
   1042 
   1043 bool DIARawSymbol::isSingleInheritance() const {
   1044   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);
   1045 }
   1046 
   1047 bool DIARawSymbol::isSplitted() const {
   1048   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);
   1049 }
   1050 
   1051 bool DIARawSymbol::isStatic() const {
   1052   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);
   1053 }
   1054 
   1055 bool DIARawSymbol::hasPrivateSymbols() const {
   1056   // hasPrivateSymbols is the opposite of isStripped, but we expose
   1057   // hasPrivateSymbols as a more intuitive interface.
   1058   return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);
   1059 }
   1060 
   1061 bool DIARawSymbol::isUnalignedType() const {
   1062   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);
   1063 }
   1064 
   1065 bool DIARawSymbol::isUnreached() const {
   1066   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);
   1067 }
   1068 
   1069 bool DIARawSymbol::isValueUdt() const {
   1070   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);
   1071 }
   1072 
   1073 bool DIARawSymbol::isVirtual() const {
   1074   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);
   1075 }
   1076 
   1077 bool DIARawSymbol::isVirtualBaseClass() const {
   1078   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);
   1079 }
   1080 
   1081 bool DIARawSymbol::isVirtualInheritance() const {
   1082   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);
   1083 }
   1084 
   1085 bool DIARawSymbol::isVolatileType() const {
   1086   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);
   1087 }
   1088 
   1089 bool DIARawSymbol::wasInlined() const {
   1090   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined);
   1091 }
   1092 
   1093 std::string DIARawSymbol::getUnused() const {
   1094   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused);
   1095 }
   1096