diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
| commit | b60736ec1405bb0a8dd40989f67ef4c93da068ab (patch) | |
| tree | 5c43fbb7c9fc45f0f87e0e6795a86267dbd12f9d /lldb/source/Plugins/Language | |
| parent | cfca06d7963fa0909f90483b42a6d7d194d01e08 (diff) | |
Diffstat (limited to 'lldb/source/Plugins/Language')
15 files changed, 76 insertions, 62 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp index 42f6bd9ffb7b..35788a6445c2 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp @@ -50,11 +50,7 @@ public: } TypeSystemClang *clang_ast_context = - llvm::dyn_cast<TypeSystemClang>(&type_system_or_err.get()); - - if (!clang_ast_context) { - return; - } + llvm::cast<TypeSystemClang>(block_pointer_type.GetTypeSystem()); std::shared_ptr<ClangASTImporter> clang_ast_importer; auto *state = target_sp->GetPersistentExpressionStateForLanguage( diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 08e43ae6b3e8..d844498fd8a3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -601,8 +601,7 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { ConstString("^std::__[[:alnum:]]+::atomic<.+>$"), stl_synth_flags, true); cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add( - RegularExpression( - llvm::StringRef("^(std::__[[:alnum:]]+::)deque<.+>(( )?&)?$")), + RegularExpression("^(std::__[[:alnum:]]+::)deque<.+>(( )?&)?$"), SyntheticChildrenSP(new ScriptedSyntheticChildren( stl_synth_flags, "lldb.formatters.cpp.libcxx.stddeque_SynthProvider"))); @@ -823,32 +822,32 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { false); cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add( - RegularExpression(llvm::StringRef("^std::vector<.+>(( )?&)?$")), + RegularExpression("^std::vector<.+>(( )?&)?$"), SyntheticChildrenSP(new ScriptedSyntheticChildren( stl_synth_flags, "lldb.formatters.cpp.gnu_libstdcpp.StdVectorSynthProvider"))); cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add( - RegularExpression(llvm::StringRef("^std::map<.+> >(( )?&)?$")), + RegularExpression("^std::map<.+> >(( )?&)?$"), SyntheticChildrenSP(new ScriptedSyntheticChildren( stl_synth_flags, "lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider"))); cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add( - RegularExpression(llvm::StringRef("^std::(__cxx11::)?list<.+>(( )?&)?$")), + RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"), SyntheticChildrenSP(new ScriptedSyntheticChildren( stl_synth_flags, "lldb.formatters.cpp.gnu_libstdcpp.StdListSynthProvider"))); stl_summary_flags.SetDontShowChildren(false); stl_summary_flags.SetSkipPointers(true); cpp_category_sp->GetRegexTypeSummariesContainer()->Add( - RegularExpression(llvm::StringRef("^std::vector<.+>(( )?&)?$")), + RegularExpression("^std::vector<.+>(( )?&)?$"), TypeSummaryImplSP( new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); cpp_category_sp->GetRegexTypeSummariesContainer()->Add( - RegularExpression(llvm::StringRef("^std::map<.+> >(( )?&)?$")), + RegularExpression("^std::map<.+> >(( )?&)?$"), TypeSummaryImplSP( new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); cpp_category_sp->GetRegexTypeSummariesContainer()->Add( - RegularExpression(llvm::StringRef("^std::(__cxx11::)?list<.+>(( )?&)?$")), + RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"), TypeSummaryImplSP( new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); @@ -1135,6 +1134,15 @@ CPlusPlusLanguage::GetHardcodedSynthetics() { return g_formatters; } +bool CPlusPlusLanguage::IsNilReference(ValueObject &valobj) { + if (!Language::LanguageIsCPlusPlus(valobj.GetObjectRuntimeLanguage()) || + !valobj.IsPointerType()) + return false; + bool canReadValue = true; + bool isZero = valobj.GetValueAsUnsigned(0, &canReadValue) == 0; + return canReadValue && isZero; +} + bool CPlusPlusLanguage::IsSourceFile(llvm::StringRef file_path) const { const auto suffixes = {".cpp", ".cxx", ".c++", ".cc", ".c", ".h", ".hh", ".hpp", ".hxx", ".h++"}; diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h index 89dea08a2c53..e2b5d2918753 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h @@ -88,6 +88,10 @@ public: HardcodedFormatters::HardcodedSyntheticFinder GetHardcodedSynthetics() override; + bool IsNilReference(ValueObject &valobj) override; + + llvm::StringRef GetNilReferenceSummaryString() override { return "nullptr"; } + bool IsSourceFile(llvm::StringRef file_path) const override; const Highlighter *GetHighlighter() const override { return &m_highlighter; } diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp index 84dd09a47d8a..2b16ebe79daf 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp @@ -692,7 +692,7 @@ bool lldb_private::formatters::LibcxxWStringSummaryProvider( // std::wstring::size() is measured in 'characters', not bytes TypeSystemClang *ast_context = - TypeSystemClang::GetScratch(*valobj.GetTargetSP()); + ScratchTypeSystemClang::GetForTarget(*valobj.GetTargetSP()); if (!ast_context) return false; diff --git a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp b/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp index aaf578c6f728..fe6eeea54e4d 100644 --- a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp +++ b/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp @@ -168,7 +168,7 @@ void ClangHighlighter::Highlight(const HighlightStyle &options, clang::SourceManager SM(diags, file_mgr); auto buf = llvm::MemoryBuffer::getMemBuffer(full_source); - FileID FID = SM.createFileID(clang::SourceManager::Unowned, buf.get()); + FileID FID = SM.createFileID(buf->getMemBufferRef()); // Let's just enable the latest ObjC and C++ which should get most tokens // right. @@ -178,7 +178,7 @@ void ClangHighlighter::Highlight(const HighlightStyle &options, Opts.CPlusPlus17 = true; Opts.LineComment = true; - Lexer lex(FID, buf.get(), SM, Opts); + Lexer lex(FID, buf->getMemBufferRef(), SM, Opts); // The lexer should keep whitespace around. lex.SetKeepWhitespaceMode(true); diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp index 648fc4adf24f..d871d3470e70 100644 --- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -72,6 +72,9 @@ bool lldb_private::formatters::NSBundleSummaryProvider( valobj.GetCompilerType().GetBasicTypeFromAST(lldb::eBasicTypeObjCID), true)); + if (!text) + return false; + StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text, summary_stream, options); @@ -117,6 +120,10 @@ bool lldb_private::formatters::NSTimeZoneSummaryProvider( uint64_t offset = ptr_size; ValueObjectSP text(valobj.GetSyntheticChildAtOffset( offset, valobj.GetCompilerType(), true)); + + if (!text) + return false; + StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text, summary_stream, options); @@ -162,6 +169,10 @@ bool lldb_private::formatters::NSNotificationSummaryProvider( uint64_t offset = ptr_size; ValueObjectSP text(valobj.GetSyntheticChildAtOffset( offset, valobj.GetCompilerType(), true)); + + if (!text) + return false; + StreamString summary_stream; bool was_nsstring_ok = NSStringSummaryProvider(*text, summary_stream, options); @@ -1024,7 +1035,7 @@ bool lldb_private::formatters::ObjCBOOLSummaryProvider( if (!real_guy_sp) return false; } - uint8_t value = (real_guy_sp->GetValueAsUnsigned(0) & 0xFF); + int8_t value = (real_guy_sp->GetValueAsSigned(0) & 0xFF); switch (value) { case 0: stream.Printf("NO"); @@ -1033,7 +1044,7 @@ bool lldb_private::formatters::ObjCBOOLSummaryProvider( stream.Printf("YES"); break; default: - stream.Printf("%u", value); + stream.Printf("%d", value); break; } return true; diff --git a/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp b/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp index ac2f45b8354f..efc80cc75557 100644 --- a/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp +++ b/lldb/source/Plugins/Language/ObjC/CoreMedia.cpp @@ -25,21 +25,12 @@ bool lldb_private::formatters::CMTimeSummaryProvider( if (!type.IsValid()) return false; - auto type_system_or_err = - valobj.GetExecutionContextRef() - .GetTargetSP() - ->GetScratchTypeSystemForLanguage(lldb::eLanguageTypeC); - if (auto err = type_system_or_err.takeError()) { - LLDB_LOG_ERROR( - lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DATAFORMATTERS), - std::move(err), "Failed to get scratch type system"); - return false; - } + TypeSystem *type_system = type.GetTypeSystem(); // fetch children by offset to compensate for potential lack of debug info - auto int64_ty = type_system_or_err->GetBuiltinTypeForEncodingAndBitSize( - eEncodingSint, 64); - auto int32_ty = type_system_or_err->GetBuiltinTypeForEncodingAndBitSize( - eEncodingSint, 32); + auto int64_ty = + type_system->GetBuiltinTypeForEncodingAndBitSize(eEncodingSint, 64); + auto int32_ty = + type_system->GetBuiltinTypeForEncodingAndBitSize(eEncodingSint, 32); auto value_sp(valobj.GetSyntheticChildAtOffset(0, int64_ty, true)); auto timescale_sp(valobj.GetSyntheticChildAtOffset(8, int32_ty, true)); diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 8d648d8a0861..b0398dd19c02 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -96,7 +96,7 @@ private: D32 *m_data_32; D64 *m_data_64; }; - + namespace Foundation1010 { namespace { struct DataDescriptor_32 { @@ -107,7 +107,7 @@ namespace Foundation1010 { uint32_t _priv2; uint32_t _data; }; - + struct DataDescriptor_64 { uint64_t _used; uint64_t _offset; @@ -117,11 +117,11 @@ namespace Foundation1010 { uint64_t _data; }; } - + using NSArrayMSyntheticFrontEnd = GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>; } - + namespace Foundation1428 { namespace { struct DataDescriptor_32 { @@ -130,7 +130,7 @@ namespace Foundation1428 { uint32_t _size; uint32_t _data; }; - + struct DataDescriptor_64 { uint64_t _used; uint64_t _offset; @@ -138,11 +138,11 @@ namespace Foundation1428 { uint64_t _data; }; } - + using NSArrayMSyntheticFrontEnd = GenericNSArrayMSyntheticFrontEnd<DataDescriptor_32, DataDescriptor_64>; } - + namespace Foundation1437 { template <typename PtrType> struct DataDescriptor { @@ -154,11 +154,11 @@ namespace Foundation1437 { uint32_t _muts; uint32_t _used; }; - + using NSArrayMSyntheticFrontEnd = GenericNSArrayMSyntheticFrontEnd< DataDescriptor<uint32_t>, DataDescriptor<uint64_t>>; - + template <typename DD> uint64_t __NSArrayMSize_Impl(lldb_private::Process &process, @@ -173,7 +173,7 @@ namespace Foundation1437 { } return descriptor._used; } - + uint64_t __NSArrayMSize(lldb_private::Process &process, lldb::addr_t valobj_addr, Status &error) { @@ -227,23 +227,23 @@ public: private: ExecutionContextRef m_exe_ctx_ref; uint8_t m_ptr_size; - + D32 *m_data_32; D64 *m_data_64; CompilerType m_id_type; }; - + namespace Foundation1300 { struct IDD32 { uint32_t used; uint32_t list; }; - + struct IDD64 { uint64_t used; uint64_t list; }; - + using NSArrayISyntheticFrontEnd = GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, true>; } @@ -258,18 +258,18 @@ namespace Foundation1436 { uint32_t used; uint32_t list; // in Inline cases, this is the first element }; - + struct IDD64 { uint64_t used; uint64_t list; // in Inline cases, this is the first element }; - + using NSArrayI_TransferSyntheticFrontEnd = GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, false>; using NSArrayISyntheticFrontEnd = GenericNSArrayISyntheticFrontEnd<IDD32, IDD64, true>; - + using NSFrozenArrayMSyntheticFrontEnd = Foundation1437::NSArrayMSyntheticFrontEnd; @@ -441,7 +441,7 @@ lldb_private::formatters::NSArrayMSyntheticFrontEndBase::NSArrayMSyntheticFrontE : SyntheticChildrenFrontEnd(*valobj_sp), m_exe_ctx_ref(), m_ptr_size(8), m_id_type() { if (valobj_sp) { - auto *clang_ast_context = TypeSystemClang::GetScratch( + auto *clang_ast_context = ScratchTypeSystemClang::GetForTarget( *valobj_sp->GetExecutionContextRef().GetTargetSP()); if (clang_ast_context) m_id_type = CompilerType( @@ -589,7 +589,7 @@ lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>:: if (valobj_sp) { CompilerType type = valobj_sp->GetCompilerType(); if (type) { - auto *clang_ast_context = TypeSystemClang::GetScratch( + auto *clang_ast_context = ScratchTypeSystemClang::GetForTarget( *valobj_sp->GetExecutionContextRef().GetTargetSP()); if (clang_ast_context) m_id_type = clang_ast_context->GetType( @@ -758,7 +758,7 @@ lldb_private::formatters::NSArray1SyntheticFrontEnd::GetChildAtIndex( if (idx == 0) { auto *clang_ast_context = - TypeSystemClang::GetScratch(*m_backend.GetTargetSP()); + ScratchTypeSystemClang::GetForTarget(*m_backend.GetTargetSP()); if (clang_ast_context) { CompilerType id_type( clang_ast_context->GetBasicType(lldb::eBasicTypeObjCID)); @@ -820,11 +820,9 @@ lldb_private::formatters::NSArraySyntheticFrontEndCreator( return (new Foundation1436::NSArrayISyntheticFrontEnd(valobj_sp)); if (runtime->GetFoundationVersion() >= 1430) return (new Foundation1430::NSArrayISyntheticFrontEnd(valobj_sp)); - else - return (new Foundation1300::NSArrayISyntheticFrontEnd(valobj_sp)); + return (new Foundation1300::NSArrayISyntheticFrontEnd(valobj_sp)); } else if (class_name == g_NSArrayI_Transfer) { return (new Foundation1436::NSArrayI_TransferSyntheticFrontEnd(valobj_sp)); - } else if (class_name == g_NSArray0) { } else if (class_name == g_NSFrozenArrayM) { return (new Foundation1436::NSFrozenArrayMSyntheticFrontEnd(valobj_sp)); } else if (class_name == g_NSArray0) { diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index 3dc07678f92f..afb9c6951f55 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -66,7 +66,8 @@ NSDictionary_Additionals::GetAdditionalSynthetics() { static CompilerType GetLLDBNSPairType(TargetSP target_sp) { CompilerType compiler_type; - TypeSystemClang *target_ast_context = TypeSystemClang::GetScratch(*target_sp); + TypeSystemClang *target_ast_context = + ScratchTypeSystemClang::GetForTarget(*target_sp); if (target_ast_context) { ConstString g___lldb_autogen_nspair("__lldb_autogen_nspair"); @@ -388,7 +389,7 @@ bool lldb_private::formatters::NSDictionarySummaryProvider( return false; ObjCLanguageRuntime::ClassDescriptorSP descriptor( - runtime->GetClassDescriptor(valobj)); + runtime->GetNonKVOClassDescriptor(valobj)); if (!descriptor || !descriptor->IsValid()) return false; diff --git a/lldb/source/Plugins/Language/ObjC/NSError.cpp b/lldb/source/Plugins/Language/ObjC/NSError.cpp index aa1103cb342c..4ffa072f9f53 100644 --- a/lldb/source/Plugins/Language/ObjC/NSError.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSError.cpp @@ -87,7 +87,7 @@ bool lldb_private::formatters::NSError_SummaryProvider( ValueObjectSP domain_str_sp = ValueObject::CreateValueObjectFromData( "domain_str", isw.GetAsData(process_sp->GetByteOrder()), valobj.GetExecutionContextRef(), - TypeSystemClang::GetScratch(process_sp->GetTarget()) + ScratchTypeSystemClang::GetForTarget(process_sp->GetTarget()) ->GetBasicType(lldb::eBasicTypeVoid) .GetPointerType()); @@ -156,7 +156,7 @@ public: m_child_sp = CreateValueObjectFromData( "_userInfo", isw.GetAsData(process_sp->GetByteOrder()), m_backend.GetExecutionContextRef(), - TypeSystemClang::GetScratch(process_sp->GetTarget()) + ScratchTypeSystemClang::GetForTarget(process_sp->GetTarget()) ->GetBasicType(lldb::eBasicTypeObjCID)); return false; } diff --git a/lldb/source/Plugins/Language/ObjC/NSException.cpp b/lldb/source/Plugins/Language/ObjC/NSException.cpp index c6bae5e1c008..7360abb8fdd2 100644 --- a/lldb/source/Plugins/Language/ObjC/NSException.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSException.cpp @@ -69,7 +69,8 @@ static bool ExtractFields(ValueObject &valobj, ValueObjectSP *name_sp, InferiorSizedWord userinfo_isw(userinfo, *process_sp); InferiorSizedWord reserved_isw(reserved, *process_sp); - auto *clang_ast_context = TypeSystemClang::GetScratch(process_sp->GetTarget()); + auto *clang_ast_context = + ScratchTypeSystemClang::GetForTarget(process_sp->GetTarget()); if (!clang_ast_context) return false; diff --git a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp index d962f39611b6..a15b0f64954a 100644 --- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -53,7 +53,7 @@ public: if (!type_system) return false; - TypeSystemClang *ast = TypeSystemClang::GetScratch( + TypeSystemClang *ast = ScratchTypeSystemClang::GetForTarget( *m_backend.GetExecutionContextRef().GetTargetSP()); if (!ast) return false; diff --git a/lldb/source/Plugins/Language/ObjC/NSString.cpp b/lldb/source/Plugins/Language/ObjC/NSString.cpp index b9d0d73cbc2e..85922992eb2b 100644 --- a/lldb/source/Plugins/Language/ObjC/NSString.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSString.cpp @@ -34,7 +34,7 @@ NSString_Additionals::GetAdditionalSummaries() { static CompilerType GetNSPathStore2Type(Target &target) { static ConstString g_type_name("__lldb_autogen_nspathstore2"); - TypeSystemClang *ast_ctx = TypeSystemClang::GetScratch(target); + TypeSystemClang *ast_ctx = ScratchTypeSystemClang::GetForTarget(target); if (!ast_ctx) return CompilerType(); diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h index bed62a5c447a..02c15e86046b 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h @@ -119,6 +119,8 @@ public: bool IsNilReference(ValueObject &valobj) override; + llvm::StringRef GetNilReferenceSummaryString() override { return "nil"; } + bool IsSourceFile(llvm::StringRef file_path) const override; const Highlighter *GetHighlighter() const override { return &m_highlighter; } diff --git a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h index 4b3d23653347..233fd5c00a7a 100644 --- a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h +++ b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h @@ -27,6 +27,8 @@ public: return lldb::eLanguageTypeObjC_plus_plus; } + llvm::StringRef GetNilReferenceSummaryString() override { return "nil"; } + bool IsSourceFile(llvm::StringRef file_path) const override; const Highlighter *GetHighlighter() const override { return &m_highlighter; } |
