30 std::unique_ptr<PDBSymbol> RealType)
32 RealType(
std::
move(RealType)) {}
39 PdbSymbolIdField::Type, ShowIdFields, RecurseIdFields);
44 std::unique_ptr<PDBSymbol> RealType;
50 std::unique_ptr<NativeEnumTypes> TypeEnumerator)
51 : Session(Session), TypeEnumerator(
std::
move(TypeEnumerator)) {}
54 return TypeEnumerator->getChildCount();
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));
73 std::unique_ptr<NativeEnumTypes> TypeEnumerator;
82 Proc(
std::
move(Proc)), Index(Index), IsMemberFunction(
false) {}
88 MemberFunc(
std::
move(MemberFunc)), Index(Index), IsMemberFunction(
true) {}
91 if (IsMemberFunction) {
106 cantFail(TypeDeserializer::deserializeAs<ArgListRecord>(CVT, ArgList));
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;
174 if (!IsMemberFunction)
178 FunctionOptions::None;
184 if (!IsMemberFunction)
188 FunctionOptions::ConstructorWithVirtualBases) !=
189 FunctionOptions::None;
195 return (
Options & FunctionOptions::CxxReturnUdt) != FunctionOptions::None;
The instances of the Type class are immutable: once they are created, they are never changed.
std::vector< TypeIndex > ArgIndices
CVType getType(TypeIndex Index) override
TypeIndex getReturnType() const
int32_t getThisPointerAdjustment() const
CallingConvention CallConv
uint16_t getParameterCount() const
FunctionOptions getOptions() const
TypeIndex getReturnType() const
uint16_t getParameterCount() const
FunctionOptions getOptions() const
CallingConvention CallConv
virtual uint32_t getChildCount() const =0
virtual ChildTypePtr getNext()=0
virtual ChildTypePtr getChildAtIndex(uint32_t Index) const =0
SymIndexId getTypeId() const override
void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override
SymbolCache & getSymbolCache()
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)
SymIndexId findSymbolByTypeIndex(codeview::TypeIndex TI) const
codeview::LazyRandomTypeCollection & typeCollection()
This class implements an extremely fast bulk output stream that can only output to a stream.
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
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....
void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)
This is an optimization pass for GlobalISel generic memory operations.
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.