diff --git a/lldb/include/lldb/Expression/ClangASTSource.h b/lldb/include/lldb/Expression/ClangASTSource.h index eebc11be5e48..be52f0777372 100644 --- a/lldb/include/lldb/Expression/ClangASTSource.h +++ b/lldb/include/lldb/Expression/ClangASTSource.h @@ -297,17 +297,19 @@ public: } ClangASTMetadata * - GetMetadata(uintptr_t object) + GetMetadata(const void * object) { return m_original.GetMetadata(object); } - void SetMetadata(uintptr_t object, ClangASTMetadata &metadata) + void + SetMetadata(const void * object, ClangASTMetadata &metadata) { return m_original.SetMetadata(object, metadata); } - bool HasMetadata(uintptr_t object) + bool + HasMetadata(const void * object) { return m_original.HasMetadata(object); } diff --git a/lldb/include/lldb/Symbol/ClangASTContext.h b/lldb/include/lldb/Symbol/ClangASTContext.h index a1589b5ded78..1b4dd2b5017d 100644 --- a/lldb/include/lldb/Symbol/ClangASTContext.h +++ b/lldb/include/lldb/Symbol/ClangASTContext.h @@ -144,10 +144,10 @@ public: GetCompleteDecl (clang::ASTContext *ast, clang::Decl *decl); - void SetMetadataAsUserID (uintptr_t object, + void SetMetadataAsUserID (const void *object, lldb::user_id_t user_id); - void SetMetadata (uintptr_t object, + void SetMetadata (const void *object, ClangASTMetadata &meta_data) { SetMetadata(getASTContext(), object, meta_data); @@ -155,18 +155,18 @@ public: static void SetMetadata (clang::ASTContext *ast, - uintptr_t object, + const void *object, ClangASTMetadata &meta_data); ClangASTMetadata * - GetMetadata (uintptr_t object) + GetMetadata (const void *object) { return GetMetadata(getASTContext(), object); } static ClangASTMetadata * GetMetadata (clang::ASTContext *ast, - uintptr_t object); + const void *object); //------------------------------------------------------------------ // Basic Types diff --git a/lldb/include/lldb/Symbol/ClangASTType.h b/lldb/include/lldb/Symbol/ClangASTType.h index f623cee8e4c7..39a1982b4b9b 100644 --- a/lldb/include/lldb/Symbol/ClangASTType.h +++ b/lldb/include/lldb/Symbol/ClangASTType.h @@ -214,12 +214,6 @@ public: lldb::clang_type_t opaque_clang_qual_type, Stream *s); - void DumpTypeCode (Stream *s); - - static void - DumpTypeCode (void *type, - Stream *s); - lldb::Encoding GetEncoding (uint64_t &count); diff --git a/lldb/include/lldb/Symbol/ClangExternalASTSourceCommon.h b/lldb/include/lldb/Symbol/ClangExternalASTSourceCommon.h index b3ef1302fe2a..72d77e74ca90 100644 --- a/lldb/include/lldb/Symbol/ClangExternalASTSourceCommon.h +++ b/lldb/include/lldb/Symbol/ClangExternalASTSourceCommon.h @@ -74,7 +74,9 @@ public: m_union_is_user_id = true; m_union_is_isa_ptr = false; } - lldb::user_id_t GetUserID () const + + lldb::user_id_t + GetUserID () const { if (m_union_is_user_id) return m_user_id; @@ -90,7 +92,8 @@ public: m_union_is_isa_ptr = true; } - uint64_t GetISAPtr () const + uint64_t + GetISAPtr () const { if (m_union_is_isa_ptr) return m_isa_ptr; @@ -98,7 +101,8 @@ public: return 0; } - void SetObjectPtrName(const char *name) + void + SetObjectPtrName(const char *name) { m_has_object_ptr = true; if (strcmp (name, "self") == 0) @@ -122,7 +126,8 @@ public: return lldb::eLanguageTypeUnknown; } - const char *GetObjectPtrName() const + const char * + GetObjectPtrName() const { if (m_has_object_ptr) { @@ -135,11 +140,15 @@ public: return NULL; } - bool HasObjectPtr() const + bool + HasObjectPtr() const { return m_has_object_ptr; } + void + Dump (Stream *s); + private: union { @@ -160,11 +169,11 @@ public: ClangExternalASTSourceCommon(); ~ClangExternalASTSourceCommon(); - virtual ClangASTMetadata *GetMetadata(uintptr_t object); - virtual void SetMetadata(uintptr_t object, ClangASTMetadata &metadata); - virtual bool HasMetadata(uintptr_t object); + virtual ClangASTMetadata *GetMetadata(const void *object); + virtual void SetMetadata(const void *object, ClangASTMetadata &metadata); + virtual bool HasMetadata(const void *object); private: - typedef llvm::DenseMap MetadataMap; + typedef llvm::DenseMap MetadataMap; MetadataMap m_metadata; uint64_t m_magic; ///< Because we don't have RTTI, we must take it diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp index c3c3e44025c1..2859cd1387aa 100644 --- a/lldb/source/Commands/CommandObjectMemory.cpp +++ b/lldb/source/Commands/CommandObjectMemory.cpp @@ -805,8 +805,6 @@ protected: if (format != eFormatDefault) valobj_sp->SetFormat (format); - bool scope_already_checked = true; - ValueObject::DumpValueObjectOptions options(m_varobj_options.GetAsDumpOptions(false,format)); ValueObject::DumpValueObject (*output_stream, diff --git a/lldb/source/Expression/ClangUserExpression.cpp b/lldb/source/Expression/ClangUserExpression.cpp index 98b5c63efd24..5a55609fc539 100644 --- a/lldb/source/Expression/ClangUserExpression.cpp +++ b/lldb/source/Expression/ClangUserExpression.cpp @@ -228,7 +228,7 @@ ClangUserExpression::ScanContext(ExecutionContext &exe_ctx, Error &err) // that this is a method of a class in whatever runtime the debug info says the object pointer // belongs to. Do that here. - ClangASTMetadata *metadata = ClangASTContext::GetMetadata (&decl_context->getParentASTContext(), (uintptr_t) function_decl); + ClangASTMetadata *metadata = ClangASTContext::GetMetadata (&decl_context->getParentASTContext(), function_decl); if (metadata && metadata->HasObjectPtr()) { lldb::LanguageType language = metadata->GetObjectPtrLanguage(); diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeVendor.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeVendor.cpp index f601c8ba4a17..a5e3e63a8d4f 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeVendor.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeVendor.cpp @@ -198,8 +198,8 @@ AppleObjCTypeVendor::GetDeclForISA(ObjCLanguageRuntime::ObjCISA isa) NULL); ClangASTMetadata meta_data; - meta_data.SetISAPtr((uint64_t) isa); - m_external_source->SetMetadata((uintptr_t)new_iface_decl, meta_data); + meta_data.SetISAPtr(isa); + m_external_source->SetMetadata(new_iface_decl, meta_data); new_iface_decl->setHasExternalVisibleStorage(); new_iface_decl->setHasExternalLexicalStorage(); @@ -500,7 +500,7 @@ AppleObjCTypeVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) { lldb::LogSP log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS)); // FIXME - a more appropriate log channel? - ClangASTMetadata *metadata = m_external_source->GetMetadata((uintptr_t)interface_decl); + ClangASTMetadata *metadata = m_external_source->GetMetadata(interface_decl); ObjCLanguageRuntime::ObjCISA objc_isa = 0; if (metadata) objc_isa = metadata->GetISAPtr(); @@ -630,7 +630,7 @@ AppleObjCTypeVendor::FindTypes (const ConstString &name, ASTDumper dumper(result_iface_type); uint64_t isa_value = LLDB_INVALID_ADDRESS; - ClangASTMetadata *metadata = m_external_source->GetMetadata((uintptr_t)result_iface_decl); + ClangASTMetadata *metadata = m_external_source->GetMetadata(result_iface_decl); if (metadata) isa_value = metadata->GetISAPtr(); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 53e99d746d99..6d4e89d110c2 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -1848,7 +1848,7 @@ SymbolFileDWARF::ParseChildMembers accessibility, bit_size); - GetClangASTContext().SetMetadataAsUserID ((uintptr_t)field_decl, MakeUserID(die->GetOffset())); + GetClangASTContext().SetMetadataAsUserID (field_decl, MakeUserID(die->GetOffset())); if (this_field_info.IsValid()) { @@ -1893,7 +1893,7 @@ SymbolFileDWARF::ParseChildMembers &metadata)); if (ivar_decl) - GetClangASTContext().SetMetadataAsUserID ((uintptr_t)ivar_decl, MakeUserID(die->GetOffset())); + GetClangASTContext().SetMetadataAsUserID (ivar_decl, MakeUserID(die->GetOffset())); } } } @@ -4059,7 +4059,7 @@ SymbolFileDWARF::ParseChildParameters (const SymbolContext& sc, assert(param_var_decl); function_param_decls.push_back(param_var_decl); - GetClangASTContext().SetMetadataAsUserID ((uintptr_t)param_var_decl, MakeUserID(die->GetOffset())); + GetClangASTContext().SetMetadataAsUserID (param_var_decl, MakeUserID(die->GetOffset())); } } } @@ -5920,8 +5920,8 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu, clang_type = ast.CreateClassTemplateSpecializationType (class_specialization_decl); clang_type_was_created = true; - GetClangASTContext().SetMetadata ((uintptr_t)class_template_decl, metadata); - GetClangASTContext().SetMetadata ((uintptr_t)class_specialization_decl, metadata); + GetClangASTContext().SetMetadata (class_template_decl, metadata); + GetClangASTContext().SetMetadata (class_specialization_decl, metadata); } } @@ -6338,7 +6338,7 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu, if (type_handled) { LinkDeclContextToDIE(ClangASTContext::GetAsDeclContext(objc_method_decl), die); - GetClangASTContext().SetMetadataAsUserID ((uintptr_t)objc_method_decl, MakeUserID(die->GetOffset())); + GetClangASTContext().SetMetadataAsUserID (objc_method_decl, MakeUserID(die->GetOffset())); } else { @@ -6509,11 +6509,11 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu, { metadata.SetObjectPtrName(object_pointer_name.c_str()); if (log) - log->Printf ("Setting object pointer name: %s on method object 0x%ld.\n", + log->Printf ("Setting object pointer name: %s on method object %p.\n", object_pointer_name.c_str(), - (uintptr_t) cxx_method_decl); + cxx_method_decl); } - GetClangASTContext().SetMetadata ((uintptr_t)cxx_method_decl, metadata); + GetClangASTContext().SetMetadata (cxx_method_decl, metadata); } } } @@ -6587,11 +6587,11 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu, { metadata.SetObjectPtrName(object_pointer_name.c_str()); if (log) - log->Printf ("Setting object pointer name: %s on function object 0x%ld.\n", + log->Printf ("Setting object pointer name: %s on function object %p.", object_pointer_name.c_str(), - (uintptr_t) function_decl); + function_decl); } - GetClangASTContext().SetMetadata ((uintptr_t)function_decl, metadata); + GetClangASTContext().SetMetadata (function_decl, metadata); } } type_sp.reset( new Type (MakeUserID(die->GetOffset()), diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp index 6eed9fc42cc8..c04aa5629793 100644 --- a/lldb/source/Symbol/ClangASTContext.cpp +++ b/lldb/source/Symbol/ClangASTContext.cpp @@ -1168,7 +1168,7 @@ ClangASTContext::CreateRecordType (DeclContext *decl_ctx, if (decl) { if (metadata) - SetMetadata(ast, (uintptr_t)decl, *metadata); + SetMetadata(ast, decl, *metadata); if (access_type != eAccessNone) decl->setAccess (ConvertAccessTypeToAccessSpecifier (access_type)); @@ -2312,7 +2312,7 @@ ClangASTContext::CreateObjCClass isInternal); if (decl && metadata) - SetMetadata(ast, (uintptr_t)decl, *metadata); + SetMetadata(ast, decl, *metadata); return ast->getObjCInterfaceType(decl).getAsOpaquePtr(); } @@ -2474,7 +2474,7 @@ ClangASTContext::AddObjCClassProperty if (property_decl) { if (metadata) - SetMetadata(ast, (uintptr_t)property_decl, *metadata); + SetMetadata(ast, property_decl, *metadata); class_interface_decl->addDecl (property_decl); @@ -2554,7 +2554,7 @@ ClangASTContext::AddObjCClassProperty HasRelatedResultType); if (getter && metadata) - SetMetadata(ast, (uintptr_t)getter, *metadata); + SetMetadata(ast, getter, *metadata); getter->setMethodParams(*ast, ArrayRef(), ArrayRef()); @@ -2589,7 +2589,7 @@ ClangASTContext::AddObjCClassProperty HasRelatedResultType); if (setter && metadata) - SetMetadata(ast, (uintptr_t)setter, *metadata); + SetMetadata(ast, setter, *metadata); llvm::SmallVector params; @@ -5772,7 +5772,7 @@ ClangASTContext::IsPossibleDynamicType (clang::ASTContext *ast, success = cxx_record_decl->isDynamicClass(); else { - ClangASTMetadata *metadata = GetMetadata (ast, (uintptr_t)cxx_record_decl); + ClangASTMetadata *metadata = GetMetadata (ast, cxx_record_decl); if (metadata) success = metadata->GetIsDynamicCXXType(); else @@ -6522,7 +6522,7 @@ ClangASTContext::GetCompleteDecl (clang::ASTContext *ast, } void -ClangASTContext::SetMetadataAsUserID (uintptr_t object, +ClangASTContext::SetMetadataAsUserID (const void *object, user_id_t user_id) { ClangASTMetadata meta_data; @@ -6532,7 +6532,7 @@ ClangASTContext::SetMetadataAsUserID (uintptr_t object, void ClangASTContext::SetMetadata (clang::ASTContext *ast, - uintptr_t object, + const void *object, ClangASTMetadata &metadata) { ClangExternalASTSourceCommon *external_source = @@ -6544,7 +6544,7 @@ ClangASTContext::SetMetadata (clang::ASTContext *ast, ClangASTMetadata * ClangASTContext::GetMetadata (clang::ASTContext *ast, - uintptr_t object) + const void *object) { ClangExternalASTSourceCommon *external_source = static_cast(ast->getExternalSource()); @@ -6611,7 +6611,7 @@ ClangASTContext::GetClassMethodInfoForDeclContext (clang::DeclContext *decl_ctx, } else if (clang::FunctionDecl *function_decl = llvm::dyn_cast(decl_ctx)) { - ClangASTMetadata *metadata = GetMetadata (&decl_ctx->getParentASTContext(), (uintptr_t) function_decl); + ClangASTMetadata *metadata = GetMetadata (&decl_ctx->getParentASTContext(), function_decl); if (metadata && metadata->HasObjectPtr()) { language_object_name.SetCString (metadata->GetObjectPtrName()); diff --git a/lldb/source/Symbol/ClangASTImporter.cpp b/lldb/source/Symbol/ClangASTImporter.cpp index f7527d1cb65d..57e5b216f620 100644 --- a/lldb/source/Symbol/ClangASTImporter.cpp +++ b/lldb/source/Symbol/ClangASTImporter.cpp @@ -337,9 +337,9 @@ ClangASTImporter::GetDeclMetadata (const clang::Decl *decl) DeclOrigin decl_origin = GetDeclOrigin(decl); if (decl_origin.Valid()) - return ClangASTContext::GetMetadata(decl_origin.ctx, (uintptr_t)decl_origin.decl); + return ClangASTContext::GetMetadata(decl_origin.ctx, decl_origin.decl); else - return ClangASTContext::GetMetadata(&decl->getASTContext(), (uintptr_t)decl); + return ClangASTContext::GetMetadata(&decl->getASTContext(), decl); } ClangASTImporter::DeclOrigin diff --git a/lldb/source/Symbol/ClangASTType.cpp b/lldb/source/Symbol/ClangASTType.cpp index eab580dab86e..04ba032f4c16 100644 --- a/lldb/source/Symbol/ClangASTType.cpp +++ b/lldb/source/Symbol/ClangASTType.cpp @@ -38,6 +38,7 @@ #include "lldb/Core/StreamString.h" #include "lldb/Core/UniqueCStringMap.h" #include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Symbol/ClangExternalASTSourceCommon.h" #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Process.h" @@ -1314,6 +1315,11 @@ ClangASTType::DumpTypeDescription () { StreamFile s (stdout, false); DumpTypeDescription (&s); + ClangASTMetadata *metadata = ClangASTContext::GetMetadata (m_ast, m_type); + if (metadata) + { + metadata->Dump (&s); + } } void @@ -1339,8 +1345,9 @@ ClangASTType::DumpTypeDescription (clang::ASTContext *ast_context, clang_type_t { case clang::Type::ObjCObject: case clang::Type::ObjCInterface: - if (ClangASTContext::GetCompleteType (ast_context, clang_type)) { + ClangASTContext::GetCompleteType (ast_context, clang_type); + const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast(qual_type.getTypePtr()); assert (objc_class_type); if (objc_class_type) @@ -1378,8 +1385,9 @@ ClangASTType::DumpTypeDescription (clang::ASTContext *ast_context, clang_type_t return; case clang::Type::Record: - if (ClangASTContext::GetCompleteType (ast_context, clang_type)) { + ClangASTContext::GetCompleteType (ast_context, clang_type); + const clang::RecordType *record_type = llvm::cast(qual_type.getTypePtr()); const clang::RecordDecl *record_decl = record_type->getDecl(); const clang::CXXRecordDecl *cxx_record_decl = llvm::dyn_cast(record_decl); @@ -1417,20 +1425,6 @@ ClangASTType::DumpTypeDescription (clang::ASTContext *ast_context, clang_type_t } } -void -ClangASTType::DumpTypeCode (Stream *s) -{ - DumpTypeCode(m_type, s); -} - -void -ClangASTType::DumpTypeCode (void *type, - Stream *s) -{ - clang::QualType qual_type(clang::QualType::getFromOpaquePtr(type)); - s->PutCString(qual_type.getAsString().c_str()); -} - bool ClangASTType::GetValueAsScalar ( diff --git a/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp b/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp index 0e00e4081666..697dc7eec493 100644 --- a/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp +++ b/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Symbol/ClangExternalASTSourceCommon.h" +#include "lldb/Core/Stream.h" using namespace lldb_private; @@ -28,7 +29,7 @@ ClangExternalASTSourceCommon::~ClangExternalASTSourceCommon() } ClangASTMetadata * -ClangExternalASTSourceCommon::GetMetadata (uintptr_t object) +ClangExternalASTSourceCommon::GetMetadata (const void *object) { assert (m_magic == ClangExternalASTSourceCommon_MAGIC); @@ -39,7 +40,7 @@ ClangExternalASTSourceCommon::GetMetadata (uintptr_t object) } void -ClangExternalASTSourceCommon::SetMetadata (uintptr_t object, ClangASTMetadata &metadata) +ClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata) { assert (m_magic == ClangExternalASTSourceCommon_MAGIC); @@ -50,9 +51,39 @@ ClangExternalASTSourceCommon::SetMetadata (uintptr_t object, ClangASTMetadata &m } bool -ClangExternalASTSourceCommon::HasMetadata (uintptr_t object) +ClangExternalASTSourceCommon::HasMetadata (const void *object) { assert (m_magic == ClangExternalASTSourceCommon_MAGIC); return m_metadata.find(object) != m_metadata.end(); } + +void +ClangASTMetadata::Dump (Stream *s) +{ + lldb::user_id_t uid = GetUserID (); + + if (uid != LLDB_INVALID_UID) + { + s->Printf ("uid=0x%" PRIx64, uid); + } + + uint64_t isa_ptr = GetISAPtr (); + if (isa_ptr != 0) + { + s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr); + } + + const char *obj_ptr_name = GetObjectPtrName(); + if (obj_ptr_name) + { + s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name); + } + + if (m_is_dynamic_cxx) + { + s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx); + } + s->EOL(); +} +