diff options
Diffstat (limited to 'lldb/source/DataFormatters')
-rw-r--r-- | lldb/source/DataFormatters/CXXFormatterFunctions.cpp | 41 | ||||
-rw-r--r-- | lldb/source/DataFormatters/Cocoa.cpp | 11 | ||||
-rw-r--r-- | lldb/source/DataFormatters/LibCxx.cpp | 9 | ||||
-rw-r--r-- | lldb/source/DataFormatters/LibCxxList.cpp | 14 | ||||
-rw-r--r-- | lldb/source/DataFormatters/LibCxxMap.cpp | 6 | ||||
-rw-r--r-- | lldb/source/DataFormatters/LibStdcpp.cpp | 36 | ||||
-rw-r--r-- | lldb/source/DataFormatters/NSArray.cpp | 32 | ||||
-rw-r--r-- | lldb/source/DataFormatters/NSDictionary.cpp | 78 |
8 files changed, 112 insertions, 115 deletions
diff --git a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp index 3432700cc72..fba92170d83 100644 --- a/lldb/source/DataFormatters/CXXFormatterFunctions.cpp +++ b/lldb/source/DataFormatters/CXXFormatterFunctions.cpp @@ -518,12 +518,13 @@ lldb_private::formatters::WCharStringSummaryProvider (ValueObject& valobj, Strea if (data_addr == 0 || data_addr == LLDB_INVALID_ADDRESS) return false; - clang::ASTContext* ast = valobj.GetClangAST(); - + clang::ASTContext* ast = valobj.GetClangType().GetASTContext(); + if (!ast) return false; - uint32_t wchar_size = ClangASTType::GetClangTypeBitWidth(ast, ClangASTType::GetBasicType(ast, lldb::eBasicTypeWChar).GetOpaqueQualType()); + ClangASTType wchar_clang_type = ClangASTContext::GetBasicType(ast, lldb::eBasicTypeWChar); + const uint32_t wchar_size = wchar_clang_type.GetBitSize(); switch (wchar_size) { @@ -605,15 +606,15 @@ lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& str DataExtractor data; valobj.GetData(data); - clang::ASTContext* ast = valobj.GetClangAST(); + clang::ASTContext* ast = valobj.GetClangType().GetASTContext(); if (!ast) return false; + ClangASTType wchar_clang_type = ClangASTContext::GetBasicType(ast, lldb::eBasicTypeWChar); + const uint32_t wchar_size = wchar_clang_type.GetBitSize(); std::string value; - uint32_t wchar_size = ClangASTType::GetClangTypeBitWidth(ast, ClangASTType::GetBasicType(ast, lldb::eBasicTypeWChar).GetOpaqueQualType()); - switch (wchar_size) { case 8: @@ -1133,13 +1134,13 @@ lldb_private::formatters::NSAttributedStringSummaryProvider (ValueObject& valobj if (!target_sp) return false; uint32_t addr_size = target_sp->GetArchitecture().GetAddressByteSize(); - uint64_t pointee = valobj.GetValueAsUnsigned(0); - if (!pointee) + uint64_t pointer_value = valobj.GetValueAsUnsigned(0); + if (!pointer_value) return false; - pointee += addr_size; - ClangASTType type(valobj.GetClangAST(),valobj.GetClangType()); + pointer_value += addr_size; + ClangASTType type(valobj.GetClangType()); ExecutionContext exe_ctx(target_sp,false); - ValueObjectSP child_ptr_sp(valobj.CreateValueObjectFromAddress("string_ptr", pointee, exe_ctx, type)); + ValueObjectSP child_ptr_sp(valobj.CreateValueObjectFromAddress("string_ptr", pointer_value, exe_ctx, type)); if (!child_ptr_sp) return false; DataExtractor data; @@ -1167,20 +1168,18 @@ lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider (ValueObject bool lldb_private::formatters::ObjCBOOLSummaryProvider (ValueObject& valobj, Stream& stream) { - const uint32_t type_info = ClangASTContext::GetTypeInfo(valobj.GetClangType(), - valobj.GetClangAST(), - NULL); + const uint32_t type_info = valobj.GetClangType().GetTypeInfo(); ValueObjectSP real_guy_sp = valobj.GetSP(); - if (type_info & ClangASTContext::eTypeIsPointer) + if (type_info & ClangASTType::eTypeIsPointer) { Error err; real_guy_sp = valobj.Dereference(err); if (err.Fail() || !real_guy_sp) return false; } - else if (type_info & ClangASTContext::eTypeIsReference) + else if (type_info & ClangASTType::eTypeIsReference) { real_guy_sp = valobj.GetChildAtIndex(0, true); if (!real_guy_sp) @@ -1202,12 +1201,10 @@ lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& s { lldb::ValueObjectSP valobj_sp; - if (!valobj.GetClangAST()) - return false; - void* char_opaque_type = valobj.GetClangAST()->CharTy.getAsOpaquePtr(); - if (!char_opaque_type) + ClangASTType charstar (valobj.GetClangType().GetBasicTypeFromAST(eBasicTypeChar).GetPointerType()); + + if (!charstar) return false; - ClangASTType charstar(valobj.GetClangAST(),ClangASTType::GetPointerType(valobj.GetClangAST(), char_opaque_type)); ExecutionContext exe_ctx(valobj.GetExecutionContextRef()); @@ -1303,7 +1300,7 @@ lldb_private::formatters::VectorIteratorSyntheticFrontEnd::Update() return false; Error err; m_exe_ctx_ref = valobj_sp->GetExecutionContextRef(); - m_item_sp = ValueObject::CreateValueObjectFromAddress("item", item_ptr->GetValueAsUnsigned(0), m_exe_ctx_ref, ClangASTType(item_ptr->GetClangAST(),ClangASTType::GetPointeeType(item_ptr->GetClangType()))); + m_item_sp = ValueObject::CreateValueObjectFromAddress("item", item_ptr->GetValueAsUnsigned(0), m_exe_ctx_ref, item_ptr->GetClangType().GetPointeeType()); if (err.Fail()) m_item_sp.reset(); return false; diff --git a/lldb/source/DataFormatters/Cocoa.cpp b/lldb/source/DataFormatters/Cocoa.cpp index 2a1e9099eba..555954db0bb 100644 --- a/lldb/source/DataFormatters/Cocoa.cpp +++ b/lldb/source/DataFormatters/Cocoa.cpp @@ -57,8 +57,7 @@ lldb_private::formatters::NSBundleSummaryProvider (ValueObject& valobj, Stream& if (!strcmp(class_name,"NSBundle")) { uint64_t offset = 5 * ptr_size; - ClangASTType type(valobj.GetClangAST(),ClangASTContext::GetBuiltInType_objc_id(valobj.GetClangAST())); - ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, type, true)); + ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, valobj.GetClangType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID), true)); StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text.get(), summary_stream); @@ -105,8 +104,7 @@ lldb_private::formatters::NSTimeZoneSummaryProvider (ValueObject& valobj, Stream if (!strcmp(class_name,"__NSTimeZone")) { uint64_t offset = ptr_size; - ClangASTType type(valobj.GetClangAST(),valobj.GetClangType()); - ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, type, true)); + ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, valobj.GetClangType(), true)); StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text.get(), summary_stream); if (was_nsstring_ok && summary_stream.GetSize() > 0) @@ -150,8 +148,7 @@ lldb_private::formatters::NSNotificationSummaryProvider (ValueObject& valobj, St if (!strcmp(class_name,"NSConcreteNotification")) { uint64_t offset = ptr_size; - ClangASTType type(valobj.GetClangAST(),valobj.GetClangType()); - ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, type, true)); + ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset, valobj.GetClangType(), true)); StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text.get(), summary_stream); if (was_nsstring_ok && summary_stream.GetSize() > 0) @@ -450,7 +447,7 @@ lldb_private::formatters::NSURLSummaryProvider (ValueObject& valobj, Stream& str { uint64_t offset_text = ptr_size + ptr_size + 8; // ISA + pointer + 8 bytes of data (even on 32bit) uint64_t offset_base = offset_text + ptr_size; - ClangASTType type(valobj.GetClangAST(),valobj.GetClangType()); + ClangASTType type(valobj.GetClangType()); ValueObjectSP text(valobj.GetSyntheticChildAtOffset(offset_text, type, true)); ValueObjectSP base(valobj.GetSyntheticChildAtOffset(offset_base, type, true)); if (!text) diff --git a/lldb/source/DataFormatters/LibCxx.cpp b/lldb/source/DataFormatters/LibCxx.cpp index f7c2589dfa0..cdc57f6bd93 100644 --- a/lldb/source/DataFormatters/LibCxx.cpp +++ b/lldb/source/DataFormatters/LibCxx.cpp @@ -330,7 +330,7 @@ lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::GetChildAtIndex (siz return lldb::ValueObjectSP(); uint64_t count = 1 + shared_owners_sp->GetValueAsUnsigned(0); DataExtractor data(&count, 8, m_byte_order, m_ptr_size); - m_count_sp = ValueObject::CreateValueObjectFromData("count", data, valobj_sp->GetExecutionContextRef(), ClangASTType(shared_owners_sp->GetClangAST(), shared_owners_sp->GetClangType())); + m_count_sp = ValueObject::CreateValueObjectFromData("count", data, valobj_sp->GetExecutionContextRef(), shared_owners_sp->GetClangType()); } return m_count_sp; } @@ -343,7 +343,7 @@ lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::GetChildAtIndex (siz return lldb::ValueObjectSP(); uint64_t count = 1 + shared_weak_owners_sp->GetValueAsUnsigned(0); DataExtractor data(&count, 8, m_byte_order, m_ptr_size); - m_weak_count_sp = ValueObject::CreateValueObjectFromData("count", data, valobj_sp->GetExecutionContextRef(), ClangASTType(shared_weak_owners_sp->GetClangAST(), shared_weak_owners_sp->GetClangType())); + m_weak_count_sp = ValueObject::CreateValueObjectFromData("count", data, valobj_sp->GetExecutionContextRef(), shared_weak_owners_sp->GetClangType()); } return m_weak_count_sp; } @@ -464,9 +464,8 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::Update() data_type_finder_sp = data_type_finder_sp->GetChildMemberWithName(ConstString("__first_"),true); if (!data_type_finder_sp) return false; - m_element_type = ClangASTType(data_type_finder_sp->GetClangAST(),data_type_finder_sp->GetClangType()); - m_element_type.SetClangType(m_element_type.GetASTContext(), m_element_type.GetPointeeType()); - m_element_size = m_element_type.GetTypeByteSize(); + m_element_type = data_type_finder_sp->GetClangType().GetPointeeType(); + m_element_size = m_element_type.GetByteSize(); if (m_element_size > 0) { diff --git a/lldb/source/DataFormatters/LibCxxList.cpp b/lldb/source/DataFormatters/LibCxxList.cpp index d2669ea4d5d..de2ca1b2045 100644 --- a/lldb/source/DataFormatters/LibCxxList.cpp +++ b/lldb/source/DataFormatters/LibCxxList.cpp @@ -272,16 +272,14 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::Update() ValueObjectSP impl_sp(m_backend.GetChildMemberWithName(ConstString("__end_"),true)); if (!impl_sp) return false; - auto list_type = m_backend.GetClangType(); - if (ClangASTContext::IsReferenceType(list_type)) - { - clang::QualType qt = clang::QualType::getFromOpaquePtr(list_type); - list_type = qt.getNonReferenceType().getAsOpaquePtr(); - } - if (ClangASTContext::GetNumTemplateArguments(m_backend.GetClangAST(), list_type) == 0) + ClangASTType list_type = m_backend.GetClangType(); + if (list_type.IsReferenceType()) + list_type = list_type.GetNonReferenceType(); + + if (list_type.GetNumTemplateArguments() == 0) return false; lldb::TemplateArgumentKind kind; - m_element_type = ClangASTType(m_backend.GetClangAST(), ClangASTContext::GetTemplateArgument(m_backend.GetClangAST(), list_type, 0, kind)); + m_element_type = list_type.GetTemplateArgument(0, kind); m_head = impl_sp->GetChildMemberWithName(ConstString("__next_"), true).get(); m_tail = impl_sp->GetChildMemberWithName(ConstString("__prev_"), true).get(); return false; diff --git a/lldb/source/DataFormatters/LibCxxMap.cpp b/lldb/source/DataFormatters/LibCxxMap.cpp index 0b0b8f78fb7..5daa40f15f3 100644 --- a/lldb/source/DataFormatters/LibCxxMap.cpp +++ b/lldb/source/DataFormatters/LibCxxMap.cpp @@ -281,7 +281,7 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetDataType() deref = deref->GetChildMemberWithName(ConstString("__value_"), true); if (!deref) return false; - m_element_type.SetClangType(deref->GetClangAST(), deref->GetClangType()); + m_element_type = deref->GetClangType(); return true; } @@ -292,9 +292,9 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset (const l return; if (!node) return; - ClangASTType node_type(node->GetClangAST(),node->GetClangType()); + ClangASTType node_type(node->GetClangType()); uint64_t bit_offset; - if (ClangASTContext::GetIndexOfFieldWithName(node->GetClangAST(),node->GetClangType(),"__value_",NULL,&bit_offset) == UINT32_MAX) + if (node_type.GetIndexOfFieldWithName("__value_", NULL, &bit_offset) == UINT32_MAX) return; m_skip_size = bit_offset / 8u; } diff --git a/lldb/source/DataFormatters/LibStdcpp.cpp b/lldb/source/DataFormatters/LibStdcpp.cpp index a013051fa64..e0f23cc35e3 100644 --- a/lldb/source/DataFormatters/LibStdcpp.cpp +++ b/lldb/source/DataFormatters/LibStdcpp.cpp @@ -206,12 +206,12 @@ lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEndCreator (CXXSynthe */ lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEnd::LibstdcppMapIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : -SyntheticChildrenFrontEnd(*valobj_sp.get()), -m_exe_ctx_ref(), -m_pair_address(0), -m_pair_type(), -m_options(), -m_pair_sp() + SyntheticChildrenFrontEnd(*valobj_sp.get()), + m_exe_ctx_ref(), + m_pair_address(0), + m_pair_type(), + m_options(), + m_pair_sp() { if (valobj_sp) Update(); @@ -249,14 +249,14 @@ lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEnd::Update() m_pair_address += (is_64bit ? 32 : 16); - ClangASTType my_type(valobj_sp->GetClangAST(),valobj_sp->GetClangType()); - if (ClangASTContext::GetNumTemplateArguments(valobj_sp->GetClangAST(),valobj_sp->GetClangType()) >= 1) + ClangASTType my_type(valobj_sp->GetClangType()); + if (my_type.GetNumTemplateArguments() >= 1) { TemplateArgumentKind kind; - clang_type_t pair_type = ClangASTContext::GetTemplateArgument(valobj_sp->GetClangAST(),valobj_sp->GetClangType(), 0, kind); + ClangASTType pair_type = my_type.GetTemplateArgument(0, kind); if (kind != eTemplateArgumentKindType && kind != eTemplateArgumentKindTemplate && kind != eTemplateArgumentKindTemplateExpansion) return false; - m_pair_type = ClangASTType(valobj_sp->GetClangAST(),pair_type); + m_pair_type = pair_type; } else return false; @@ -273,15 +273,13 @@ lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEnd::CalculateNumChi lldb::ValueObjectSP lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEnd::GetChildAtIndex (size_t idx) { - if (m_pair_address == 0) - return lldb::ValueObjectSP(); - if (m_pair_type.GetASTContext() == NULL || - m_pair_type.GetOpaqueQualType() == NULL) - return lldb::ValueObjectSP(); - if (!m_pair_sp) - m_pair_sp = ValueObject::CreateValueObjectFromAddress("pair", m_pair_address, m_exe_ctx_ref, m_pair_type); - if (m_pair_sp) - return m_pair_sp->GetChildAtIndex(idx, true); + if (m_pair_address != 0 && m_pair_type) + { + if (!m_pair_sp) + m_pair_sp = ValueObject::CreateValueObjectFromAddress("pair", m_pair_address, m_exe_ctx_ref, m_pair_type); + if (m_pair_sp) + return m_pair_sp->GetChildAtIndex(idx, true); + } return lldb::ValueObjectSP(); } diff --git a/lldb/source/DataFormatters/NSArray.cpp b/lldb/source/DataFormatters/NSArray.cpp index cef087d1e9e..d8ee9bfa8a4 100644 --- a/lldb/source/DataFormatters/NSArray.cpp +++ b/lldb/source/DataFormatters/NSArray.cpp @@ -90,14 +90,18 @@ lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& s } lldb_private::formatters::NSArrayMSyntheticFrontEnd::NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : -SyntheticChildrenFrontEnd(*valobj_sp.get()), -m_exe_ctx_ref(), -m_ptr_size(8), -m_data_32(NULL), -m_data_64(NULL) + SyntheticChildrenFrontEnd(*valobj_sp.get()), + m_exe_ctx_ref(), + m_ptr_size(8), + m_data_32(NULL), + m_data_64(NULL) { if (valobj_sp) - m_id_type = ClangASTType(valobj_sp->GetClangAST(),valobj_sp->GetClangAST()->ObjCBuiltinIdTy.getAsOpaquePtr()); + { + clang::ASTContext *ast = valobj_sp->GetClangType().GetASTContext(); + if (ast) + m_id_type = ClangASTType(ast, ast->ObjCBuiltinIdTy); + } } size_t @@ -195,14 +199,18 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::~NSArrayMSyntheticFrontEnd } lldb_private::formatters::NSArrayISyntheticFrontEnd::NSArrayISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : -SyntheticChildrenFrontEnd(*valobj_sp.get()), -m_exe_ctx_ref(), -m_ptr_size(8), -m_items(0), -m_data_ptr(0) + SyntheticChildrenFrontEnd (*valobj_sp.get()), + m_exe_ctx_ref (), + m_ptr_size (8), + m_items (0), + m_data_ptr (0) { if (valobj_sp) - m_id_type = ClangASTType(valobj_sp->GetClangAST(),valobj_sp->GetClangAST()->ObjCBuiltinIdTy.getAsOpaquePtr()); + { + clang::ASTContext *ast = valobj_sp->GetClangType().GetASTContext(); + if (ast) + m_id_type = ClangASTType(ast, ast->ObjCBuiltinIdTy); + } } lldb_private::formatters::NSArrayISyntheticFrontEnd::~NSArrayISyntheticFrontEnd () diff --git a/lldb/source/DataFormatters/NSDictionary.cpp b/lldb/source/DataFormatters/NSDictionary.cpp index c9fef4288c0..05a5dda39e5 100644 --- a/lldb/source/DataFormatters/NSDictionary.cpp +++ b/lldb/source/DataFormatters/NSDictionary.cpp @@ -30,52 +30,52 @@ using namespace lldb_private::formatters; static ClangASTType GetLLDBNSPairType (TargetSP target_sp) { - ClangASTType clang_type = ClangASTType(); + ClangASTType clang_type; ClangASTContext *target_ast_context = target_sp->GetScratchClangASTContext(); - if (!target_ast_context) - return clang_type; - - const char* type_name = "__lldb_autogen_nspair"; - - clang::IdentifierInfo &myIdent = target_ast_context->getASTContext()->Idents.get(type_name); - clang::DeclarationName myName = target_ast_context->getASTContext()->DeclarationNames.getIdentifier(&myIdent); - - clang::DeclContext::lookup_const_result result = target_ast_context->getASTContext()->getTranslationUnitDecl()->lookup(myName); - - clang_type_t opaque_type = NULL; - - for (clang::NamedDecl *named_decl : result) + if (target_ast_context) { - if (const clang::CXXRecordDecl *record_decl = llvm::dyn_cast<clang::CXXRecordDecl>(named_decl)) - { - opaque_type = clang::QualType(record_decl->getTypeForDecl(), 0).getAsOpaquePtr(); - break; - } - else + clang::ASTContext *ast = target_ast_context->getASTContext(); + + if (ast) { - // somebody else (the user?) has defined a type with the magic name already - fail!!! - return clang_type; + const char* type_name = "__lldb_autogen_nspair"; + + clang::IdentifierInfo &myIdent = ast->Idents.get(type_name); + clang::DeclarationName myName = ast->DeclarationNames.getIdentifier(&myIdent); + + clang::DeclContext::lookup_const_result result = ast->getTranslationUnitDecl()->lookup(myName); + + for (clang::NamedDecl *named_decl : result) + { + if (const clang::CXXRecordDecl *record_decl = llvm::dyn_cast<clang::CXXRecordDecl>(named_decl)) + { + clang_type.SetClangType(ast, clang::QualType(record_decl->getTypeForDecl(), 0)); + break; + } + else + { + // somebody else (the user?) has defined a type with the magic name already - fail!!! + return clang_type; + } + } + + if (!clang_type) + { + clang_type = target_ast_context->CreateRecordType(NULL, lldb::eAccessPublic, type_name, clang::TTK_Struct, lldb::eLanguageTypeC); + + if (clang_type) + { + clang_type.StartTagDeclarationDefinition(); + ClangASTType id_clang_type = target_ast_context->GetBasicType (eBasicTypeObjCID); + clang_type.AddFieldToRecordType("key", id_clang_type, lldb::eAccessPublic, 0); + clang_type.AddFieldToRecordType("value", id_clang_type, lldb::eAccessPublic, 0); + clang_type.CompleteTagDeclarationDefinition(); + } + } } } - - if (!opaque_type) - { - opaque_type = target_ast_context->CreateRecordType(NULL, lldb::eAccessPublic, type_name, clang::TTK_Struct, lldb::eLanguageTypeC); - - if (!opaque_type) - return clang_type; - - target_ast_context->StartTagDeclarationDefinition(opaque_type); - - target_ast_context->AddFieldToRecordType(opaque_type, "key", target_ast_context->GetBuiltInType_objc_id(), lldb::eAccessPublic, 0); - target_ast_context->AddFieldToRecordType(opaque_type, "value", target_ast_context->GetBuiltInType_objc_id(), lldb::eAccessPublic, 0); - - target_ast_context->CompleteTagDeclarationDefinition(opaque_type); - } - - clang_type.SetClangType(target_ast_context->getASTContext(), opaque_type); return clang_type; } |