summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp
diff options
context:
space:
mode:
authorAleksandr Urakov <aleksandr.urakov@jetbrains.com>2018-10-23 08:14:53 +0000
committerAleksandr Urakov <aleksandr.urakov@jetbrains.com>2018-10-23 08:14:53 +0000
commitc43e086c74b28c9cff87d8276ccd325e24b1f883 (patch)
treeb4ca81bdf01637300ec4517ff1f36df58a479f2e /llvm/lib/DebugInfo/PDB/DIA/DIAEnumFrameData.cpp
parent63b099050c890ca7a29e369ae25aa42d286fe5dd (diff)
downloadbcm5719-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.cpp43
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(); }
OpenPOWER on IntegriCloud