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