blob: 244d328b51f43afde1e635d9a6973c8fd0a0c58d [file] [log] [blame]
//===-- SBType.h ------------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_API_SBTYPE_H
#define LLDB_API_SBTYPE_H
#include "lldb/API/SBDefines.h"
namespace lldb {
class SBTypeList;
class LLDB_API SBTypeMember {
public:
SBTypeMember();
SBTypeMember(const lldb::SBTypeMember &rhs);
~SBTypeMember();
lldb::SBTypeMember &operator=(const lldb::SBTypeMember &rhs);
explicit operator bool() const;
bool IsValid() const;
const char *GetName();
lldb::SBType GetType();
uint64_t GetOffsetInBytes();
uint64_t GetOffsetInBits();
bool IsBitfield();
uint32_t GetBitfieldSizeInBits();
bool GetDescription(lldb::SBStream &description,
lldb::DescriptionLevel description_level);
protected:
friend class SBType;
void reset(lldb_private::TypeMemberImpl *);
lldb_private::TypeMemberImpl &ref();
const lldb_private::TypeMemberImpl &ref() const;
std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_up;
};
class SBTypeMemberFunction {
public:
SBTypeMemberFunction();
SBTypeMemberFunction(const lldb::SBTypeMemberFunction &rhs);
~SBTypeMemberFunction();
lldb::SBTypeMemberFunction &operator=(const lldb::SBTypeMemberFunction &rhs);
explicit operator bool() const;
bool IsValid() const;
const char *GetName();
const char *GetDemangledName();
const char *GetMangledName();
lldb::SBType GetType();
lldb::SBType GetReturnType();
uint32_t GetNumberOfArguments();
lldb::SBType GetArgumentTypeAtIndex(uint32_t);
lldb::MemberFunctionKind GetKind();
bool GetDescription(lldb::SBStream &description,
lldb::DescriptionLevel description_level);
protected:
friend class SBType;
void reset(lldb_private::TypeMemberFunctionImpl *);
lldb_private::TypeMemberFunctionImpl &ref();
const lldb_private::TypeMemberFunctionImpl &ref() const;
lldb::TypeMemberFunctionImplSP m_opaque_sp;
};
class SBType {
public:
SBType();
SBType(const lldb::SBType &rhs);
~SBType();
explicit operator bool() const;
bool IsValid() const;
uint64_t GetByteSize();
bool IsPointerType();
bool IsReferenceType();
bool IsFunctionType();
bool IsPolymorphicClass();
bool IsArrayType();
bool IsVectorType();
bool IsTypedefType();
bool IsAnonymousType();
bool IsScopedEnumerationType();
bool IsAggregateType();
lldb::SBType GetPointerType();
lldb::SBType GetPointeeType();
lldb::SBType GetReferenceType();
lldb::SBType GetTypedefedType();
lldb::SBType GetDereferencedType();
lldb::SBType GetUnqualifiedType();
lldb::SBType GetArrayElementType();
lldb::SBType GetArrayType(uint64_t size);
lldb::SBType GetVectorElementType();
lldb::SBType GetCanonicalType();
lldb::SBType GetEnumerationIntegerType();
// Get the "lldb::BasicType" enumeration for a type. If a type is not a basic
// type eBasicTypeInvalid will be returned
lldb::BasicType GetBasicType();
// The call below confusing and should really be renamed to "CreateBasicType"
lldb::SBType GetBasicType(lldb::BasicType type);
uint32_t GetNumberOfFields();
uint32_t GetNumberOfDirectBaseClasses();
uint32_t GetNumberOfVirtualBaseClasses();
lldb::SBTypeMember GetFieldAtIndex(uint32_t idx);
lldb::SBTypeMember GetDirectBaseClassAtIndex(uint32_t idx);
lldb::SBTypeMember GetVirtualBaseClassAtIndex(uint32_t idx);
lldb::SBTypeEnumMemberList GetEnumMembers();
uint32_t GetNumberOfTemplateArguments();
lldb::SBType GetTemplateArgumentType(uint32_t idx);
lldb::TemplateArgumentKind GetTemplateArgumentKind(uint32_t idx);
lldb::SBType GetFunctionReturnType();
lldb::SBTypeList GetFunctionArgumentTypes();
uint32_t GetNumberOfMemberFunctions();
lldb::SBTypeMemberFunction GetMemberFunctionAtIndex(uint32_t idx);
lldb::SBModule GetModule();
const char *GetName();
const char *GetDisplayTypeName();
lldb::TypeClass GetTypeClass();
bool IsTypeComplete();
uint32_t GetTypeFlags();
bool GetDescription(lldb::SBStream &description,
lldb::DescriptionLevel description_level);
lldb::SBType &operator=(const lldb::SBType &rhs);
bool operator==(lldb::SBType &rhs);
bool operator!=(lldb::SBType &rhs);
protected:
lldb_private::TypeImpl &ref();
const lldb_private::TypeImpl &ref() const;
lldb::TypeImplSP GetSP();
void SetSP(const lldb::TypeImplSP &type_impl_sp);
lldb::TypeImplSP m_opaque_sp;
friend class SBFunction;
friend class SBModule;
friend class SBTarget;
friend class SBTypeEnumMember;
friend class SBTypeEnumMemberList;
friend class SBTypeNameSpecifier;
friend class SBTypeMember;
friend class SBTypeMemberFunction;
friend class SBTypeList;
friend class SBValue;
SBType(const lldb_private::CompilerType &);
SBType(const lldb::TypeSP &);
SBType(const lldb::TypeImplSP &);
};
class SBTypeList {
public:
SBTypeList();
SBTypeList(const lldb::SBTypeList &rhs);
~SBTypeList();
lldb::SBTypeList &operator=(const lldb::SBTypeList &rhs);
explicit operator bool() const;
bool IsValid();
void Append(lldb::SBType type);
lldb::SBType GetTypeAtIndex(uint32_t index);
uint32_t GetSize();
private:
std::unique_ptr<lldb_private::TypeListImpl> m_opaque_up;
friend class SBModule;
friend class SBCompileUnit;
};
} // namespace lldb
#endif // LLDB_API_SBTYPE_H