29 NativeTypeFunctionArg(NativeSession &Session,
30 std::unique_ptr<PDBSymbol> RealType)
32 RealType(std::
move(RealType)) {}
39 PdbSymbolIdField::Type, ShowIdFields, RecurseIdFields);
42 SymIndexId getTypeId()
const override {
return RealType->getSymIndexId(); }
44 std::unique_ptr<PDBSymbol> RealType;
49 NativeEnumFunctionArgs(NativeSession &Session,
50 std::unique_ptr<NativeEnumTypes> TypeEnumerator)
51 : Session(Session), TypeEnumerator(std::
move(TypeEnumerator)) {}
53 uint32_t getChildCount()
const override {
54 return TypeEnumerator->getChildCount();
56 std::unique_ptr<PDBSymbol> getChildAtIndex(uint32_t Index)
const override {
57 return wrap(TypeEnumerator->getChildAtIndex(Index));
59 std::unique_ptr<PDBSymbol> getNext()
override {
60 return wrap(TypeEnumerator->getNext());
63 void reset()
override { TypeEnumerator->reset(); }
66 std::unique_ptr<PDBSymbol>
wrap(std::unique_ptr<PDBSymbol> S)
const {
69 auto NTFA = std::make_unique<NativeTypeFunctionArg>(Session, std::move(S));
72 NativeSession &Session;
73 std::unique_ptr<NativeEnumTypes> TypeEnumerator;
91 if (IsMemberFunction) {
96 initializeArgList(
Proc.ArgumentList);
123 if (IsMemberFunction)
134std::unique_ptr<IPDBEnumSymbols>
137 return std::make_unique<NullEnumerator<PDBSymbol>>();
139 auto NET = std::make_unique<NativeEnumTypes>(
Session,
141 return std::unique_ptr<IPDBEnumSymbols>(
142 new NativeEnumFunctionArgs(
Session, std::move(NET)));
146 if (!IsMemberFunction)
149 return ClassParentId;
157 return IsMemberFunction ? (1 +
MemberFunc.getParameterCount())
158 :
Proc.getParameterCount();
163 IsMemberFunction ?
MemberFunc.getReturnType() :
Proc.getReturnType();
170 return IsMemberFunction ?
MemberFunc.getThisPointerAdjustment() : 0;
174 if (!IsMemberFunction)
184 if (!IsMemberFunction)
CVType getType(TypeIndex Index) override
static Error deserializeAs(CVType &CVT, T &Record)
NativeRawSymbol(NativeSession &PDBSession, PDB_SymType Tag, SymIndexId SymbolId)
void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override
bool isConstructorVirtualBase() const override
SymIndexId getClassParentId() const override
NativeTypeFunctionSig(NativeSession &Session, SymIndexId Id, codeview::TypeIndex TI, codeview::ProcedureRecord Proc)
void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override
bool isVolatileType() const override
SymIndexId getTypeId() const override
bool isConstType() const override
~NativeTypeFunctionSig() override
PDB_CallingConv getCallingConvention() const override
std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const override
int32_t getThisAdjust() const override
bool isCxxReturnUdt() const override
bool isUnalignedType() const override
bool hasConstructor() const override
uint32_t getCount() const override
codeview::ProcedureRecord Proc
codeview::MemberFunctionRecord MemberFunc
void initialize() override
Expected< TpiStream & > getPDBTpiStream()
static std::unique_ptr< PDBSymbol > create(const IPDBSession &PDBSession, std::unique_ptr< IPDBRawSymbol > RawSymbol)
codeview::LazyRandomTypeCollection & typeCollection()
This class implements an extremely fast bulk output stream that can only output to a stream.
CVRecord< TypeLeafKind > CVType
@ ConstructorWithVirtualBases
void dumpSymbolField(raw_ostream &OS, StringRef Name, T Value, int Indent)
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn....
LLVM_ABI void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)
codeview::CallingConvention PDB_CallingConv
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
This is an optimization pass for GlobalISel generic memory operations.
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
void cantFail(Error Err, const char *Msg=nullptr)
Report a fatal error if Err is a failure value.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
LLVMAttributeRef wrap(Attribute Attr)
Implement std::hash so that hash_code can be used in STL containers.