diff options
author | Aleksandr Urakov <aleksandr.urakov@jetbrains.com> | 2018-10-23 08:14:53 +0000 |
---|---|---|
committer | Aleksandr Urakov <aleksandr.urakov@jetbrains.com> | 2018-10-23 08:14:53 +0000 |
commit | c43e086c74b28c9cff87d8276ccd325e24b1f883 (patch) | |
tree | b4ca81bdf01637300ec4517ff1f36df58a479f2e /llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp | |
parent | 63b099050c890ca7a29e369ae25aa42d286fe5dd (diff) | |
download | bcm5719-llvm-c43e086c74b28c9cff87d8276ccd325e24b1f883.tar.gz bcm5719-llvm-c43e086c74b28c9cff87d8276ccd325e24b1f883.zip |
Revert "Revert "[PDB] Extend IPDBSession's interface to retrieve frame data""
This reverts commit 466ce67d6ec444962e5cc0136243c16a453190c0.
llvm-svn: 345010
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp b/llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp new file mode 100644 index 00000000000..77514483e04 --- /dev/null +++ b/llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp @@ -0,0 +1,43 @@ +//==- DIAEnumFrameData.cpp ---------------------------------------*- C++ -*-==// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/DebugInfo/PDB/DIA/DIAEnumFrameData.h" +#include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h" +#include "llvm/DebugInfo/PDB/DIA/DIASession.h" + +using namespace llvm::pdb; + +DIAEnumFrameData::DIAEnumFrameData(const DIASession &PDBSession, + CComPtr<IDiaEnumFrameData> DiaEnumerator) + : Session(PDBSession), Enumerator(DiaEnumerator) {} + +uint32_t DIAEnumFrameData::getChildCount() const { + LONG Count = 0; + return (S_OK == Enumerator->get_Count(&Count)) ? Count : 0; +} + +std::unique_ptr<IPDBFrameData> +DIAEnumFrameData::getChildAtIndex(uint32_t Index) const { + CComPtr<IDiaFrameData> Item; + if (S_OK != Enumerator->Item(Index, &Item)) + return nullptr; + + return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Session, Item)); +} + +std::unique_ptr<IPDBFrameData> DIAEnumFrameData::getNext() { + CComPtr<IDiaFrameData> Item; + ULONG NumFetched = 0; + if (S_OK != Enumerator->Next(1, &Item, &NumFetched)) + return nullptr; + + return std::unique_ptr<IPDBFrameData>(new DIAFrameData(Session, Item)); +} + +void DIAEnumFrameData::reset() { Enumerator->Reset(); } |