22 using namespace llvm::pdb;
29 FunctionArgEnumerator(
const IPDBSession &PDBSession,
31 : Session(PDBSession),
34 FunctionArgEnumerator(
const IPDBSession &PDBSession,
35 std::unique_ptr<ArgEnumeratorType> ArgEnumerator)
36 : Session(PDBSession),
Enumerator(std::move(ArgEnumerator)) {}
38 uint32_t getChildCount()
const override {
42 std::unique_ptr<PDBSymbol> getChildAtIndex(
uint32_t Index)
const override {
43 auto FunctionArgSymbol =
Enumerator->getChildAtIndex(Index);
44 if (!FunctionArgSymbol)
46 return Session.getSymbolById(FunctionArgSymbol->getTypeId());
49 std::unique_ptr<PDBSymbol> getNext()
override {
50 auto FunctionArgSymbol =
Enumerator->getNext();
51 if (!FunctionArgSymbol)
53 return Session.getSymbolById(FunctionArgSymbol->getTypeId());
58 MyType *clone()
const override {
59 std::unique_ptr<ArgEnumeratorType> Clone(
Enumerator->clone());
60 return new FunctionArgEnumerator(Session, std::move(Clone));
71 :
PDBSymbol(PDBSession, std::move(Symbol)) {}
77 std::unique_ptr<IPDBEnumSymbols>
79 return llvm::make_unique<FunctionArgEnumerator>(
Session, *
this);
83 uint32_t ClassId = getClassParentId();
IPDBSession defines an interface used to provide a context for querying debug information from a debu...
PDBSymbolTypeFunctionSig(const IPDBSession &PDBSession, std::unique_ptr< IPDBRawSymbol > Symbol)
std::unique_ptr< PDBSymbol > getClassParent() const
void dump(PDBSymDumper &Dumper) const override
Dumps the contents of a symbol a raw_ostream.
std::unique_ptr< IPDBEnumSymbols > getArguments() const
virtual std::unique_ptr< PDBSymbol > getSymbolById(uint32_t SymbolId) const =0
PDBSymbol defines the base of the inheritance hierarchy for concrete symbol types (e...
std::unique_ptr< PDBSymbol > getReturnType() const
virtual void dump(const PDBSymbolAnnotation &Symbol)
const IPDBSession & Session