21 #include <unordered_set>
26 using namespace llvm::pdb;
33 FunctionArgEnumerator(
const IPDBSession &PDBSession,
35 : Session(PDBSession),
Func(PDBFunc) {
38 std::unordered_set<std::string> SeenNames;
40 while (
auto Child = DataChildren->getNext()) {
42 std::string
Name = Child->getName();
43 if (SeenNames.find(Name) != SeenNames.end())
45 Args.push_back(std::move(Child));
46 SeenNames.insert(Name);
52 uint32_t getChildCount()
const override {
return Args.size(); }
54 std::unique_ptr<PDBSymbolData>
55 getChildAtIndex(
uint32_t Index)
const override {
56 if (Index >=
Args.size())
60 Args[Index]->getSymIndexId());
63 std::unique_ptr<PDBSymbolData> getNext()
override {
64 if (CurIter ==
Args.end())
66 const auto &Result = **CurIter;
68 return Session.getConcreteSymbolById<
PDBSymbolData>(Result.getSymIndexId());
71 void reset()
override { CurIter =
Args.empty() ?
Args.end() :
Args.begin(); }
73 FunctionArgEnumerator *clone()
const override {
74 return new FunctionArgEnumerator(Session,
Func);
78 typedef std::vector<std::unique_ptr<PDBSymbolData>> ArgListType;
82 ArgListType::const_iterator CurIter;
87 std::unique_ptr<IPDBRawSymbol>
Symbol)
88 :
PDBSymbol(PDBSession, std::move(Symbol)) {}
94 std::unique_ptr<IPDBEnumChildren<PDBSymbolData>>
96 return llvm::make_unique<FunctionArgEnumerator>(
Session, *
this);
IPDBSession defines an interface used to provide a context for querying debug information from a debu...
PDBSymbolFunc(const IPDBSession &PDBSession, std::unique_ptr< IPDBRawSymbol > FuncSymbol)
std::unique_ptr< PDBSymbolTypeUDT > getClassParent() const
std::unique_ptr< PDBSymbolTypeFunctionSig > getSignature() const
std::unique_ptr< T > getConcreteSymbolById(uint32_t SymbolId) const
PDBSymbol defines the base of the inheritance hierarchy for concrete symbol types (e...
std::unique_ptr< IPDBEnumChildren< PDBSymbolData > > getArguments() const
virtual void dump(const PDBSymbolAnnotation &Symbol)
const IPDBSession & Session
void dump(PDBSymDumper &Dumper) const override
Dumps the contents of a symbol a raw_ostream.