11674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//===-- ClangASTType.h ------------------------------------------*- C++ -*-===// 21674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 31674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// The LLVM Compiler Infrastructure 41674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 51674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// This file is distributed under the University of Illinois Open Source 61674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// License. See LICENSE.TXT for details. 71674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 81674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//===----------------------------------------------------------------------===// 91674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#ifndef liblldb_ClangASTType_h_ 111674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#define liblldb_ClangASTType_h_ 121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 133e1c95a5eccc5fca012fcd91226ea67710b7ff26Peter Collingbourne#include <string> 14b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-private.h" 151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Core/ClangForward.h" 1652f792329be5db8e38961350589e97e8f2823acdGreg Clayton#include "clang/AST/Type.h" 171674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonnamespace lldb_private { 191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 201674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//---------------------------------------------------------------------- 211674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// A class that can carry around a clang ASTContext and a opaque clang 221674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// QualType. A clang::QualType can be easily reconstructed from an 231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// opaque clang type and often the ASTContext is needed when doing 241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// various type related tasks, so this class allows both items to travel 251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// in a single very lightweight class that can be used. There are many 261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// static equivalents of the member functions that allow the ASTContext 271674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// and the opaque clang QualType to be specified for ease of use and 281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// to avoid code duplication. 291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//---------------------------------------------------------------------- 301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonclass ClangASTType 311674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton{ 3257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Claytonpublic: 3352f792329be5db8e38961350589e97e8f2823acdGreg Clayton enum { 3452f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeHasChildren = (1u << 0), 3552f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeHasValue = (1u << 1), 3652f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsArray = (1u << 2), 3752f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsBlock = (1u << 3), 3852f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsBuiltIn = (1u << 4), 3952f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsClass = (1u << 5), 4052f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsCPlusPlus = (1u << 6), 4152f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsEnumeration = (1u << 7), 4252f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsFuncPrototype = (1u << 8), 4352f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsMember = (1u << 9), 4452f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsObjC = (1u << 10), 4552f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsPointer = (1u << 11), 4652f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsReference = (1u << 12), 4752f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsStructUnion = (1u << 13), 4852f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsTemplate = (1u << 14), 4952f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsTypedef = (1u << 15), 5052f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsVector = (1u << 16), 5152f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsScalar = (1u << 17), 5252f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsInteger = (1u << 18), 5352f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsFloat = (1u << 19), 5452f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsComplex = (1u << 20), 5552f792329be5db8e38961350589e97e8f2823acdGreg Clayton eTypeIsSigned = (1u << 21) 5652f792329be5db8e38961350589e97e8f2823acdGreg Clayton }; 5752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 5852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 5952f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 6052f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Constructors and Destructors 6152f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 62979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata ClangASTType (clang::ASTContext *ast_context, lldb::clang_type_t type) : 630fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type (type), 640fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_ast (ast_context) 651674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 661674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 6752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 6852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType (clang::ASTContext *ast_context, clang::QualType qual_type); 6952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 7052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType (const ClangASTType &rhs) : 7152f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_type (rhs.m_type), 7252f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_ast (rhs.m_ast) 731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 741674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ClangASTType () : 771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_type (0), 781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_ast (0) 791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 801674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 811674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 8252f792329be5db8e38961350589e97e8f2823acdGreg Clayton ~ClangASTType(); 831674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 8452f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 8552f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Operators 8652f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 8752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const ClangASTType & 8952f792329be5db8e38961350589e97e8f2823acdGreg Clayton operator= (const ClangASTType &rhs) 901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 9152f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_type = rhs.m_type; 9252f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_ast = rhs.m_ast; 931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton return *this; 941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 9652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 9752f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 9852f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Tests 9952f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 10052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 10152f792329be5db8e38961350589e97e8f2823acdGreg Clayton operator bool () const 10252f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 10352f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_type != NULL && m_ast != NULL; 10452f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 10552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 10652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 10752f792329be5db8e38961350589e97e8f2823acdGreg Clayton operator < (const ClangASTType &rhs) const 10852f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 10952f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_ast == rhs.m_ast) 11052f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_type < rhs.m_type; 11152f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_ast < rhs.m_ast; 11252f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 11352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 1140fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton bool 1150fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton IsValid () const 1160fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 1170fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_type != NULL && m_ast != NULL; 1180fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 11952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 12052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 12152f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsArrayType (ClangASTType *element_type, 12252f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint64_t *size, 12352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool *is_incomplete) const; 1240fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 12552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 12652f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsArrayOfScalarType () const; 12752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 12852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 12952f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsAggregateType () const; 13052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 13152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 13252f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsBeingDefined () const; 13352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 13452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 13552f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsCharType () const; 13652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 13752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 13852f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsCompleteType () const; 13952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 14052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 14152f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsConst() const; 14252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 14352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 14452f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsCStringType (uint32_t &length) const; 14552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 14652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 14752f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsCXXClassType () const; 14852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 14952f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 15052f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsDefined() const; 15152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 15252f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 15352f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsFloatingPointType (uint32_t &count, bool &is_complex) const; 15452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 15552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 15652f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsFunctionType (bool *is_variadic_ptr = NULL) const; 15752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 15852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 15952f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsVariadicFunctionType () const; 16052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 16152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 16252f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsFunctionPointerType () const; 16352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 16452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 16552f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsIntegerType (bool &is_signed) const; 16652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 16752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 16852f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsObjCClassType () const; 16952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 17052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 17152f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsObjCClassTypeAndHasIVars (bool check_superclass) const; 17252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 17352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 17452f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsObjCObjectOrInterfaceType () const; 17552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 17652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 17752f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsObjCObjectPointerType (ClangASTType *target_type = NULL); 17852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 17952f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 18052f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPolymorphicClass () const; 18152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 18252f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 18352f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPossibleCPlusPlusDynamicType (ClangASTType *target_type = NULL) const 18452f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 18552f792329be5db8e38961350589e97e8f2823acdGreg Clayton return IsPossibleDynamicType (target_type, true, false); 1861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 1871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 18852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 18952f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPossibleDynamicType (ClangASTType *target_type, // Can pass NULL 19052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool check_cplusplus, 19152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool check_objc) const; 19252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 19352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 19452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 19552f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPointerToScalarType () const; 19652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 19752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 19852f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPointerType (ClangASTType *pointee_type = NULL) const; 19952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 20052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 20152f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsPointerOrReferenceType (ClangASTType *pointee_type = NULL) const; 20252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 20352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 20452f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsReferenceType (ClangASTType *pointee_type = NULL) const; 20552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 20652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 20752f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsScalarType () const; 20852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 20952f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 21052f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsTypedefType () const; 21152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 21252f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 21352f792329be5db8e38961350589e97e8f2823acdGreg Clayton IsVoidType () const; 21452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 21552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 21652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetCXXClassName (std::string &class_name) const; 21752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 21852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 21952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetObjCClassName (std::string &class_name); 22052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 22152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 22252f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 22352f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Type Completion 22452f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 22552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 22652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 22752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetCompleteType () const; 22852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 22952f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 23052f792329be5db8e38961350589e97e8f2823acdGreg Clayton // AST related queries 23152f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 23252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 23352f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t 23452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetPointerByteSize () const; 23552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 23652f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 23752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Accessors 23852f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 23952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 2401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton clang::ASTContext * 2411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetASTContext() const 24252f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 24352f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_ast; 2441674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 24552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 24652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ConstString 24752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetConstQualifiedTypeName () const; 2481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 24952f792329be5db8e38961350589e97e8f2823acdGreg Clayton ConstString 25052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetConstTypeName () const; 25152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 25252f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::string 25352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypeName () const; 254946618a80e17d210e6592e94d10a15ad592572baGreg Clayton 25552f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 25652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypeInfo (ClangASTType *pointee_or_element_clang_type = NULL) const; 25752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 25852f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::LanguageType 25952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetMinimumLanguage (); 26052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 26152f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::clang_type_t 26252f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetOpaqueQualType() const 263946618a80e17d210e6592e94d10a15ad592572baGreg Clayton { 26452f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_type; 265946618a80e17d210e6592e94d10a15ad592572baGreg Clayton } 266946618a80e17d210e6592e94d10a15ad592572baGreg Clayton 26752f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::TypeClass 26852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypeClass () const; 269dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 27052f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 27152f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetClangType (clang::ASTContext *ast, lldb::clang_type_t type) 27252f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 27352f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_ast = ast; 27452f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_type = type; 27552f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 2761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 27752f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 27852f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetClangType (clang::ASTContext *ast, clang::QualType qual_type); 2790b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 28052f792329be5db8e38961350589e97e8f2823acdGreg Clayton unsigned 28152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypeQualifiers() const; 28252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 28352f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 28452f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Creating related types 28552f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 2860b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 28752f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 28852f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddConstModifier () const; 2890b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 29052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 29152f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddRestrictModifier () const; 29252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 29352f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 29452f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddVolatileModifier () const; 29552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 29652f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Using the current type, create a new typedef to that type using "typedef_name" 29752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // as the name and "decl_ctx" as the decl context. 29852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 29952f792329be5db8e38961350589e97e8f2823acdGreg Clayton CreateTypedefType (const char *typedef_name, 30052f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::DeclContext *decl_ctx) const; 30152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 30252f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 30352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetArrayElementType (uint64_t& stride) const; 30452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 30552f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 30652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetCanonicalType () const; 3075c28dd1daf8de701ce1eeb8f9b8d3e3b5e39ad50Greg Clayton 30852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 30952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFullyUnqualifiedType () const; 31052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 31152f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Returns -1 if this isn't a function of if the fucntion doesn't have a prototype 31252f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Returns a value >= 0 if there is a prototype. 31352f792329be5db8e38961350589e97e8f2823acdGreg Clayton int 31452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFunctionArgumentCount () const; 31552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 31652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 31752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFunctionArgumentTypeAtIndex (size_t idx); 318dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 31952f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 32052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFunctionReturnType () const; 32152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 32252f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 32352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetLValueReferenceType () const; 32452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 32552f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 32652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNonReferenceType () const; 327b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 32852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 32952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetPointeeType () const; 33052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 33152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 33252f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetPointerType () const; 33352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 33452f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 33552f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetRValueReferenceType () const; 336b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 33752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // If the current object represents a typedef type, get the underlying type 33852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 33952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypedefedType () const; 340940ca9447d84a08883d2ce77a765475f09243fc5Greg Clayton 34152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 34252f792329be5db8e38961350589e97e8f2823acdGreg Clayton RemoveFastQualifiers () const; 343f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton 34452f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 34552f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Create related types using the current type's AST 34652f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 34752f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 34852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicTypeFromAST (lldb::BasicType basic_type) const; 34952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 35052f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 35152f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Exploring the type 35252f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 35352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 354fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 35552f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetByteSize () const; 356960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 35752f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint64_t 35852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBitSize () const; 35952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 36052f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::Encoding 36152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetEncoding (uint64_t &count) const; 36252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 36352f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::Format 36452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFormat () const; 36552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 36652f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t 36752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTypeBitAlign () const; 36852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 36952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 37052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumChildren (bool omit_empty_base_classes) const; 37152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 37252f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::BasicType 37352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicTypeEnumeration () const; 374960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 37552f792329be5db8e38961350589e97e8f2823acdGreg Clayton static lldb::BasicType 37652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicTypeEnumeration (const ConstString &name); 37752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 37852f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 37952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumDirectBaseClasses () const; 38052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 38152f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 38252f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumVirtualBaseClasses () const; 38352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 38452f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 38552f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumFields () const; 38652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 38752f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 38852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetDirectBaseClassAtIndex (size_t idx, 38952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t *bit_offset_ptr) const; 39052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 39152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 39252f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetVirtualBaseClassAtIndex (size_t idx, 39352f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t *bit_offset_ptr) const; 39452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 39552f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 39652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetFieldAtIndex (size_t idx, 39752f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::string& name, 39852f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint64_t *bit_offset_ptr, 39952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t *bitfield_bit_size_ptr, 40052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool *is_bitfield_ptr) const; 40152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 40252f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 40352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetIndexOfFieldWithName (const char* name, 40452f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType* field_clang_type = NULL, 40552f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint64_t *bit_offset_ptr = NULL, 40652f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t *bitfield_bit_size_ptr = NULL, 40752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool *is_bitfield_ptr = NULL) const; 40852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 40952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 41052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumPointeeChildren () const; 41152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 41252f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 41352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetChildClangTypeAtIndex (ExecutionContext *exe_ctx, 41452f792329be5db8e38961350589e97e8f2823acdGreg Clayton const char *parent_name, 41552f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t idx, 41652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool transparent_pointers, 41752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool omit_empty_base_classes, 41852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool ignore_array_bounds, 41952f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::string& child_name, 42052f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t &child_byte_size, 42152f792329be5db8e38961350589e97e8f2823acdGreg Clayton int32_t &child_byte_offset, 42252f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t &child_bitfield_bit_size, 42352f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t &child_bitfield_bit_offset, 42452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool &child_is_base_class, 42552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool &child_is_deref_of_parent) const; 42652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 42752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Lookup a child given a name. This function will match base class names 42852f792329be5db8e38961350589e97e8f2823acdGreg Clayton // and member member names in "clang_type" only, not descendants. 42952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 43052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetIndexOfChildWithName (const char *name, 43152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool omit_empty_base_classes) const; 43252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 43352f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Lookup a child member given a name. This function will match member names 43452f792329be5db8e38961350589e97e8f2823acdGreg Clayton // only and will descend into "clang_type" children in search for the first 43552f792329be5db8e38961350589e97e8f2823acdGreg Clayton // member in this class, or any base class that matches "name". 43652f792329be5db8e38961350589e97e8f2823acdGreg Clayton // TODO: Return all matches for a given name by returning a vector<vector<uint32_t>> 43752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // so we catch all names that match a given child name, not just the first. 438960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton size_t 43952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetIndexOfChildMemberWithName (const char *name, 44052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool omit_empty_base_classes, 44152f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::vector<uint32_t>& child_indexes) const; 442960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 44352f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t 44452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumTemplateArguments () const; 44552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 44652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 44752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetTemplateArgument (size_t idx, 44852f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::TemplateArgumentKind &kind) const; 449960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 45062fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 45152f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 45252f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Modifying RecordType 45352f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 45452f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::FieldDecl * 45552f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddFieldToRecordType (const char *name, 45652f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &field_type, 45752f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::AccessType access, 45852f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t bitfield_bit_size); 45952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 46052f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 46152f792329be5db8e38961350589e97e8f2823acdGreg Clayton BuildIndirectFields (); 46252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 46352f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::VarDecl * 46452f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddVariableToRecordType (const char *name, 46552f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &var_type, 46652f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::AccessType access); 46752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 46852f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::CXXMethodDecl * 46952f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddMethodToCXXRecordType (const char *name, 47052f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &method_type, 47152f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::AccessType access, 47252f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_virtual, 47352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_static, 47452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_inline, 47552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_explicit, 47652f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_attr_used, 47752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_artificial); 47852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 47952f792329be5db8e38961350589e97e8f2823acdGreg Clayton // C++ Base Classes 48052f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::CXXBaseSpecifier * 48152f792329be5db8e38961350589e97e8f2823acdGreg Clayton CreateBaseClassSpecifier (lldb::AccessType access, 48252f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_virtual, 48352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool base_of_class); 48452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 48552f792329be5db8e38961350589e97e8f2823acdGreg Clayton static void 48652f792329be5db8e38961350589e97e8f2823acdGreg Clayton DeleteBaseClassSpecifiers (clang::CXXBaseSpecifier **base_classes, 48752f792329be5db8e38961350589e97e8f2823acdGreg Clayton unsigned num_base_classes); 48852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 48952f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 49052f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetBaseClassesForClassType (clang::CXXBaseSpecifier const * const *base_classes, 49152f792329be5db8e38961350589e97e8f2823acdGreg Clayton unsigned num_base_classes); 49252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 49352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 49452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 49552f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetObjCSuperClass (const ClangASTType &superclass_clang_type); 49652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 49752f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 49852f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddObjCClassProperty (const char *property_name, 49952f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &property_clang_type, 50052f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::ObjCIvarDecl *ivar_decl, 50152f792329be5db8e38961350589e97e8f2823acdGreg Clayton const char *property_setter_name, 50252f792329be5db8e38961350589e97e8f2823acdGreg Clayton const char *property_getter_name, 50352f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t property_attributes, 50452f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTMetadata *metadata); 50552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 50652f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::ObjCMethodDecl * 50752f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddMethodToObjCObjectType (const char *name, // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]") 50852f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &method_clang_type, 50952f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb::AccessType access, 51052f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool is_artificial); 51162fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 51252f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::DeclContext * 51352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetDeclContextForType () const; 514d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 515b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 51677e67a51acb825d79d25be687c085833713d5205Greg Clayton bool 51752f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetDefaultAccessForRecordFields (int default_accessibility, 51852f792329be5db8e38961350589e97e8f2823acdGreg Clayton int *assigned_accessibilities, 51952f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t num_assigned_accessibilities); 52052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 52152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 52252f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetHasExternalStorage (bool has_extern); 52352f792329be5db8e38961350589e97e8f2823acdGreg Clayton 52452f792329be5db8e38961350589e97e8f2823acdGreg Clayton 52552f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 52652f792329be5db8e38961350589e97e8f2823acdGreg Clayton // clang::TagType 52752f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 52852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 52952f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 53052f792329be5db8e38961350589e97e8f2823acdGreg Clayton SetTagTypeKind (int kind) const; 53152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 53252f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 53352f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Tag Declarations 53452f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 53552f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 53652f792329be5db8e38961350589e97e8f2823acdGreg Clayton StartTagDeclarationDefinition (); 53752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 53852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 53952f792329be5db8e38961350589e97e8f2823acdGreg Clayton CompleteTagDeclarationDefinition (); 54077e67a51acb825d79d25be687c085833713d5205Greg Clayton 54152f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 54252f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Modifying Enumeration types 54352f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 54452f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 54552f792329be5db8e38961350589e97e8f2823acdGreg Clayton AddEnumerationValueToEnumerationType (const ClangASTType &enumerator_qual_type, 54652f792329be5db8e38961350589e97e8f2823acdGreg Clayton const Declaration &decl, 54752f792329be5db8e38961350589e97e8f2823acdGreg Clayton const char *name, 54852f792329be5db8e38961350589e97e8f2823acdGreg Clayton int64_t enum_value, 54952f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t enum_value_bit_size); 55052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 55152f792329be5db8e38961350589e97e8f2823acdGreg Clayton 55277e67a51acb825d79d25be687c085833713d5205Greg Clayton 553b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata ClangASTType 55452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetEnumerationIntegerType () const; 55552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 55652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 55752f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 55852f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Pointers & References 55952f792329be5db8e38961350589e97e8f2823acdGreg Clayton //------------------------------------------------------------------ 56052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 56152f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Call this function using the class type when you want to make a 56252f792329be5db8e38961350589e97e8f2823acdGreg Clayton // member pointer type to pointee_type. 56352f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 56452f792329be5db8e38961350589e97e8f2823acdGreg Clayton CreateMemberPointerType (const ClangASTType &pointee_type) const; 565b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 566b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 56752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Converts "s" to a floating point value and place resulting floating 56852f792329be5db8e38961350589e97e8f2823acdGreg Clayton // point bytes in the "dst" buffer. 56952f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t 57052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ConvertStringToFloatValue (const char *s, 57152f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint8_t *dst, 57252f792329be5db8e38961350589e97e8f2823acdGreg Clayton size_t dst_size) const; 57352f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 57452f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Dumping types 57552f792329be5db8e38961350589e97e8f2823acdGreg Clayton //---------------------------------------------------------------------- 5761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 5771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpValue (ExecutionContext *exe_ctx, 5781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 5791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 5801674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 581fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 5821674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 5831674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 5841674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_offset, 5851674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_types, 5861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_summary, 5871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool verbose, 5881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t depth); 5891674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 5901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 5911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpTypeValue (Stream *s, 5921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 5931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 594fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 5951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 5961674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 59724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton uint32_t bitfield_bit_offset, 59824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton ExecutionContextScope *exe_scope); 5991674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6001674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 6011674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpSummary (ExecutionContext *exe_ctx, 6021674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 6031674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 604fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 6051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size); 606133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton 607133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton void 60852f792329be5db8e38961350589e97e8f2823acdGreg Clayton DumpTypeDescription () const; // Dump to stdout 6091674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 61052f792329be5db8e38961350589e97e8f2823acdGreg Clayton void 61152f792329be5db8e38961350589e97e8f2823acdGreg Clayton DumpTypeDescription (Stream *s) const; 6121391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata 6131674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 6141674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetValueAsScalar (const DataExtractor &data, 615fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 6161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 61752f792329be5db8e38961350589e97e8f2823acdGreg Clayton Scalar &value) const; 618462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 6191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 6201674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton SetValueFromScalar (const Scalar &value, 6211674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream &strm); 6221674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 6241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ReadFromMemory (ExecutionContext *exe_ctx, 6251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 626b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 6271674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DataExtractor &data); 6281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 6301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton WriteToMemory (ExecutionContext *exe_ctx, 6311674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 632b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 6331674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton StreamString &new_value); 6341674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 635915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 63652f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::RecordDecl * 63752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetAsRecordDecl () const; 638915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 63952f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::CXXRecordDecl * 64052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetAsCXXRecordDecl () const; 641915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 64252f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::ObjCInterfaceDecl * 64352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetAsObjCInterfaceDecl () const; 64488db4597c7567be050b7a729f7306832f28428bbGreg Clayton 6457dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 6467dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton Clear() 6477dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton { 6487dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_type = NULL; 6497dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_ast = NULL; 6507dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton } 6517dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton 65252f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::QualType 65352f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetQualType () const 65452f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 65552f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_type) 65652f792329be5db8e38961350589e97e8f2823acdGreg Clayton return clang::QualType::getFromOpaquePtr(m_type); 65752f792329be5db8e38961350589e97e8f2823acdGreg Clayton return clang::QualType(); 65852f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 65952f792329be5db8e38961350589e97e8f2823acdGreg Clayton clang::QualType 66052f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetCanonicalQualType () const 66152f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 66252f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_type) 66352f792329be5db8e38961350589e97e8f2823acdGreg Clayton return clang::QualType::getFromOpaquePtr(m_type).getCanonicalType(); 66452f792329be5db8e38961350589e97e8f2823acdGreg Clayton return clang::QualType(); 66552f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 66652f792329be5db8e38961350589e97e8f2823acdGreg Clayton 6671674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonprivate: 66857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton lldb::clang_type_t m_type; 66957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton clang::ASTContext *m_ast; 67052f792329be5db8e38961350589e97e8f2823acdGreg Clayton 6711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton}; 6721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6730fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator == (const ClangASTType &lhs, const ClangASTType &rhs); 6740fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator != (const ClangASTType &lhs, const ClangASTType &rhs); 6750fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 6761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton} // namespace lldb_private 6781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 6791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#endif // #ifndef liblldb_ClangASTType_h_ 680