DIAEnumSymbols.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //==- DIAEnumSymbols.cpp - DIA Symbol Enumerator impl ------------*- 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. #include "llvm/DebugInfo/PDB/PDBSymbol.h"
  10. #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
  11. #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
  12. #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
  13. using namespace llvm;
  14. DIAEnumSymbols::DIAEnumSymbols(const DIASession &PDBSession,
  15. CComPtr<IDiaEnumSymbols> DiaEnumerator)
  16. : Session(PDBSession), Enumerator(DiaEnumerator) {}
  17. uint32_t DIAEnumSymbols::getChildCount() const {
  18. LONG Count = 0;
  19. return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0;
  20. }
  21. std::unique_ptr<PDBSymbol>
  22. DIAEnumSymbols::getChildAtIndex(uint32_t Index) const {
  23. CComPtr<IDiaSymbol> Item;
  24. if (S_OK != Enumerator->Item(Index, &Item))
  25. return nullptr;
  26. std::unique_ptr<DIARawSymbol> RawSymbol(new DIARawSymbol(Session, Item));
  27. return std::unique_ptr<PDBSymbol>(PDBSymbol::create(Session, std::move(RawSymbol)));
  28. }
  29. std::unique_ptr<PDBSymbol> DIAEnumSymbols::getNext() {
  30. CComPtr<IDiaSymbol> Item;
  31. ULONG NumFetched = 0;
  32. if (S_OK != Enumerator->Next(1, &Item, &NumFetched))
  33. return nullptr;
  34. std::unique_ptr<DIARawSymbol> RawSymbol(new DIARawSymbol(Session, Item));
  35. return std::unique_ptr<PDBSymbol>(
  36. PDBSymbol::create(Session, std::move(RawSymbol)));
  37. }
  38. void DIAEnumSymbols::reset() { Enumerator->Reset(); }
  39. DIAEnumSymbols *DIAEnumSymbols::clone() const {
  40. CComPtr<IDiaEnumSymbols> EnumeratorClone;
  41. if (S_OK != Enumerator->Clone(&EnumeratorClone))
  42. return nullptr;
  43. return new DIAEnumSymbols(Session, EnumeratorClone);
  44. }