1254721Semaste//===-- ClangASTType.h ------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_ClangASTType_h_ 11254721Semaste#define liblldb_ClangASTType_h_ 12254721Semaste 13254721Semaste#include <string> 14254721Semaste#include "lldb/lldb-private.h" 15254721Semaste#include "lldb/Core/ClangForward.h" 16254721Semaste#include "clang/AST/Type.h" 17254721Semaste 18254721Semastenamespace lldb_private { 19254721Semaste 20254721Semaste//---------------------------------------------------------------------- 21254721Semaste// A class that can carry around a clang ASTContext and a opaque clang 22254721Semaste// QualType. A clang::QualType can be easily reconstructed from an 23254721Semaste// opaque clang type and often the ASTContext is needed when doing 24254721Semaste// various type related tasks, so this class allows both items to travel 25254721Semaste// in a single very lightweight class that can be used. There are many 26254721Semaste// static equivalents of the member functions that allow the ASTContext 27254721Semaste// and the opaque clang QualType to be specified for ease of use and 28254721Semaste// to avoid code duplication. 29254721Semaste//---------------------------------------------------------------------- 30254721Semasteclass ClangASTType 31254721Semaste{ 32254721Semastepublic: 33254721Semaste enum { 34254721Semaste eTypeHasChildren = (1u << 0), 35254721Semaste eTypeHasValue = (1u << 1), 36254721Semaste eTypeIsArray = (1u << 2), 37254721Semaste eTypeIsBlock = (1u << 3), 38254721Semaste eTypeIsBuiltIn = (1u << 4), 39254721Semaste eTypeIsClass = (1u << 5), 40254721Semaste eTypeIsCPlusPlus = (1u << 6), 41254721Semaste eTypeIsEnumeration = (1u << 7), 42254721Semaste eTypeIsFuncPrototype = (1u << 8), 43254721Semaste eTypeIsMember = (1u << 9), 44254721Semaste eTypeIsObjC = (1u << 10), 45254721Semaste eTypeIsPointer = (1u << 11), 46254721Semaste eTypeIsReference = (1u << 12), 47254721Semaste eTypeIsStructUnion = (1u << 13), 48254721Semaste eTypeIsTemplate = (1u << 14), 49254721Semaste eTypeIsTypedef = (1u << 15), 50254721Semaste eTypeIsVector = (1u << 16), 51254721Semaste eTypeIsScalar = (1u << 17), 52254721Semaste eTypeIsInteger = (1u << 18), 53254721Semaste eTypeIsFloat = (1u << 19), 54254721Semaste eTypeIsComplex = (1u << 20), 55254721Semaste eTypeIsSigned = (1u << 21) 56254721Semaste }; 57254721Semaste 58254721Semaste 59254721Semaste //---------------------------------------------------------------------- 60254721Semaste // Constructors and Destructors 61254721Semaste //---------------------------------------------------------------------- 62254721Semaste ClangASTType (clang::ASTContext *ast_context, lldb::clang_type_t type) : 63254721Semaste m_type (type), 64254721Semaste m_ast (ast_context) 65254721Semaste { 66254721Semaste } 67254721Semaste 68254721Semaste ClangASTType (clang::ASTContext *ast_context, clang::QualType qual_type); 69254721Semaste 70254721Semaste ClangASTType (const ClangASTType &rhs) : 71254721Semaste m_type (rhs.m_type), 72254721Semaste m_ast (rhs.m_ast) 73254721Semaste { 74254721Semaste } 75254721Semaste 76254721Semaste ClangASTType () : 77254721Semaste m_type (0), 78254721Semaste m_ast (0) 79254721Semaste { 80254721Semaste } 81254721Semaste 82254721Semaste ~ClangASTType(); 83254721Semaste 84254721Semaste //---------------------------------------------------------------------- 85254721Semaste // Operators 86254721Semaste //---------------------------------------------------------------------- 87254721Semaste 88254721Semaste const ClangASTType & 89254721Semaste operator= (const ClangASTType &rhs) 90254721Semaste { 91254721Semaste m_type = rhs.m_type; 92254721Semaste m_ast = rhs.m_ast; 93254721Semaste return *this; 94254721Semaste } 95254721Semaste 96254721Semaste 97254721Semaste //---------------------------------------------------------------------- 98254721Semaste // Tests 99254721Semaste //---------------------------------------------------------------------- 100254721Semaste 101263363Semaste explicit operator bool () const 102254721Semaste { 103254721Semaste return m_type != NULL && m_ast != NULL; 104254721Semaste } 105254721Semaste 106254721Semaste bool 107254721Semaste operator < (const ClangASTType &rhs) const 108254721Semaste { 109254721Semaste if (m_ast == rhs.m_ast) 110254721Semaste return m_type < rhs.m_type; 111254721Semaste return m_ast < rhs.m_ast; 112254721Semaste } 113254721Semaste 114254721Semaste bool 115254721Semaste IsValid () const 116254721Semaste { 117254721Semaste return m_type != NULL && m_ast != NULL; 118254721Semaste } 119254721Semaste 120254721Semaste bool 121254721Semaste IsArrayType (ClangASTType *element_type, 122254721Semaste uint64_t *size, 123254721Semaste bool *is_incomplete) const; 124254721Semaste 125254721Semaste bool 126254721Semaste IsArrayOfScalarType () const; 127254721Semaste 128254721Semaste bool 129254721Semaste IsAggregateType () const; 130254721Semaste 131254721Semaste bool 132254721Semaste IsBeingDefined () const; 133254721Semaste 134254721Semaste bool 135254721Semaste IsCharType () const; 136254721Semaste 137254721Semaste bool 138254721Semaste IsCompleteType () const; 139254721Semaste 140254721Semaste bool 141254721Semaste IsConst() const; 142254721Semaste 143254721Semaste bool 144254721Semaste IsCStringType (uint32_t &length) const; 145254721Semaste 146254721Semaste bool 147254721Semaste IsCXXClassType () const; 148254721Semaste 149254721Semaste bool 150254721Semaste IsDefined() const; 151254721Semaste 152254721Semaste bool 153254721Semaste IsFloatingPointType (uint32_t &count, bool &is_complex) const; 154254721Semaste 155254721Semaste bool 156254721Semaste IsFunctionType (bool *is_variadic_ptr = NULL) const; 157254721Semaste 158263363Semaste size_t 159263363Semaste GetNumberOfFunctionArguments () const; 160263363Semaste 161263363Semaste ClangASTType 162263363Semaste GetFunctionArgumentAtIndex (const size_t index); 163263363Semaste 164254721Semaste bool 165254721Semaste IsVariadicFunctionType () const; 166254721Semaste 167254721Semaste bool 168254721Semaste IsFunctionPointerType () const; 169254721Semaste 170254721Semaste bool 171254721Semaste IsIntegerType (bool &is_signed) const; 172254721Semaste 173254721Semaste bool 174254721Semaste IsObjCClassType () const; 175254721Semaste 176254721Semaste bool 177254721Semaste IsObjCClassTypeAndHasIVars (bool check_superclass) const; 178254721Semaste 179254721Semaste bool 180254721Semaste IsObjCObjectOrInterfaceType () const; 181254721Semaste 182254721Semaste bool 183254721Semaste IsObjCObjectPointerType (ClangASTType *target_type = NULL); 184254721Semaste 185254721Semaste bool 186254721Semaste IsPolymorphicClass () const; 187254721Semaste 188254721Semaste bool 189254721Semaste IsPossibleCPlusPlusDynamicType (ClangASTType *target_type = NULL) const 190254721Semaste { 191254721Semaste return IsPossibleDynamicType (target_type, true, false); 192254721Semaste } 193254721Semaste 194254721Semaste bool 195254721Semaste IsPossibleDynamicType (ClangASTType *target_type, // Can pass NULL 196254721Semaste bool check_cplusplus, 197254721Semaste bool check_objc) const; 198254721Semaste 199254721Semaste 200254721Semaste bool 201254721Semaste IsPointerToScalarType () const; 202254721Semaste 203254721Semaste bool 204263363Semaste IsRuntimeGeneratedType () const; 205263363Semaste 206263363Semaste bool 207254721Semaste IsPointerType (ClangASTType *pointee_type = NULL) const; 208254721Semaste 209254721Semaste bool 210254721Semaste IsPointerOrReferenceType (ClangASTType *pointee_type = NULL) const; 211254721Semaste 212254721Semaste bool 213254721Semaste IsReferenceType (ClangASTType *pointee_type = NULL) const; 214254721Semaste 215254721Semaste bool 216254721Semaste IsScalarType () const; 217254721Semaste 218254721Semaste bool 219254721Semaste IsTypedefType () const; 220254721Semaste 221254721Semaste bool 222254721Semaste IsVoidType () const; 223254721Semaste 224254721Semaste bool 225254721Semaste GetCXXClassName (std::string &class_name) const; 226254721Semaste 227254721Semaste bool 228254721Semaste GetObjCClassName (std::string &class_name); 229254721Semaste 230254721Semaste 231254721Semaste //---------------------------------------------------------------------- 232254721Semaste // Type Completion 233254721Semaste //---------------------------------------------------------------------- 234254721Semaste 235254721Semaste bool 236254721Semaste GetCompleteType () const; 237254721Semaste 238254721Semaste //---------------------------------------------------------------------- 239254721Semaste // AST related queries 240254721Semaste //---------------------------------------------------------------------- 241254721Semaste 242254721Semaste size_t 243254721Semaste GetPointerByteSize () const; 244254721Semaste 245254721Semaste //---------------------------------------------------------------------- 246254721Semaste // Accessors 247254721Semaste //---------------------------------------------------------------------- 248254721Semaste 249254721Semaste clang::ASTContext * 250254721Semaste GetASTContext() const 251254721Semaste { 252254721Semaste return m_ast; 253254721Semaste } 254254721Semaste 255254721Semaste ConstString 256254721Semaste GetConstQualifiedTypeName () const; 257254721Semaste 258254721Semaste ConstString 259254721Semaste GetConstTypeName () const; 260254721Semaste 261263363Semaste ConstString 262254721Semaste GetTypeName () const; 263254721Semaste 264254721Semaste uint32_t 265254721Semaste GetTypeInfo (ClangASTType *pointee_or_element_clang_type = NULL) const; 266254721Semaste 267254721Semaste lldb::LanguageType 268254721Semaste GetMinimumLanguage (); 269254721Semaste 270254721Semaste lldb::clang_type_t 271254721Semaste GetOpaqueQualType() const 272254721Semaste { 273254721Semaste return m_type; 274254721Semaste } 275254721Semaste 276254721Semaste lldb::TypeClass 277254721Semaste GetTypeClass () const; 278254721Semaste 279254721Semaste void 280254721Semaste SetClangType (clang::ASTContext *ast, lldb::clang_type_t type) 281254721Semaste { 282254721Semaste m_ast = ast; 283254721Semaste m_type = type; 284254721Semaste } 285254721Semaste 286254721Semaste void 287254721Semaste SetClangType (clang::ASTContext *ast, clang::QualType qual_type); 288254721Semaste 289254721Semaste unsigned 290254721Semaste GetTypeQualifiers() const; 291254721Semaste 292254721Semaste //---------------------------------------------------------------------- 293254721Semaste // Creating related types 294254721Semaste //---------------------------------------------------------------------- 295254721Semaste 296254721Semaste ClangASTType 297254721Semaste AddConstModifier () const; 298254721Semaste 299254721Semaste ClangASTType 300254721Semaste AddRestrictModifier () const; 301254721Semaste 302254721Semaste ClangASTType 303254721Semaste AddVolatileModifier () const; 304254721Semaste 305254721Semaste // Using the current type, create a new typedef to that type using "typedef_name" 306254721Semaste // as the name and "decl_ctx" as the decl context. 307254721Semaste ClangASTType 308254721Semaste CreateTypedefType (const char *typedef_name, 309254721Semaste clang::DeclContext *decl_ctx) const; 310254721Semaste 311254721Semaste ClangASTType 312254721Semaste GetArrayElementType (uint64_t& stride) const; 313254721Semaste 314254721Semaste ClangASTType 315254721Semaste GetCanonicalType () const; 316254721Semaste 317254721Semaste ClangASTType 318254721Semaste GetFullyUnqualifiedType () const; 319254721Semaste 320254721Semaste // Returns -1 if this isn't a function of if the fucntion doesn't have a prototype 321254721Semaste // Returns a value >= 0 if there is a prototype. 322254721Semaste int 323254721Semaste GetFunctionArgumentCount () const; 324254721Semaste 325254721Semaste ClangASTType 326254721Semaste GetFunctionArgumentTypeAtIndex (size_t idx); 327254721Semaste 328254721Semaste ClangASTType 329254721Semaste GetFunctionReturnType () const; 330254721Semaste 331254721Semaste ClangASTType 332254721Semaste GetLValueReferenceType () const; 333254721Semaste 334254721Semaste ClangASTType 335254721Semaste GetNonReferenceType () const; 336254721Semaste 337254721Semaste ClangASTType 338254721Semaste GetPointeeType () const; 339254721Semaste 340254721Semaste ClangASTType 341254721Semaste GetPointerType () const; 342254721Semaste 343254721Semaste ClangASTType 344254721Semaste GetRValueReferenceType () const; 345254721Semaste 346254721Semaste // If the current object represents a typedef type, get the underlying type 347254721Semaste ClangASTType 348254721Semaste GetTypedefedType () const; 349254721Semaste 350254721Semaste ClangASTType 351254721Semaste RemoveFastQualifiers () const; 352254721Semaste 353254721Semaste //---------------------------------------------------------------------- 354254721Semaste // Create related types using the current type's AST 355254721Semaste //---------------------------------------------------------------------- 356254721Semaste ClangASTType 357254721Semaste GetBasicTypeFromAST (lldb::BasicType basic_type) const; 358254721Semaste 359254721Semaste //---------------------------------------------------------------------- 360254721Semaste // Exploring the type 361254721Semaste //---------------------------------------------------------------------- 362254721Semaste 363254721Semaste uint64_t 364254721Semaste GetByteSize () const; 365254721Semaste 366254721Semaste uint64_t 367254721Semaste GetBitSize () const; 368254721Semaste 369254721Semaste lldb::Encoding 370254721Semaste GetEncoding (uint64_t &count) const; 371254721Semaste 372254721Semaste lldb::Format 373254721Semaste GetFormat () const; 374254721Semaste 375254721Semaste size_t 376254721Semaste GetTypeBitAlign () const; 377254721Semaste 378254721Semaste uint32_t 379254721Semaste GetNumChildren (bool omit_empty_base_classes) const; 380254721Semaste 381254721Semaste lldb::BasicType 382254721Semaste GetBasicTypeEnumeration () const; 383254721Semaste 384254721Semaste static lldb::BasicType 385254721Semaste GetBasicTypeEnumeration (const ConstString &name); 386254721Semaste 387254721Semaste uint32_t 388254721Semaste GetNumDirectBaseClasses () const; 389254721Semaste 390254721Semaste uint32_t 391254721Semaste GetNumVirtualBaseClasses () const; 392254721Semaste 393254721Semaste uint32_t 394254721Semaste GetNumFields () const; 395254721Semaste 396254721Semaste ClangASTType 397254721Semaste GetDirectBaseClassAtIndex (size_t idx, 398254721Semaste uint32_t *bit_offset_ptr) const; 399254721Semaste 400254721Semaste ClangASTType 401254721Semaste GetVirtualBaseClassAtIndex (size_t idx, 402254721Semaste uint32_t *bit_offset_ptr) const; 403254721Semaste 404254721Semaste ClangASTType 405254721Semaste GetFieldAtIndex (size_t idx, 406254721Semaste std::string& name, 407254721Semaste uint64_t *bit_offset_ptr, 408254721Semaste uint32_t *bitfield_bit_size_ptr, 409254721Semaste bool *is_bitfield_ptr) const; 410254721Semaste 411254721Semaste uint32_t 412254721Semaste GetIndexOfFieldWithName (const char* name, 413254721Semaste ClangASTType* field_clang_type = NULL, 414254721Semaste uint64_t *bit_offset_ptr = NULL, 415254721Semaste uint32_t *bitfield_bit_size_ptr = NULL, 416254721Semaste bool *is_bitfield_ptr = NULL) const; 417254721Semaste 418254721Semaste uint32_t 419254721Semaste GetNumPointeeChildren () const; 420254721Semaste 421254721Semaste ClangASTType 422254721Semaste GetChildClangTypeAtIndex (ExecutionContext *exe_ctx, 423254721Semaste const char *parent_name, 424254721Semaste size_t idx, 425254721Semaste bool transparent_pointers, 426254721Semaste bool omit_empty_base_classes, 427254721Semaste bool ignore_array_bounds, 428254721Semaste std::string& child_name, 429254721Semaste uint32_t &child_byte_size, 430254721Semaste int32_t &child_byte_offset, 431254721Semaste uint32_t &child_bitfield_bit_size, 432254721Semaste uint32_t &child_bitfield_bit_offset, 433254721Semaste bool &child_is_base_class, 434254721Semaste bool &child_is_deref_of_parent) const; 435254721Semaste 436254721Semaste // Lookup a child given a name. This function will match base class names 437254721Semaste // and member member names in "clang_type" only, not descendants. 438254721Semaste uint32_t 439254721Semaste GetIndexOfChildWithName (const char *name, 440254721Semaste bool omit_empty_base_classes) const; 441254721Semaste 442254721Semaste // Lookup a child member given a name. This function will match member names 443254721Semaste // only and will descend into "clang_type" children in search for the first 444254721Semaste // member in this class, or any base class that matches "name". 445254721Semaste // TODO: Return all matches for a given name by returning a vector<vector<uint32_t>> 446254721Semaste // so we catch all names that match a given child name, not just the first. 447254721Semaste size_t 448254721Semaste GetIndexOfChildMemberWithName (const char *name, 449254721Semaste bool omit_empty_base_classes, 450254721Semaste std::vector<uint32_t>& child_indexes) const; 451254721Semaste 452254721Semaste size_t 453254721Semaste GetNumTemplateArguments () const; 454254721Semaste 455254721Semaste ClangASTType 456254721Semaste GetTemplateArgument (size_t idx, 457254721Semaste lldb::TemplateArgumentKind &kind) const; 458254721Semaste 459254721Semaste 460254721Semaste //---------------------------------------------------------------------- 461254721Semaste // Modifying RecordType 462254721Semaste //---------------------------------------------------------------------- 463254721Semaste clang::FieldDecl * 464254721Semaste AddFieldToRecordType (const char *name, 465254721Semaste const ClangASTType &field_type, 466254721Semaste lldb::AccessType access, 467254721Semaste uint32_t bitfield_bit_size); 468254721Semaste 469254721Semaste void 470254721Semaste BuildIndirectFields (); 471254721Semaste 472254721Semaste clang::VarDecl * 473254721Semaste AddVariableToRecordType (const char *name, 474254721Semaste const ClangASTType &var_type, 475254721Semaste lldb::AccessType access); 476254721Semaste 477254721Semaste clang::CXXMethodDecl * 478254721Semaste AddMethodToCXXRecordType (const char *name, 479254721Semaste const ClangASTType &method_type, 480254721Semaste lldb::AccessType access, 481254721Semaste bool is_virtual, 482254721Semaste bool is_static, 483254721Semaste bool is_inline, 484254721Semaste bool is_explicit, 485254721Semaste bool is_attr_used, 486254721Semaste bool is_artificial); 487254721Semaste 488254721Semaste // C++ Base Classes 489254721Semaste clang::CXXBaseSpecifier * 490254721Semaste CreateBaseClassSpecifier (lldb::AccessType access, 491254721Semaste bool is_virtual, 492254721Semaste bool base_of_class); 493254721Semaste 494254721Semaste static void 495254721Semaste DeleteBaseClassSpecifiers (clang::CXXBaseSpecifier **base_classes, 496254721Semaste unsigned num_base_classes); 497254721Semaste 498254721Semaste bool 499254721Semaste SetBaseClassesForClassType (clang::CXXBaseSpecifier const * const *base_classes, 500254721Semaste unsigned num_base_classes); 501254721Semaste 502254721Semaste 503254721Semaste bool 504254721Semaste SetObjCSuperClass (const ClangASTType &superclass_clang_type); 505254721Semaste 506254721Semaste bool 507254721Semaste AddObjCClassProperty (const char *property_name, 508254721Semaste const ClangASTType &property_clang_type, 509254721Semaste clang::ObjCIvarDecl *ivar_decl, 510254721Semaste const char *property_setter_name, 511254721Semaste const char *property_getter_name, 512254721Semaste uint32_t property_attributes, 513254721Semaste ClangASTMetadata *metadata); 514254721Semaste 515254721Semaste clang::ObjCMethodDecl * 516254721Semaste AddMethodToObjCObjectType (const char *name, // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]") 517254721Semaste const ClangASTType &method_clang_type, 518254721Semaste lldb::AccessType access, 519254721Semaste bool is_artificial); 520254721Semaste 521254721Semaste clang::DeclContext * 522254721Semaste GetDeclContextForType () const; 523254721Semaste 524254721Semaste 525254721Semaste bool 526254721Semaste SetDefaultAccessForRecordFields (int default_accessibility, 527254721Semaste int *assigned_accessibilities, 528254721Semaste size_t num_assigned_accessibilities); 529254721Semaste 530254721Semaste bool 531254721Semaste SetHasExternalStorage (bool has_extern); 532254721Semaste 533254721Semaste 534254721Semaste //------------------------------------------------------------------ 535254721Semaste // clang::TagType 536254721Semaste //------------------------------------------------------------------ 537254721Semaste 538254721Semaste bool 539254721Semaste SetTagTypeKind (int kind) const; 540254721Semaste 541254721Semaste //------------------------------------------------------------------ 542254721Semaste // Tag Declarations 543254721Semaste //------------------------------------------------------------------ 544254721Semaste bool 545254721Semaste StartTagDeclarationDefinition (); 546254721Semaste 547254721Semaste bool 548254721Semaste CompleteTagDeclarationDefinition (); 549254721Semaste 550254721Semaste //---------------------------------------------------------------------- 551254721Semaste // Modifying Enumeration types 552254721Semaste //---------------------------------------------------------------------- 553254721Semaste bool 554254721Semaste AddEnumerationValueToEnumerationType (const ClangASTType &enumerator_qual_type, 555254721Semaste const Declaration &decl, 556254721Semaste const char *name, 557254721Semaste int64_t enum_value, 558254721Semaste uint32_t enum_value_bit_size); 559254721Semaste 560254721Semaste 561254721Semaste 562254721Semaste ClangASTType 563254721Semaste GetEnumerationIntegerType () const; 564254721Semaste 565254721Semaste 566254721Semaste //------------------------------------------------------------------ 567254721Semaste // Pointers & References 568254721Semaste //------------------------------------------------------------------ 569254721Semaste 570254721Semaste // Call this function using the class type when you want to make a 571254721Semaste // member pointer type to pointee_type. 572254721Semaste ClangASTType 573254721Semaste CreateMemberPointerType (const ClangASTType &pointee_type) const; 574254721Semaste 575254721Semaste 576254721Semaste // Converts "s" to a floating point value and place resulting floating 577254721Semaste // point bytes in the "dst" buffer. 578254721Semaste size_t 579254721Semaste ConvertStringToFloatValue (const char *s, 580254721Semaste uint8_t *dst, 581254721Semaste size_t dst_size) const; 582254721Semaste //---------------------------------------------------------------------- 583254721Semaste // Dumping types 584254721Semaste //---------------------------------------------------------------------- 585254721Semaste void 586254721Semaste DumpValue (ExecutionContext *exe_ctx, 587254721Semaste Stream *s, 588254721Semaste lldb::Format format, 589254721Semaste const DataExtractor &data, 590254721Semaste lldb::offset_t data_offset, 591254721Semaste size_t data_byte_size, 592254721Semaste uint32_t bitfield_bit_size, 593254721Semaste uint32_t bitfield_bit_offset, 594254721Semaste bool show_types, 595254721Semaste bool show_summary, 596254721Semaste bool verbose, 597254721Semaste uint32_t depth); 598254721Semaste 599254721Semaste bool 600254721Semaste DumpTypeValue (Stream *s, 601254721Semaste lldb::Format format, 602254721Semaste const DataExtractor &data, 603254721Semaste lldb::offset_t data_offset, 604254721Semaste size_t data_byte_size, 605254721Semaste uint32_t bitfield_bit_size, 606254721Semaste uint32_t bitfield_bit_offset, 607254721Semaste ExecutionContextScope *exe_scope); 608254721Semaste 609254721Semaste void 610254721Semaste DumpSummary (ExecutionContext *exe_ctx, 611254721Semaste Stream *s, 612254721Semaste const DataExtractor &data, 613254721Semaste lldb::offset_t data_offset, 614254721Semaste size_t data_byte_size); 615254721Semaste 616254721Semaste void 617254721Semaste DumpTypeDescription () const; // Dump to stdout 618254721Semaste 619254721Semaste void 620254721Semaste DumpTypeDescription (Stream *s) const; 621254721Semaste 622254721Semaste bool 623254721Semaste GetValueAsScalar (const DataExtractor &data, 624254721Semaste lldb::offset_t data_offset, 625254721Semaste size_t data_byte_size, 626254721Semaste Scalar &value) const; 627254721Semaste 628254721Semaste bool 629254721Semaste SetValueFromScalar (const Scalar &value, 630254721Semaste Stream &strm); 631254721Semaste 632254721Semaste bool 633254721Semaste ReadFromMemory (ExecutionContext *exe_ctx, 634254721Semaste lldb::addr_t addr, 635254721Semaste AddressType address_type, 636254721Semaste DataExtractor &data); 637254721Semaste 638254721Semaste bool 639254721Semaste WriteToMemory (ExecutionContext *exe_ctx, 640254721Semaste lldb::addr_t addr, 641254721Semaste AddressType address_type, 642254721Semaste StreamString &new_value); 643254721Semaste 644254721Semaste 645254721Semaste clang::RecordDecl * 646254721Semaste GetAsRecordDecl () const; 647254721Semaste 648254721Semaste clang::CXXRecordDecl * 649254721Semaste GetAsCXXRecordDecl () const; 650254721Semaste 651254721Semaste clang::ObjCInterfaceDecl * 652254721Semaste GetAsObjCInterfaceDecl () const; 653254721Semaste 654254721Semaste void 655254721Semaste Clear() 656254721Semaste { 657254721Semaste m_type = NULL; 658254721Semaste m_ast = NULL; 659254721Semaste } 660254721Semaste 661254721Semaste clang::QualType 662254721Semaste GetQualType () const 663254721Semaste { 664254721Semaste if (m_type) 665254721Semaste return clang::QualType::getFromOpaquePtr(m_type); 666254721Semaste return clang::QualType(); 667254721Semaste } 668254721Semaste clang::QualType 669254721Semaste GetCanonicalQualType () const 670254721Semaste { 671254721Semaste if (m_type) 672254721Semaste return clang::QualType::getFromOpaquePtr(m_type).getCanonicalType(); 673254721Semaste return clang::QualType(); 674254721Semaste } 675254721Semaste 676254721Semasteprivate: 677254721Semaste lldb::clang_type_t m_type; 678254721Semaste clang::ASTContext *m_ast; 679254721Semaste 680254721Semaste}; 681254721Semaste 682254721Semastebool operator == (const ClangASTType &lhs, const ClangASTType &rhs); 683254721Semastebool operator != (const ClangASTType &lhs, const ClangASTType &rhs); 684254721Semaste 685254721Semaste 686254721Semaste} // namespace lldb_private 687254721Semaste 688254721Semaste#endif // #ifndef liblldb_ClangASTType_h_ 689