27 typedef ConcreteSymbolEnumerator<PDBSymbolTypeFunctionArg> ArgEnumeratorType;
29 FunctionArgEnumerator(
const IPDBSession &PDBSession,
30 const PDBSymbolTypeFunctionSig &Sig)
31 : Session(PDBSession),
32 Enumerator(Sig.findAllChildren<PDBSymbolTypeFunctionArg>()) {}
34 FunctionArgEnumerator(
const IPDBSession &PDBSession,
35 std::unique_ptr<ArgEnumeratorType> 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());
59 const IPDBSession &Session;
64std::unique_ptr<IPDBEnumSymbols>
66 return std::make_unique<FunctionArgEnumerator>(
Session, *
this);
81 uint32_t NumArgs = SigArguments->getChildCount();
84 auto Last = SigArguments->getChildAtIndex(NumArgs - 1);
virtual void dump(const PDBSymbolAnnotation &Symbol)
virtual void dumpRight(const PDBSymbolTypeArray &Symbol)
void dump(PDBSymDumper &Dumper) const override
Dumps the contents of a symbol a raw_ostream.
std::unique_ptr< IPDBEnumSymbols > getArguments() const
void dumpRight(PDBSymDumper &Dumper) const override
For certain PDBSymbolTypes, dumps additional information for the type that normally goes on the right...
const IPDBSession & Session
IPDBEnumChildren< PDBSymbol > IPDBEnumSymbols
This is an optimization pass for GlobalISel generic memory operations.
auto dyn_cast_or_null(const Y &Val)
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.