diff options
Diffstat (limited to 'source/Plugins/Language')
51 files changed, 549 insertions, 669 deletions
diff --git a/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/source/Plugins/Language/CPlusPlus/BlockPointer.cpp index 40200503a8a7..87b5b5947f35 100644 --- a/source/Plugins/Language/CPlusPlus/BlockPointer.cpp +++ b/source/Plugins/Language/CPlusPlus/BlockPointer.cpp @@ -1,9 +1,8 @@ //===-- BlockPointer.cpp ----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -150,7 +149,7 @@ public: // maybe return false if the block pointer is, say, null bool MightHaveChildren() override { return true; } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { if (!m_block_struct_type.IsValid()) return UINT32_MAX; diff --git a/source/Plugins/Language/CPlusPlus/BlockPointer.h b/source/Plugins/Language/CPlusPlus/BlockPointer.h index e5008a8f3676..624c17a6a6af 100644 --- a/source/Plugins/Language/CPlusPlus/BlockPointer.h +++ b/source/Plugins/Language/CPlusPlus/BlockPointer.h @@ -1,9 +1,8 @@ //===-- BlockPointer.h ------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 982b286d0f05..44b9e5e24ccd 100644 --- a/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -1,9 +1,8 @@ //===-- CPlusPlusLanguage.cpp -----------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -57,9 +56,7 @@ lldb_private::ConstString CPlusPlusLanguage::GetPluginNameStatic() { return g_name; } -//------------------------------------------------------------------ // PluginInterface protocol -//------------------------------------------------------------------ lldb_private::ConstString CPlusPlusLanguage::GetPluginName() { return GetPluginNameStatic(); @@ -67,9 +64,7 @@ lldb_private::ConstString CPlusPlusLanguage::GetPluginName() { uint32_t CPlusPlusLanguage::GetPluginVersion() { return 1; } -//------------------------------------------------------------------ // Static Functions -//------------------------------------------------------------------ Language *CPlusPlusLanguage::CreateInstance(lldb::LanguageType language) { if (Language::LanguageIsCPlusPlus(language)) @@ -419,61 +414,49 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { .SetShowMembersOneLiner(false) .SetHideItemNames(false); -#ifndef LLDB_DISABLE_PYTHON - lldb::TypeSummaryImplSP std_string_summary_sp(new CXXFunctionSummaryFormat( - stl_summary_flags, - lldb_private::formatters::LibcxxStringSummaryProviderASCII, - "std::string summary provider")); - lldb::TypeSummaryImplSP std_stringu16_summary_sp(new CXXFunctionSummaryFormat( - stl_summary_flags, - lldb_private::formatters::LibcxxStringSummaryProviderUTF16, - "std::u16string summary provider")); - lldb::TypeSummaryImplSP std_stringu32_summary_sp(new CXXFunctionSummaryFormat( - stl_summary_flags, - lldb_private::formatters::LibcxxStringSummaryProviderUTF32, - "std::u32string summary provider")); - lldb::TypeSummaryImplSP std_wstring_summary_sp(new CXXFunctionSummaryFormat( - stl_summary_flags, lldb_private::formatters::LibcxxWStringSummaryProvider, - "std::wstring summary provider")); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxStringSummaryProviderASCII, + "std::string summary provider", + ConstString("^std::__[[:alnum:]]+::string$"), stl_summary_flags, + true); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxStringSummaryProviderASCII, + "std::string summary provider", + ConstString("^std::__[[:alnum:]]+::basic_string<char, " + "std::__[[:alnum:]]+::char_traits<char>, " + "std::__[[:alnum:]]+::allocator<char> >$"), + stl_summary_flags, true); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__1::string"), std_string_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__ndk1::string"), std_string_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__1::basic_string<char, std::__1::char_traits<char>, " - "std::__1::allocator<char> >"), - std_string_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString( - "std::__1::basic_string<char16_t, std::__1::char_traits<char16_t>, " - "std::__1::allocator<char16_t> >"), - std_stringu16_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString( - "std::__1::basic_string<char32_t, std::__1::char_traits<char32_t>, " - "std::__1::allocator<char32_t> >"), - std_stringu32_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__ndk1::basic_string<char, " - "std::__ndk1::char_traits<char>, " - "std::__ndk1::allocator<char> >"), - std_string_summary_sp); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxStringSummaryProviderUTF16, + "std::u16string summary provider", + ConstString( + "^std::__[[:alnum:]]+::basic_string<char16_t, " + "std::__[[:alnum:]]+::char_traits<char16_t>, " + "std::__[[:alnum:]]+::allocator<char16_t> >$"), + stl_summary_flags, true); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__1::wstring"), std_wstring_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__ndk1::wstring"), std_wstring_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__1::basic_string<wchar_t, " - "std::__1::char_traits<wchar_t>, " - "std::__1::allocator<wchar_t> >"), - std_wstring_summary_sp); - cpp_category_sp->GetTypeSummariesContainer()->Add( - ConstString("std::__ndk1::basic_string<wchar_t, " - "std::__ndk1::char_traits<wchar_t>, " - "std::__ndk1::allocator<wchar_t> >"), - std_wstring_summary_sp); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxStringSummaryProviderUTF32, + "std::u32string summary provider", + ConstString( + "^std::__[[:alnum:]]+::basic_string<char32_t, " + "std::__[[:alnum:]]+::char_traits<char32_t>, " + "std::__[[:alnum:]]+::allocator<char32_t> >$"), + stl_summary_flags, true); + + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxWStringSummaryProvider, + "std::wstring summary provider", + ConstString("^std::__[[:alnum:]]+::wstring$"), + stl_summary_flags, true); + AddCXXSummary(cpp_category_sp, + lldb_private::formatters::LibcxxWStringSummaryProvider, + "std::wstring summary provider", + ConstString("^std::__[[:alnum:]]+::basic_string<wchar_t, " + "std::__[[:alnum:]]+::char_traits<wchar_t>, " + "std::__[[:alnum:]]+::allocator<wchar_t> >$"), + stl_summary_flags, true); SyntheticChildren::Flags stl_synth_flags; stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences( @@ -485,54 +468,55 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { cpp_category_sp, lldb_private::formatters::LibcxxBitsetSyntheticFrontEndCreator, "libc++ std::bitset synthetic children", - ConstString("^std::__(ndk)?1::bitset<.+>(( )?&)?$"), stl_deref_flags, + ConstString("^std::__[[:alnum:]]+::bitset<.+>(( )?&)?$"), stl_deref_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdVectorSyntheticFrontEndCreator, "libc++ std::vector synthetic children", - ConstString("^std::__(ndk)?1::vector<.+>(( )?&)?$"), stl_deref_flags, + ConstString("^std::__[[:alnum:]]+::vector<.+>(( )?&)?$"), stl_deref_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdForwardListSyntheticFrontEndCreator, "libc++ std::forward_list synthetic children", - ConstString("^std::__(ndk)?1::forward_list<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::forward_list<.+>(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdListSyntheticFrontEndCreator, "libc++ std::list synthetic children", - ConstString("^std::__(ndk)?1::list<.+>(( )?&)?$"), stl_synth_flags, true); + ConstString("^std::__[[:alnum:]]+::list<.+>(( )?&)?$"), stl_deref_flags, + true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::map synthetic children", - ConstString("^std::__(ndk)?1::map<.+> >(( )?&)?$"), stl_synth_flags, + ConstString("^std::__[[:alnum:]]+::map<.+> >(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::set synthetic children", - ConstString("^std::__(ndk)?1::set<.+> >(( )?&)?$"), stl_deref_flags, + ConstString("^std::__[[:alnum:]]+::set<.+> >(( )?&)?$"), stl_deref_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multiset synthetic children", - ConstString("^std::__(ndk)?1::multiset<.+> >(( )?&)?$"), stl_deref_flags, - true); + ConstString("^std::__[[:alnum:]]+::multiset<.+> >(( )?&)?$"), + stl_deref_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multimap synthetic children", - ConstString("^std::__(ndk)?1::multimap<.+> >(( )?&)?$"), stl_synth_flags, - true); + ConstString("^std::__[[:alnum:]]+::multimap<.+> >(( )?&)?$"), + stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEndCreator, "libc++ std::unordered containers synthetic children", - ConstString("^(std::__(ndk)?1::)unordered_(multi)?(map|set)<.+> >$"), + ConstString("^(std::__[[:alnum:]]+::)unordered_(multi)?(map|set)<.+> >$"), stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, @@ -542,29 +526,29 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { true); AddCXXSynthetic(cpp_category_sp, LibcxxQueueFrontEndCreator, "libc++ std::queue synthetic children", - ConstString("^std::__(ndk)?1::queue<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::queue<.+>(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic(cpp_category_sp, LibcxxTupleFrontEndCreator, "libc++ std::tuple synthetic children", - ConstString("^std::__(ndk)?1::tuple<.*>(( )?&)?$"), stl_synth_flags, - true); + ConstString("^std::__[[:alnum:]]+::tuple<.*>(( )?&)?$"), + stl_synth_flags, true); AddCXXSynthetic(cpp_category_sp, LibcxxOptionalFrontEndCreator, "libc++ std::optional synthetic children", - ConstString("^std::__(ndk)?1::optional<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::optional<.+>(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic(cpp_category_sp, LibcxxVariantFrontEndCreator, "libc++ std::variant synthetic children", - ConstString("^std::__(ndk)?1::variant<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::variant<.+>(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator, "libc++ std::atomic synthetic children", - ConstString("^std::__(ndk)?1::atomic<.+>$"), stl_synth_flags, true); + ConstString("^std::__[[:alnum:]]+::atomic<.+>$"), stl_synth_flags, true); cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add( RegularExpressionSP(new RegularExpression( - llvm::StringRef("^(std::__(ndk)?1::)deque<.+>(( )?&)?$"))), + llvm::StringRef("^(std::__[[:alnum:]]+::)deque<.+>(( )?&)?$"))), SyntheticChildrenSP(new ScriptedSyntheticChildren( stl_synth_flags, "lldb.formatters.cpp.libcxx.stddeque_SynthProvider"))); @@ -573,94 +557,96 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { cpp_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "shared_ptr synthetic children", - ConstString("^(std::__(ndk)?1::)shared_ptr<.+>(( )?&)?$"), + ConstString("^(std::__[[:alnum:]]+::)shared_ptr<.+>(( )?&)?$"), stl_synth_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "weak_ptr synthetic children", - ConstString("^(std::__(ndk)?1::)weak_ptr<.+>(( )?&)?$"), stl_synth_flags, - true); + ConstString("^(std::__[[:alnum:]]+::)weak_ptr<.+>(( )?&)?$"), + stl_synth_flags, true); AddCXXSummary( cpp_category_sp, lldb_private::formatters::LibcxxFunctionSummaryProvider, "libc++ std::function summary provider", - ConstString("^std::__(ndk)?1::function<.+>$"), stl_summary_flags, true); + ConstString("^std::__[[:alnum:]]+::function<.+>$"), stl_summary_flags, + true); stl_summary_flags.SetDontShowChildren(false); stl_summary_flags.SetSkipPointers(false); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::bitset summary provider", - ConstString("^std::__(ndk)?1::bitset<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::bitset<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector summary provider", - ConstString("^std::__(ndk)?1::vector<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::vector<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::list summary provider", - ConstString("^std::__(ndk)?1::forward_list<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::forward_list<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::list summary provider", - ConstString("^std::__(ndk)?1::list<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::list<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::map summary provider", - ConstString("^std::__(ndk)?1::map<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::map<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::deque summary provider", - ConstString("^std::__(ndk)?1::deque<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::deque<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::queue summary provider", - ConstString("^std::__(ndk)?1::queue<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::queue<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::set summary provider", - ConstString("^std::__(ndk)?1::set<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::set<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multiset summary provider", - ConstString("^std::__(ndk)?1::multiset<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::multiset<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multimap summary provider", - ConstString("^std::__(ndk)?1::multimap<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::multimap<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary( cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::unordered containers summary provider", - ConstString("^(std::__(ndk)?1::)unordered_(multi)?(map|set)<.+> >$"), + ConstString("^(std::__[[:alnum:]]+::)unordered_(multi)?(map|set)<.+> >$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, LibcxxContainerSummaryProvider, "libc++ std::tuple summary provider", - ConstString("^std::__(ndk)?1::tuple<.*>(( )?&)?$"), stl_summary_flags, - true); + ConstString("^std::__[[:alnum:]]+::tuple<.*>(( )?&)?$"), + stl_summary_flags, true); AddCXXSummary( cpp_category_sp, lldb_private::formatters::LibCxxAtomicSummaryProvider, "libc++ std::atomic summary provider", - ConstString("^std::__(ndk)?1::atomic<.+>$"), stl_summary_flags, true); + ConstString("^std::__[[:alnum:]]+::atomic<.+>$"), stl_summary_flags, + true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxOptionalSummaryProvider, "libc++ std::optional summary provider", - ConstString("^std::__(ndk)?1::optional<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::optional<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxVariantSummaryProvider, "libc++ std::variant summary provider", - ConstString("^std::__(ndk)?1::variant<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::variant<.+>(( )?&)?$"), stl_summary_flags, true); stl_summary_flags.SetSkipPointers(true); @@ -668,27 +654,27 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxSmartPointerSummaryProvider, "libc++ std::shared_ptr summary provider", - ConstString("^std::__(ndk)?1::shared_ptr<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::shared_ptr<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibcxxSmartPointerSummaryProvider, "libc++ std::weak_ptr summary provider", - ConstString("^std::__(ndk)?1::weak_ptr<.+>(( )?&)?$"), + ConstString("^std::__[[:alnum:]]+::weak_ptr<.+>(( )?&)?$"), stl_summary_flags, true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibCxxVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", - ConstString("^std::__(ndk)?1::__wrap_iter<.+>$"), stl_synth_flags, true); + ConstString("^std::__[[:alnum:]]+::__wrap_iter<.+>$"), stl_synth_flags, + true); AddCXXSynthetic( cpp_category_sp, lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", - ConstString("^std::__(ndk)?1::__map_iterator<.+>$"), stl_synth_flags, + ConstString("^std::__[[:alnum:]]+::__map_iterator<.+>$"), stl_synth_flags, true); -#endif } static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { @@ -759,8 +745,6 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { "std::char_traits<wchar_t>, std::allocator<wchar_t> >"), cxx11_wstring_summary_sp); -#ifndef LLDB_DISABLE_PYTHON - SyntheticChildren::Flags stl_synth_flags; stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences( false); @@ -849,7 +833,6 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { "libstdc++ std::weak_ptr summary provider", ConstString("^std::weak_ptr<.+>(( )?&)?$"), stl_summary_flags, true); -#endif } static void LoadSystemFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { @@ -874,7 +857,6 @@ static void LoadSystemFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { .SetShowMembersOneLiner(false) .SetHideItemNames(false); -#ifndef LLDB_DISABLE_PYTHON // FIXME because of a bug in the FormattersContainer we need to add a summary // for both X* and const X* (<rdar://problem/12717717>) AddCXXSummary( @@ -927,13 +909,12 @@ static void LoadSystemFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { AddCXXSummary( cpp_category_sp, lldb_private::formatters::Char16SummaryProvider, "unichar summary provider", ConstString("unichar"), widechar_flags); -#endif } std::unique_ptr<Language::TypeScavenger> CPlusPlusLanguage::GetTypeScavenger() { class CPlusPlusTypeScavenger : public Language::ImageListTypeScavenger { public: - virtual CompilerType AdjustForInclusion(CompilerType &candidate) override { + CompilerType AdjustForInclusion(CompilerType &candidate) override { LanguageType lang_type(candidate.GetMinimumLanguage()); if (!Language::LanguageIsC(lang_type) && !Language::LanguageIsCPlusPlus(lang_type)) @@ -954,8 +935,8 @@ lldb::TypeCategoryImplSP CPlusPlusLanguage::GetFormatters() { llvm::call_once(g_initialize, [this]() -> void { DataVisualization::Categories::GetCategory(GetPluginName(), g_category); if (g_category) { - LoadLibCxxFormatters(g_category); LoadLibStdcppFormatters(g_category); + LoadLibCxxFormatters(g_category); LoadSystemFormatters(g_category); } }); diff --git a/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h b/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h index 3c8ca96e81f6..d30e56080732 100644 --- a/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h +++ b/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h @@ -1,9 +1,8 @@ //===-- CPlusPlusLanguage.h -------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -32,7 +31,7 @@ public: : m_full(), m_basename(), m_context(), m_arguments(), m_qualifiers(), m_parsed(false), m_parse_error(false) {} - MethodName(const ConstString &s) + MethodName(ConstString s) : m_full(s), m_basename(), m_context(), m_arguments(), m_qualifiers(), m_parsed(false), m_parse_error(false) {} @@ -46,7 +45,7 @@ public: return (bool)m_full; } - const ConstString &GetFullName() const { return m_full; } + ConstString GetFullName() const { return m_full; } std::string GetScopeQualifiedName(); @@ -93,9 +92,7 @@ public: const Highlighter *GetHighlighter() const override { return &m_highlighter; } - //------------------------------------------------------------------ // Static Functions - //------------------------------------------------------------------ static void Initialize(); static void Terminate(); @@ -128,9 +125,7 @@ public: FindAlternateFunctionManglings(const ConstString mangled, std::set<ConstString> &candidates); - //------------------------------------------------------------------ // PluginInterface protocol - //------------------------------------------------------------------ ConstString GetPluginName() override; uint32_t GetPluginVersion() override; diff --git a/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp b/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp index b32fe9588965..932db17b964a 100644 --- a/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp +++ b/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp @@ -1,9 +1,8 @@ //===-- CPlusPlusNameParser.cpp ---------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -641,6 +640,8 @@ static const llvm::StringMap<tok::TokenKind> &GetKeywordsMap() { } void CPlusPlusNameParser::ExtractTokens() { + if (m_text.empty()) + return; clang::Lexer lexer(clang::SourceLocation(), GetLangOptions(), m_text.data(), m_text.data(), m_text.data() + m_text.size()); const auto &kw_map = GetKeywordsMap(); diff --git a/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.h b/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.h index d46a53a7a704..414c3a009157 100644 --- a/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.h +++ b/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.h @@ -1,9 +1,8 @@ //===-- CPlusPlusNameParser.h -----------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp b/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp index 24185b314466..959079070acc 100644 --- a/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp +++ b/source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp @@ -1,9 +1,8 @@ //===-- CxxStringTypes.cpp --------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/CxxStringTypes.h b/source/Plugins/Language/CPlusPlus/CxxStringTypes.h index 8e2ec44dc71c..92bef2382eac 100644 --- a/source/Plugins/Language/CPlusPlus/CxxStringTypes.h +++ b/source/Plugins/Language/CPlusPlus/CxxStringTypes.h @@ -1,10 +1,9 @@ //===-- CxxStringTypes.h ----------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/source/Plugins/Language/CPlusPlus/LibCxx.cpp index 7e8c06bd4c75..abe89035c532 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxx.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxx.cpp @@ -1,9 +1,8 @@ //===-- LibCxx.cpp ----------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -19,7 +18,6 @@ #include "lldb/DataFormatters/TypeSummary.h" #include "lldb/DataFormatters/VectorIterator.h" #include "lldb/Symbol/ClangASTContext.h" -#include "lldb/Target/CPPLanguageRuntime.h" #include "lldb/Target/ProcessStructReader.h" #include "lldb/Target/SectionLoadList.h" #include "lldb/Target/Target.h" @@ -28,6 +26,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/Stream.h" +#include "Plugins/LanguageRuntime/CPlusPlus/CPPLanguageRuntime.h" + using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; @@ -68,7 +68,7 @@ bool lldb_private::formatters::LibcxxFunctionSummaryProvider( if (process == nullptr) return false; - CPPLanguageRuntime *cpp_runtime = process->GetCPPLanguageRuntime(); + CPPLanguageRuntime *cpp_runtime = CPPLanguageRuntime::Get(*process); if (!cpp_runtime) return false; @@ -300,10 +300,10 @@ bool lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd:: } size_t lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { - if (name == ConstString("first")) + GetIndexOfChildWithName(ConstString name) { + if (name == "first") return 0; - if (name == ConstString("second")) + if (name == "second") return 1; return UINT32_MAX; } @@ -430,12 +430,12 @@ bool lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd:: } size_t lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { - if (name == ConstString("__ptr_")) + GetIndexOfChildWithName(ConstString name) { + if (name == "__ptr_") return 0; - if (name == ConstString("count")) + if (name == "count") return 1; - if (name == ConstString("weak_count")) + if (name == "weak_count") return 2; return UINT32_MAX; } diff --git a/source/Plugins/Language/CPlusPlus/LibCxx.h b/source/Plugins/Language/CPlusPlus/LibCxx.h index 224a540eda04..214f5512e4a5 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxx.h +++ b/source/Plugins/Language/CPlusPlus/LibCxx.h @@ -1,10 +1,9 @@ //===-- LibCxx.h ---------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -67,7 +66,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; ~LibCxxMapIteratorSyntheticFrontEnd() override; @@ -96,7 +95,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; ~LibcxxSharedPtrSyntheticFrontEnd() override; diff --git a/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp b/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp index dea52e2f30b6..b4e7a1703e46 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp @@ -1,10 +1,9 @@ //===-- LibCxxAtomic.cpp ------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -14,13 +13,68 @@ using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; +// +// We are supporting two versions of libc++ std::atomic +// +// Given std::atomic<int> i; +// +// The previous version of std::atomic was laid out like this +// +// (lldb) frame var -L -R i +// 0x00007ffeefbff9a0: (std::__1::atomic<int>) i = { +// 0x00007ffeefbff9a0: std::__1::__atomic_base<int, true> = { +// 0x00007ffeefbff9a0: std::__1::__atomic_base<int, false> = { +// 0x00007ffeefbff9a0: __a_ = 5 +// } +// } +// } +// +// In this case we need to obtain __a_ and the current version is laid out as so +// +// (lldb) frame var -L -R i +// 0x00007ffeefbff9b0: (std::__1::atomic<int>) i = { +// 0x00007ffeefbff9b0: std::__1::__atomic_base<int, true> = { +// 0x00007ffeefbff9b0: std::__1::__atomic_base<int, false> = { +// 0x00007ffeefbff9b0: __a_ = { +// 0x00007ffeefbff9b0: std::__1::__cxx_atomic_base_impl<int> = { +// 0x00007ffeefbff9b0: __a_value = 5 +// } +// } +// } +// } +//} +// +// In this case we need to obtain __a_value +// +// The below method covers both cases and returns the relevant member as a +// ValueObjectSP +// +ValueObjectSP +lldb_private::formatters::GetLibCxxAtomicValue(ValueObject &valobj) { + ValueObjectSP non_sythetic = valobj.GetNonSyntheticValue(); + if (!non_sythetic) + return {}; + + ValueObjectSP member__a_ = + non_sythetic->GetChildMemberWithName(ConstString("__a_"), true); + if (!member__a_) + return {}; + + ValueObjectSP member__a_value = + member__a_->GetChildMemberWithName(ConstString("__a_value"), true); + if (!member__a_value) + return member__a_; + + return member__a_value; +} + bool lldb_private::formatters::LibCxxAtomicSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { - static ConstString g___a_("__a_"); - if (ValueObjectSP child = valobj.GetChildMemberWithName(g___a_, true)) { + if (ValueObjectSP atomic_value = GetLibCxxAtomicValue(valobj)) { std::string summary; - if (child->GetSummaryAsCString(summary, options) && summary.size() > 0) { + if (atomic_value->GetSummaryAsCString(summary, options) && + summary.size() > 0) { stream.Printf("%s", summary.c_str()); return true; } @@ -45,7 +99,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; lldb::ValueObjectSP GetSyntheticValue() override; @@ -60,9 +114,9 @@ lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: : SyntheticChildrenFrontEnd(*valobj_sp), m_real_child(nullptr) {} bool lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::Update() { - static ConstString g___a_("__a_"); - - m_real_child = m_backend.GetChildMemberWithName(g___a_, true).get(); + ValueObjectSP atomic_value = GetLibCxxAtomicValue(m_backend); + if (atomic_value) + m_real_child = GetLibCxxAtomicValue(m_backend).get(); return false; } @@ -84,7 +138,7 @@ lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex( } size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { return m_real_child ? m_real_child->GetIndexOfChildWithName(name) : UINT32_MAX; } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxAtomic.h b/source/Plugins/Language/CPlusPlus/LibCxxAtomic.h index a9d948bf189c..8be833dd82f6 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxAtomic.h +++ b/source/Plugins/Language/CPlusPlus/LibCxxAtomic.h @@ -1,10 +1,9 @@ //===-- LibCxxAtomic.h -------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -18,6 +17,9 @@ namespace lldb_private { namespace formatters { + +lldb::ValueObjectSP GetLibCxxAtomicValue(ValueObject &valobj); + bool LibCxxAtomicSummaryProvider(ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options); diff --git a/source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp b/source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp index 489ac4d96072..815dafb6c724 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp @@ -1,9 +1,8 @@ //===-- LibCxxBitset.cpp ----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -21,7 +20,7 @@ class BitsetFrontEnd : public SyntheticChildrenFrontEnd { public: BitsetFrontEnd(ValueObject &valobj); - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return formatters::ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp b/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp index 390483d02668..79c7434f617f 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp @@ -1,9 +1,8 @@ //===-- LibCxxInitializerList.cpp -------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -34,7 +33,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: ValueObject *m_start; @@ -109,7 +108,7 @@ bool lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd:: } size_t lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { if (!m_start) return UINT32_MAX; return ExtractIndexFromString(name.GetCString()); diff --git a/source/Plugins/Language/CPlusPlus/LibCxxList.cpp b/source/Plugins/Language/CPlusPlus/LibCxxList.cpp index 81606b573cea..f5281f2ce532 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxList.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxList.cpp @@ -1,9 +1,8 @@ //===-- LibCxxList.cpp ------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -112,7 +111,7 @@ private: class AbstractListFrontEnd : public SyntheticChildrenFrontEnd { public: - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return ExtractIndexFromString(name.GetCString()); } bool MightHaveChildren() override { return true; } @@ -385,7 +384,7 @@ lldb::ValueObjectSP ListFrontEnd::GetChildAtIndex(size_t idx) { if (current_sp->GetName() == g_next) { ProcessSP process_sp(current_sp->GetProcessSP()); if (!process_sp) - return nullptr; + return lldb::ValueObjectSP(); // if we grabbed the __next_ pointer, then the child is one pointer deep-er lldb::addr_t addr = current_sp->GetParent()->GetPointerValue(); @@ -393,6 +392,8 @@ lldb::ValueObjectSP ListFrontEnd::GetChildAtIndex(size_t idx) { ExecutionContext exe_ctx(process_sp); current_sp = CreateValueObjectFromAddress("__value_", addr, exe_ctx, m_element_type); + if (!current_sp) + return lldb::ValueObjectSP(); } // we need to copy current_sp into a new object otherwise we will end up with diff --git a/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp index 429569d57928..619c718a1c1b 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -1,9 +1,8 @@ //===-- LibCxxMap.cpp -------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -185,7 +184,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: bool GetDataType(); @@ -453,7 +452,7 @@ bool lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd:: } size_t lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { return ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp b/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp index 762b824f262a..116021588848 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp @@ -1,9 +1,8 @@ //===-- LibCxxOptional.cpp --------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -21,7 +20,7 @@ public: Update(); } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return formatters::ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp b/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp index c4e0b66d4272..4b72089c6ba2 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp @@ -1,9 +1,8 @@ //===-- LibCxxQueue.cpp -----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -21,7 +20,7 @@ public: Update(); } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return m_container_sp ? m_container_sp->GetIndexOfChildWithName(name) : UINT32_MAX; } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp b/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp index 9b412a12f532..8da7460f2275 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp @@ -1,9 +1,8 @@ //===-- LibCxxTuple.cpp -----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -21,7 +20,7 @@ public: Update(); } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return formatters::ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp index 51ae8cb3184c..b2c38c915c81 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -1,9 +1,8 @@ //===-- LibCxxUnorderedMap.cpp ----------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -40,7 +39,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: CompilerType m_element_type; @@ -210,7 +209,7 @@ bool lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: } size_t lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { return ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp b/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp index e874616c3251..491cf048e459 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp @@ -1,9 +1,8 @@ //===-- LibCxxVariant.cpp --------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -174,7 +173,7 @@ public: Update(); } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return formatters::ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibCxxVariant.h b/source/Plugins/Language/CPlusPlus/LibCxxVariant.h index 04834581963f..65db5aeaa99d 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxVariant.h +++ b/source/Plugins/Language/CPlusPlus/LibCxxVariant.h @@ -1,10 +1,9 @@ //===-- LibCxxVariant.h -------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index ed405c875174..bcd7442bc669 100644 --- a/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -1,9 +1,8 @@ //===-- LibCxxVector.cpp ----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -33,7 +32,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: ValueObject *m_start; @@ -54,7 +53,7 @@ public: bool MightHaveChildren() override { return true; } - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: CompilerType m_bool_type; @@ -165,7 +164,7 @@ bool lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd:: } size_t lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { if (!m_start || !m_finish) return UINT32_MAX; return ExtractIndexFromString(name.GetCString()); @@ -272,7 +271,7 @@ bool lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::Update() { } size_t lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { if (!m_count || !m_base_data_address) return UINT32_MAX; const char *item_name = name.GetCString(); @@ -291,7 +290,7 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEndCreator( if (!type.IsValid() || type.GetNumTemplateArguments() == 0) return nullptr; CompilerType arg_type = type.GetTypeTemplateArgument(0); - if (arg_type.GetTypeName() == ConstString("bool")) + if (arg_type.GetTypeName() == "bool") return new LibcxxVectorBoolSyntheticFrontEnd(valobj_sp); return new LibcxxStdVectorSyntheticFrontEnd(valobj_sp); } diff --git a/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp index 695371fc3992..0e0f6663c924 100644 --- a/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp +++ b/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp @@ -1,9 +1,8 @@ //===-- LibStdcpp.cpp -------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -50,7 +49,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: ExecutionContextRef m_exe_ctx_ref; @@ -71,7 +70,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; }; } // end of anonymous namespace @@ -142,10 +141,10 @@ LibstdcppMapIteratorSyntheticFrontEnd::GetChildAtIndex(size_t idx) { bool LibstdcppMapIteratorSyntheticFrontEnd::MightHaveChildren() { return true; } size_t LibstdcppMapIteratorSyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { - if (name == ConstString("first")) + ConstString name) { + if (name == "first") return 0; - if (name == ConstString("second")) + if (name == "second") return 1; return UINT32_MAX; } @@ -224,8 +223,8 @@ VectorIteratorSyntheticFrontEnd::GetChildAtIndex(size_t idx) { bool VectorIteratorSyntheticFrontEnd::MightHaveChildren() { return true; } size_t VectorIteratorSyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { - if (name == ConstString("item")) + ConstString name) { + if (name == "item") return 0; return UINT32_MAX; } @@ -374,8 +373,8 @@ bool LibStdcppSharedPtrSyntheticFrontEnd::Update() { return false; } bool LibStdcppSharedPtrSyntheticFrontEnd::MightHaveChildren() { return true; } size_t LibStdcppSharedPtrSyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { - if (name == ConstString("_M_ptr")) + ConstString name) { + if (name == "_M_ptr") return 0; return UINT32_MAX; } diff --git a/source/Plugins/Language/CPlusPlus/LibStdcpp.h b/source/Plugins/Language/CPlusPlus/LibStdcpp.h index 1400477dcd0d..e7f88d667c14 100644 --- a/source/Plugins/Language/CPlusPlus/LibStdcpp.h +++ b/source/Plugins/Language/CPlusPlus/LibStdcpp.h @@ -1,9 +1,8 @@ //===-- LibStdcpp.h ---------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp b/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp index 943af6ee81e4..66624e5beb6d 100644 --- a/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ b/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -1,9 +1,8 @@ //===-- LibStdcppTuple.cpp --------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -35,7 +34,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: std::vector<ValueObjectSP> m_members; @@ -96,7 +95,7 @@ size_t LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { } size_t LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { return ExtractIndexFromString(name.GetCString()); } diff --git a/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp b/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp index 9d46e3e3ee58..3860f960cb3d 100644 --- a/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp +++ b/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp @@ -1,9 +1,8 @@ //===-- LibStdcppUniquePointer.cpp ------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -35,7 +34,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; bool GetSummary(Stream &stream, const TypeSummaryOptions &options); @@ -130,13 +129,12 @@ size_t LibStdcppUniquePtrSyntheticFrontEnd::CalculateNumChildren() { } size_t LibStdcppUniquePtrSyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { - if (name == ConstString("ptr") || name == ConstString("pointer")) + ConstString name) { + if (name == "ptr" || name == "pointer") return 0; - if (name == ConstString("del") || name == ConstString("deleter")) + if (name == "del" || name == "deleter") return 1; - if (name == ConstString("obj") || name == ConstString("object") || - name == ConstString("$$dereference$$")) + if (name == "obj" || name == "object" || name == "$$dereference$$") return 2; return UINT32_MAX; } diff --git a/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.cpp b/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.cpp index 84f03e0e3016..248c51acea42 100644 --- a/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.cpp +++ b/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.cpp @@ -1,9 +1,8 @@ //===-- MSVCUndecoratedNameParser.cpp ---------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.h b/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.h index 0c49100d8d49..6e20877cae1b 100644 --- a/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.h +++ b/source/Plugins/Language/CPlusPlus/MSVCUndecoratedNameParser.h @@ -1,9 +1,8 @@ //===-- MSVCUndecoratedNameParser.h -----------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp b/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp index 1fe8482263eb..a9a1b44731f2 100644 --- a/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp +++ b/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp @@ -1,14 +1,14 @@ //===-- ClangHighlighter.cpp ------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "ClangHighlighter.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Target/Language.h" #include "lldb/Utility/AnsiTerminal.h" #include "lldb/Utility/StreamString.h" @@ -136,7 +136,8 @@ void ClangHighlighter::Highlight(const HighlightStyle &options, using namespace clang; FileSystemOptions file_opts; - FileManager file_mgr(file_opts); + FileManager file_mgr(file_opts, + FileSystem::Instance().GetVirtualFileSystem()); unsigned line_number = previous_lines.count('\n') + 1U; diff --git a/source/Plugins/Language/ClangCommon/ClangHighlighter.h b/source/Plugins/Language/ClangCommon/ClangHighlighter.h index 579c4315228f..f459f9424697 100644 --- a/source/Plugins/Language/ClangCommon/ClangHighlighter.h +++ b/source/Plugins/Language/ClangCommon/ClangHighlighter.h @@ -1,9 +1,8 @@ //===-- ClangHighlighter.h --------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ObjC/CF.cpp b/source/Plugins/Language/ObjC/CF.cpp index e3dab5a1442d..5bca260616ea 100644 --- a/source/Plugins/Language/ObjC/CF.cpp +++ b/source/Plugins/Language/ObjC/CF.cpp @@ -1,10 +1,9 @@ //===-- CF.cpp ----------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -15,7 +14,6 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/StackFrame.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" @@ -23,6 +21,8 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/Stream.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" + using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; @@ -51,9 +51,7 @@ bool lldb_private::formatters::CFBagSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -115,9 +113,7 @@ bool lldb_private::formatters::CFBitVectorSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -140,10 +136,8 @@ bool lldb_private::formatters::CFBitVectorSummaryProvider( bool is_type_ok = false; // check to see if this is a CFBag we know about if (descriptor->IsCFType()) { ConstString type_name(valobj.GetTypeName()); - if (type_name == ConstString("__CFMutableBitVector") || - type_name == ConstString("__CFBitVector") || - type_name == ConstString("CFMutableBitVectorRef") || - type_name == ConstString("CFBitVectorRef")) { + if (type_name == "__CFMutableBitVector" || type_name == "__CFBitVector" || + type_name == "CFMutableBitVectorRef" || type_name == "CFBitVectorRef") { if (valobj.IsPointerType()) is_type_ok = true; } @@ -239,9 +233,7 @@ bool lldb_private::formatters::CFBinaryHeapSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; diff --git a/source/Plugins/Language/ObjC/CF.h b/source/Plugins/Language/ObjC/CF.h index 6945f9e8c9b1..2abb56d407eb 100644 --- a/source/Plugins/Language/ObjC/CF.h +++ b/source/Plugins/Language/ObjC/CF.h @@ -1,9 +1,8 @@ //===-- CF.h ---------------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ObjC/Cocoa.cpp b/source/Plugins/Language/ObjC/Cocoa.cpp index 48085378939e..ddf3953bb512 100644 --- a/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/source/Plugins/Language/ObjC/Cocoa.cpp @@ -1,9 +1,8 @@ //===-- Cocoa.cpp -----------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -18,7 +17,6 @@ #include "lldb/Host/Time.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Process.h" #include "lldb/Target/ProcessStructReader.h" #include "lldb/Target/Target.h" @@ -28,6 +26,7 @@ #include "lldb/Utility/Stream.h" #include "llvm/ADT/APInt.h" +#include "llvm/ADT/bit.h" #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h" @@ -43,9 +42,7 @@ bool lldb_private::formatters::NSBundleSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -93,9 +90,7 @@ bool lldb_private::formatters::NSTimeZoneSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -140,9 +135,7 @@ bool lldb_private::formatters::NSNotificationSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -187,9 +180,7 @@ bool lldb_private::formatters::NSMachPortSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -235,9 +226,7 @@ bool lldb_private::formatters::NSIndexSetSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -426,9 +415,7 @@ bool lldb_private::formatters::NSNumberSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -484,10 +471,9 @@ bool lldb_private::formatters::NSNumberSummaryProvider( return true; } else { Status error; - - AppleObjCRuntime *runtime = - llvm::dyn_cast_or_null<AppleObjCRuntime>( - process_sp->GetObjCLanguageRuntime()); + + AppleObjCRuntime *runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>( + ObjCLanguageRuntime::Get(*process_sp)); const bool new_format = (runtime && runtime->GetFoundationVersion() >= 1400); @@ -679,9 +665,7 @@ bool lldb_private::formatters::NSURLSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -750,24 +734,18 @@ bool lldb_private::formatters::NSURLSummaryProvider( /// distantFuture, except within about 1e-25 second of the reference date. const int TAGGED_DATE_EXPONENT_BIAS = 0x3ef; -typedef union { - struct { - uint64_t fraction:52; // unsigned - uint64_t exponent:11; // signed - uint64_t sign:1; - }; - uint64_t i; - double d; -} DoubleBits; -typedef union { - struct { - uint64_t fraction:52; // unsigned - uint64_t exponent:7; // signed - uint64_t sign:1; - uint64_t unused:4; // placeholder for pointer tag bits - }; - uint64_t i; -} TaggedDoubleBits; +struct DoubleBits { + uint64_t fraction : 52; // unsigned + uint64_t exponent : 11; // signed + uint64_t sign : 1; +}; + +struct TaggedDoubleBits { + uint64_t fraction : 52; // unsigned + uint64_t exponent : 7; // signed + uint64_t sign : 1; + uint64_t unused : 4; // placeholder for pointer tag bits +}; static uint64_t decodeExponent(uint64_t exp) { // Tagged exponent field is 7-bit signed. Sign-extend the value to 64 bits @@ -775,24 +753,24 @@ static uint64_t decodeExponent(uint64_t exp) { return llvm::SignExtend64<7>(exp) + TAGGED_DATE_EXPONENT_BIAS; } -static uint64_t decodeTaggedTimeInterval(uint64_t encodedTimeInterval) { +static double decodeTaggedTimeInterval(uint64_t encodedTimeInterval) { if (encodedTimeInterval == 0) return 0.0; if (encodedTimeInterval == std::numeric_limits<uint64_t>::max()) return (uint64_t)-0.0; - TaggedDoubleBits encodedBits = {}; - encodedBits.i = encodedTimeInterval; - DoubleBits decodedBits; + TaggedDoubleBits encodedBits = + llvm::bit_cast<TaggedDoubleBits>(encodedTimeInterval); + assert(encodedBits.unused == 0); // Sign and fraction are represented exactly. // Exponent is encoded. - assert(encodedBits.unused == 0); + DoubleBits decodedBits; decodedBits.sign = encodedBits.sign; decodedBits.fraction = encodedBits.fraction; decodedBits.exponent = decodeExponent(encodedBits.exponent); - return decodedBits.d; + return llvm::bit_cast<double>(decodedBits); } bool lldb_private::formatters::NSDateSummaryProvider( @@ -801,9 +779,7 @@ bool lldb_private::formatters::NSDateSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -869,7 +845,8 @@ bool lldb_private::formatters::NSDateSummaryProvider( // Accomodate for the __NSTaggedDate format introduced in Foundation 1600. if (class_name == g___NSTaggedDate) { - auto *runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>(process_sp->GetObjCLanguageRuntime()); + auto *runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>( + ObjCLanguageRuntime::Get(*process_sp)); if (runtime && runtime->GetFoundationVersion() >= 1600) date_value = decodeTaggedTimeInterval(value_bits << 4); } @@ -897,9 +874,7 @@ bool lldb_private::formatters::ObjCClassSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -940,7 +915,7 @@ public: bool MightHaveChildren() override { return false; } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { return UINT32_MAX; } }; @@ -958,9 +933,7 @@ bool lldb_private::formatters::NSDataSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -1059,8 +1032,8 @@ bool lldb_private::formatters::ObjCBooleanSummaryProvider( if (!process_sp) return false; - if (AppleObjCRuntime *objc_runtime = - (AppleObjCRuntime *)process_sp->GetObjCLanguageRuntime()) { + if (AppleObjCRuntime *objc_runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>( + ObjCLanguageRuntime::Get(*process_sp))) { lldb::addr_t cf_true = LLDB_INVALID_ADDRESS, cf_false = LLDB_INVALID_ADDRESS; objc_runtime->GetValuesForGlobalCFBooleans(cf_true, cf_false); diff --git a/source/Plugins/Language/ObjC/Cocoa.h b/source/Plugins/Language/ObjC/Cocoa.h index 0f2ca5496302..388e6f03aa0f 100644 --- a/source/Plugins/Language/ObjC/Cocoa.h +++ b/source/Plugins/Language/ObjC/Cocoa.h @@ -1,10 +1,9 @@ //===-- Cocoa.h ---------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -14,9 +13,10 @@ #include "lldb/Core/ValueObject.h" #include "lldb/DataFormatters/TypeSummary.h" #include "lldb/DataFormatters/TypeSynthetic.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Utility/Stream.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" + namespace lldb_private { namespace formatters { bool NSIndexSetSummaryProvider(ValueObject &valobj, Stream &stream, diff --git a/source/Plugins/Language/ObjC/CoreMedia.cpp b/source/Plugins/Language/ObjC/CoreMedia.cpp index cbc38c907953..d19290ec56fb 100644 --- a/source/Plugins/Language/ObjC/CoreMedia.cpp +++ b/source/Plugins/Language/ObjC/CoreMedia.cpp @@ -1,10 +1,9 @@ //===-- CoreMedia.cpp --------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ObjC/CoreMedia.h b/source/Plugins/Language/ObjC/CoreMedia.h index 98561efbf7ed..79abb67b9d7e 100644 --- a/source/Plugins/Language/ObjC/CoreMedia.h +++ b/source/Plugins/Language/ObjC/CoreMedia.h @@ -1,10 +1,9 @@ //===-- CoreMedia.h -----------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ObjC/NSArray.cpp b/source/Plugins/Language/ObjC/NSArray.cpp index 6c110da9ecc2..404dabf2870c 100644 --- a/source/Plugins/Language/ObjC/NSArray.cpp +++ b/source/Plugins/Language/ObjC/NSArray.cpp @@ -1,9 +1,8 @@ //===-- NSArray.cpp ---------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -12,13 +11,13 @@ #include "Cocoa.h" #include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h" + #include "lldb/Core/ValueObject.h" #include "lldb/Core/ValueObjectConstResult.h" #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Expression/FunctionCaller.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/Endian.h" @@ -58,7 +57,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; protected: virtual lldb::addr_t GetDataAddress() = 0; @@ -172,13 +171,8 @@ namespace Foundation1437 { PtrType _data; uint32_t _offset; uint32_t _size; - union { - PtrType _mutations; - struct { - uint32_t _muts; - uint32_t _used; - }; - }; + uint32_t _muts; + uint32_t _used; }; using NSArrayMSyntheticFrontEnd = @@ -248,7 +242,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: ExecutionContextRef m_exe_ctx_ref; @@ -320,7 +314,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; }; class NSArray1SyntheticFrontEnd : public SyntheticChildrenFrontEnd { @@ -337,7 +331,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; }; } // namespace formatters } // namespace lldb_private @@ -350,9 +344,7 @@ bool lldb_private::formatters::NSArraySummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -550,7 +542,7 @@ lldb_private::formatters::NSArrayMSyntheticFrontEndBase::MightHaveChildren() { size_t lldb_private::formatters::NSArrayMSyntheticFrontEndBase::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) @@ -639,7 +631,7 @@ lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>:: template <typename D32, typename D64, bool Inline> size_t lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) @@ -729,7 +721,7 @@ lldb_private::formatters::NSArray0SyntheticFrontEnd::NSArray0SyntheticFrontEnd( size_t lldb_private::formatters::NSArray0SyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { return UINT32_MAX; } @@ -758,7 +750,7 @@ lldb_private::formatters::NSArray1SyntheticFrontEnd::NSArray1SyntheticFrontEnd( size_t lldb_private::formatters::NSArray1SyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { static const ConstString g_zero("[0]"); if (name == g_zero) @@ -805,7 +797,7 @@ lldb_private::formatters::NSArraySyntheticFrontEndCreator( if (!process_sp) return nullptr; AppleObjCRuntime *runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>( - process_sp->GetObjCLanguageRuntime()); + ObjCLanguageRuntime::Get(*process_sp)); if (!runtime) return nullptr; diff --git a/source/Plugins/Language/ObjC/NSDictionary.cpp b/source/Plugins/Language/ObjC/NSDictionary.cpp index 9a7fc2bd97cb..10f66c4a37f8 100644 --- a/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -1,9 +1,8 @@ //===-- NSDictionary.cpp ----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -20,7 +19,6 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/StackFrame.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" @@ -112,7 +110,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: struct DataDescriptor_32 { @@ -155,7 +153,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: ValueObjectSP m_pair; @@ -176,7 +174,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: struct DictionaryItemDescriptor { @@ -209,7 +207,7 @@ namespace Foundation1100 { bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: struct DataDescriptor_32 { @@ -282,18 +280,11 @@ namespace Foundation1437 { struct DataDescriptor_32 { uint32_t _buffer; - union { - struct { - uint32_t _mutations; - }; - struct { - uint32_t _muts; - uint32_t _used:25; - uint32_t _kvo:1; - uint32_t _szidx:6; - }; - }; - + uint32_t _muts; + uint32_t _used : 25; + uint32_t _kvo : 1; + uint32_t _szidx : 6; + uint64_t GetSize() { return (_szidx) >= NSDictionaryNumSizeBuckets ? 0 : NSDictionaryCapacities[_szidx]; @@ -302,18 +293,11 @@ namespace Foundation1437 { struct DataDescriptor_64 { uint64_t _buffer; - union { - struct { - uint64_t _mutations; - }; - struct { - uint32_t _muts; - uint32_t _used:25; - uint32_t _kvo:1; - uint32_t _szidx:6; - }; - }; - + uint32_t _muts; + uint32_t _used : 25; + uint32_t _kvo : 1; + uint32_t _szidx : 6; + uint64_t GetSize() { return (_szidx) >= NSDictionaryNumSizeBuckets ? 0 : NSDictionaryCapacities[_szidx]; @@ -362,9 +346,7 @@ bool lldb_private::formatters::NSDictionarySummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -454,8 +436,8 @@ lldb_private::formatters::NSDictionarySyntheticFrontEndCreator( lldb::ProcessSP process_sp(valobj_sp->GetProcessSP()); if (!process_sp) return nullptr; - AppleObjCRuntime *runtime = - llvm::dyn_cast_or_null<AppleObjCRuntime>(process_sp->GetObjCLanguageRuntime()); + AppleObjCRuntime *runtime = llvm::dyn_cast_or_null<AppleObjCRuntime>( + ObjCLanguageRuntime::Get(*process_sp)); if (!runtime) return nullptr; @@ -527,7 +509,7 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd:: } size_t lldb_private::formatters::NSDictionaryISyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) @@ -663,7 +645,7 @@ lldb_private::formatters::NSDictionary1SyntheticFrontEnd:: : SyntheticChildrenFrontEnd(*valobj_sp.get()), m_pair(nullptr) {} size_t lldb_private::formatters::NSDictionary1SyntheticFrontEnd:: - GetIndexOfChildWithName(const ConstString &name) { + GetIndexOfChildWithName(ConstString name) { static const ConstString g_zero("[0]"); return name == g_zero ? 0 : UINT32_MAX; } @@ -751,7 +733,7 @@ lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<D32,D64>:: template <typename D32, typename D64> size_t -lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<D32,D64>:: GetIndexOfChildWithName(const ConstString &name) { +lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<D32,D64>:: GetIndexOfChildWithName(ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) @@ -920,7 +902,7 @@ lldb_private::formatters::Foundation1100:: size_t lldb_private::formatters::Foundation1100:: - NSDictionaryMSyntheticFrontEnd::GetIndexOfChildWithName(const ConstString &name) { + NSDictionaryMSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) diff --git a/source/Plugins/Language/ObjC/NSDictionary.h b/source/Plugins/Language/ObjC/NSDictionary.h index 6ec9a8eebe13..ecb3fccdf877 100644 --- a/source/Plugins/Language/ObjC/NSDictionary.h +++ b/source/Plugins/Language/ObjC/NSDictionary.h @@ -1,10 +1,9 @@ //===-- NSDictionary.h ---------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -52,8 +51,8 @@ public: class Prefix : public Matcher { public: Prefix(ConstString p); - virtual ~Prefix() = default; - virtual bool Match(ConstString class_name) override; + ~Prefix() override = default; + bool Match(ConstString class_name) override; private: ConstString m_prefix; @@ -61,8 +60,8 @@ public: class Full : public Matcher { public: Full(ConstString n); - virtual ~Full() = default; - virtual bool Match(ConstString class_name) override; + ~Full() override = default; + bool Match(ConstString class_name) override; private: ConstString m_name; diff --git a/source/Plugins/Language/ObjC/NSError.cpp b/source/Plugins/Language/ObjC/NSError.cpp index 975bda5179f2..97df3be72c84 100644 --- a/source/Plugins/Language/ObjC/NSError.cpp +++ b/source/Plugins/Language/ObjC/NSError.cpp @@ -1,9 +1,8 @@ //===-- NSError.cpp ---------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -15,7 +14,6 @@ #include "lldb/Core/ValueObjectConstResult.h" #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/ProcessStructReader.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" @@ -24,6 +22,7 @@ #include "lldb/Utility/Stream.h" #include "Plugins/Language/ObjC/NSString.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" using namespace lldb; using namespace lldb_private; @@ -164,7 +163,7 @@ public: bool MightHaveChildren() override { return true; } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { static ConstString g___userInfo("_userInfo"); if (name == g___userInfo) return 0; @@ -188,9 +187,7 @@ lldb_private::formatters::NSErrorSyntheticFrontEndCreator( lldb::ProcessSP process_sp(valobj_sp->GetProcessSP()); if (!process_sp) return nullptr; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return nullptr; diff --git a/source/Plugins/Language/ObjC/NSException.cpp b/source/Plugins/Language/ObjC/NSException.cpp index 2404ef9d1003..931794a12ab1 100644 --- a/source/Plugins/Language/ObjC/NSException.cpp +++ b/source/Plugins/Language/ObjC/NSException.cpp @@ -1,9 +1,8 @@ //===-- NSException.cpp -----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -15,7 +14,6 @@ #include "lldb/Core/ValueObjectConstResult.h" #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/ProcessStructReader.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" @@ -24,6 +22,7 @@ #include "lldb/Utility/Stream.h" #include "Plugins/Language/ObjC/NSString.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" using namespace lldb; using namespace lldb_private; @@ -150,7 +149,7 @@ public: bool MightHaveChildren() override { return true; } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { // NSException has 4 members: // NSString *name; // NSString *reason; @@ -180,9 +179,7 @@ lldb_private::formatters::NSExceptionSyntheticFrontEndCreator( lldb::ProcessSP process_sp(valobj_sp->GetProcessSP()); if (!process_sp) return nullptr; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return nullptr; diff --git a/source/Plugins/Language/ObjC/NSIndexPath.cpp b/source/Plugins/Language/ObjC/NSIndexPath.cpp index 41df9abb3eb2..9ee6021ae56b 100644 --- a/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -1,9 +1,8 @@ //===-- NSIndexPath.cpp -----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -14,10 +13,10 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/DataFormatters/TypeSynthetic.h" #include "lldb/Symbol/ClangASTContext.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; @@ -69,9 +68,7 @@ public: if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -128,7 +125,7 @@ public: bool MightHaveChildren() override { return m_impl.m_mode != Mode::Invalid; } - size_t GetIndexOfChildWithName(const ConstString &name) override { + size_t GetIndexOfChildWithName(ConstString name) override { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) diff --git a/source/Plugins/Language/ObjC/NSSet.cpp b/source/Plugins/Language/ObjC/NSSet.cpp index 7e03d7574af0..ebaa990fb74b 100644 --- a/source/Plugins/Language/ObjC/NSSet.cpp +++ b/source/Plugins/Language/ObjC/NSSet.cpp @@ -1,9 +1,8 @@ //===-- NSSet.cpp -----------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -15,7 +14,6 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Target/Language.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/Endian.h" @@ -55,7 +53,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: struct DataDescriptor_32 { @@ -96,7 +94,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; private: @@ -155,28 +153,18 @@ namespace Foundation1437 { uint32_t _cow; // __table storage uint32_t _objs_addr; - union { - uint32_t _mutations; - struct { - uint32_t _muts; - uint32_t _used : 26; - uint32_t _szidx : 6; - }; - }; + uint32_t _muts; + uint32_t _used : 26; + uint32_t _szidx : 6; }; struct DataDescriptor_64 { uint64_t _cow; // __Table storage uint64_t _objs_addr; - union { - uint64_t _mutations; - struct { - uint32_t _muts; - uint32_t _used : 26; - uint32_t _szidx : 6; - }; - }; + uint32_t _muts; + uint32_t _used : 26; + uint32_t _szidx : 6; }; using NSSetMSyntheticFrontEnd = @@ -222,7 +210,7 @@ public: bool MightHaveChildren() override; - size_t GetIndexOfChildWithName(const ConstString &name) override; + size_t GetIndexOfChildWithName(ConstString name) override; }; } // namespace formatters } // namespace lldb_private @@ -236,9 +224,7 @@ bool lldb_private::formatters::NSSetSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; @@ -315,9 +301,7 @@ lldb_private::formatters::NSSetSyntheticFrontEndCreator( lldb::ProcessSP process_sp(valobj_sp->GetProcessSP()); if (!process_sp) return nullptr; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return nullptr; @@ -385,7 +369,7 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::~NSSetISyntheticFrontEnd() { size_t lldb_private::formatters::NSSetISyntheticFrontEnd::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) @@ -540,7 +524,7 @@ template <typename D32, typename D64> size_t lldb_private::formatters:: GenericNSSetMSyntheticFrontEnd<D32, D64>::GetIndexOfChildWithName( - const ConstString &name) { + ConstString name) { const char *item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) diff --git a/source/Plugins/Language/ObjC/NSSet.h b/source/Plugins/Language/ObjC/NSSet.h index 00451be6c7f3..f11b6d406dec 100644 --- a/source/Plugins/Language/ObjC/NSSet.h +++ b/source/Plugins/Language/ObjC/NSSet.h @@ -1,10 +1,9 @@ //===-- NSSet.h ---------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// diff --git a/source/Plugins/Language/ObjC/NSString.cpp b/source/Plugins/Language/ObjC/NSString.cpp index f882b2adc260..4800c955e5f5 100644 --- a/source/Plugins/Language/ObjC/NSString.cpp +++ b/source/Plugins/Language/ObjC/NSString.cpp @@ -1,10 +1,9 @@ //===-- NSString.cpp ----------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -60,9 +59,7 @@ bool lldb_private::formatters::NSStringSummaryProvider( if (!process_sp) return false; - ObjCLanguageRuntime *runtime = - (ObjCLanguageRuntime *)process_sp->GetLanguageRuntime( - lldb::eLanguageTypeObjC); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (!runtime) return false; diff --git a/source/Plugins/Language/ObjC/NSString.h b/source/Plugins/Language/ObjC/NSString.h index 3a923c2be6ac..699d8eb36f88 100644 --- a/source/Plugins/Language/ObjC/NSString.h +++ b/source/Plugins/Language/ObjC/NSString.h @@ -1,10 +1,9 @@ //===-- NSString.h ---------------------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -13,9 +12,10 @@ #include "lldb/Core/ValueObject.h" #include "lldb/DataFormatters/TypeSummary.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Utility/Stream.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" + namespace lldb_private { namespace formatters { bool NSStringSummaryProvider(ValueObject &valobj, Stream &stream, diff --git a/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/source/Plugins/Language/ObjC/ObjCLanguage.cpp index 0598d69f6ebb..f9ab18688de7 100644 --- a/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -1,9 +1,8 @@ //===-- ObjCLanguage.cpp ----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -17,13 +16,14 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/CompilerType.h" -#include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Utility/ConstString.h" #include "lldb/Utility/StreamString.h" #include "llvm/Support/Threading.h" +#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h" + #include "CF.h" #include "Cocoa.h" #include "CoreMedia.h" @@ -49,9 +49,7 @@ lldb_private::ConstString ObjCLanguage::GetPluginNameStatic() { return g_name; } -//------------------------------------------------------------------ // PluginInterface protocol -//------------------------------------------------------------------ lldb_private::ConstString ObjCLanguage::GetPluginName() { return GetPluginNameStatic(); @@ -59,9 +57,7 @@ lldb_private::ConstString ObjCLanguage::GetPluginName() { uint32_t ObjCLanguage::GetPluginVersion() { return 1; } -//------------------------------------------------------------------ // Static Functions -//------------------------------------------------------------------ Language *ObjCLanguage::CreateInstance(lldb::LanguageType language) { switch (language) { @@ -120,7 +116,7 @@ bool ObjCLanguage::MethodName::SetName(const char *name, bool strict) { return SetName(llvm::StringRef(name), strict); } -const ConstString &ObjCLanguage::MethodName::GetClassName() { +ConstString ObjCLanguage::MethodName::GetClassName() { if (!m_class) { if (IsValid(false)) { const char *full = m_full.GetCString(); @@ -146,7 +142,7 @@ const ConstString &ObjCLanguage::MethodName::GetClassName() { return m_class; } -const ConstString &ObjCLanguage::MethodName::GetClassNameWithCategory() { +ConstString ObjCLanguage::MethodName::GetClassNameWithCategory() { if (!m_class_category) { if (IsValid(false)) { const char *full = m_full.GetCString(); @@ -169,7 +165,7 @@ const ConstString &ObjCLanguage::MethodName::GetClassNameWithCategory() { return m_class_category; } -const ConstString &ObjCLanguage::MethodName::GetSelector() { +ConstString ObjCLanguage::MethodName::GetSelector() { if (!m_selector) { if (IsValid(false)) { const char *full = m_full.GetCString(); @@ -184,7 +180,7 @@ const ConstString &ObjCLanguage::MethodName::GetSelector() { return m_selector; } -const ConstString &ObjCLanguage::MethodName::GetCategory() { +ConstString ObjCLanguage::MethodName::GetCategory() { if (!m_category_is_valid && !m_category) { if (IsValid(false)) { m_category_is_valid = true; @@ -225,43 +221,46 @@ ConstString ObjCLanguage::MethodName::GetFullNameWithoutCategory( return ConstString(); } -size_t ObjCLanguage::MethodName::GetFullNames(std::vector<ConstString> &names, - bool append) { - if (!append) - names.clear(); - if (IsValid(false)) { +std::vector<ConstString> +ObjCLanguage::GetMethodNameVariants(ConstString method_name) const { + std::vector<ConstString> variant_names; + ObjCLanguage::MethodName objc_method(method_name.GetCString(), false); + if (!objc_method.IsValid(false)) { + return variant_names; + } + + const bool is_class_method = + objc_method.GetType() == MethodName::eTypeClassMethod; + const bool is_instance_method = + objc_method.GetType() == MethodName::eTypeInstanceMethod; + ConstString name_sans_category = + objc_method.GetFullNameWithoutCategory(/*empty_if_no_category*/ true); + + if (is_class_method || is_instance_method) { + if (name_sans_category) + variant_names.emplace_back(name_sans_category); + } else { StreamString strm; - const bool is_class_method = m_type == eTypeClassMethod; - const bool is_instance_method = m_type == eTypeInstanceMethod; - const ConstString &category = GetCategory(); - if (is_class_method || is_instance_method) { - names.push_back(m_full); - if (category) { - strm.Printf("%c[%s %s]", is_class_method ? '+' : '-', - GetClassName().GetCString(), GetSelector().GetCString()); - names.emplace_back(strm.GetString()); - } - } else { - const ConstString &class_name = GetClassName(); - const ConstString &selector = GetSelector(); - strm.Printf("+[%s %s]", class_name.GetCString(), selector.GetCString()); - names.emplace_back(strm.GetString()); - strm.Clear(); - strm.Printf("-[%s %s]", class_name.GetCString(), selector.GetCString()); - names.emplace_back(strm.GetString()); + + strm.Printf("+%s", objc_method.GetFullName().GetCString()); + variant_names.emplace_back(strm.GetString()); + strm.Clear(); + + strm.Printf("-%s", objc_method.GetFullName().GetCString()); + variant_names.emplace_back(strm.GetString()); + strm.Clear(); + + if (name_sans_category) { + strm.Printf("+%s", name_sans_category.GetCString()); + variant_names.emplace_back(strm.GetString()); strm.Clear(); - if (category) { - strm.Printf("+[%s(%s) %s]", class_name.GetCString(), - category.GetCString(), selector.GetCString()); - names.emplace_back(strm.GetString()); - strm.Clear(); - strm.Printf("-[%s(%s) %s]", class_name.GetCString(), - category.GetCString(), selector.GetCString()); - names.emplace_back(strm.GetString()); - } + + strm.Printf("-%s", name_sans_category.GetCString()); + variant_names.emplace_back(strm.GetString()); } } - return names.size(); + + return variant_names; } static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { @@ -286,7 +285,6 @@ static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { objc_category_sp->GetTypeSummariesContainer()->Add(ConstString("BOOL *"), ObjC_BOOL_summary); -#ifndef LLDB_DISABLE_PYTHON // we need to skip pointers here since we are special casing a SEL* when // retrieving its value objc_flags.SetSkipPointers(true); @@ -318,7 +316,6 @@ static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { lldb_private::formatters::ObjCClassSyntheticFrontEndCreator, "Class synthetic children", ConstString("Class"), class_synth_flags); -#endif // LLDB_DISABLE_PYTHON objc_flags.SetSkipPointers(false); objc_flags.SetCascades(true); @@ -384,7 +381,6 @@ static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { appkit_flags.SetDontShowChildren(false); -#ifndef LLDB_DISABLE_PYTHON AddCXXSummary( objc_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags); @@ -841,7 +837,6 @@ static void LoadObjCFormatters(TypeCategoryImplSP objc_category_sp) { lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("__CFMutableBitVector"), appkit_flags); -#endif // LLDB_DISABLE_PYTHON } static void LoadCoreMediaFormatters(TypeCategoryImplSP objc_category_sp) { @@ -857,11 +852,9 @@ static void LoadCoreMediaFormatters(TypeCategoryImplSP objc_category_sp) { .SetSkipPointers(false) .SetSkipReferences(false); -#ifndef LLDB_DISABLE_PYTHON AddCXXSummary(objc_category_sp, lldb_private::formatters::CMTimeSummaryProvider, "CMTime summary provider", ConstString("CMTime"), cm_flags); -#endif // LLDB_DISABLE_PYTHON } lldb::TypeCategoryImplSP ObjCLanguage::GetFormatters() { @@ -898,7 +891,7 @@ ObjCLanguage::GetPossibleFormattersMatches(ValueObject &valobj, lldb::ProcessSP process_sp = valobj.GetProcessSP(); if (!process_sp) break; - ObjCLanguageRuntime *runtime = process_sp->GetObjCLanguageRuntime(); + ObjCLanguageRuntime *runtime = ObjCLanguageRuntime::Get(*process_sp); if (runtime == nullptr) break; ObjCLanguageRuntime::ClassDescriptorSP objc_class_sp( @@ -940,26 +933,16 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() { ResultSet &results) override { bool result = false; - Process *process = exe_scope->CalculateProcess().get(); - if (process) { - const bool create_on_demand = false; - auto objc_runtime = process->GetObjCLanguageRuntime(create_on_demand); - if (objc_runtime) { - auto decl_vendor = objc_runtime->GetDeclVendor(); - if (decl_vendor) { - std::vector<clang::NamedDecl *> decls; + if (auto *process = exe_scope->CalculateProcess().get()) { + if (auto *objc_runtime = ObjCLanguageRuntime::Get(*process)) { + if (auto *decl_vendor = objc_runtime->GetDeclVendor()) { ConstString name(key); - decl_vendor->FindDecls(name, true, UINT32_MAX, decls); - for (auto decl : decls) { - if (decl) { - if (CompilerType candidate = - ClangASTContext::GetTypeForDecl(decl)) { - result = true; - std::unique_ptr<Language::TypeScavenger::Result> result( - new ObjCScavengerResult(candidate)); - results.insert(std::move(result)); - } - } + for (const CompilerType &type : + decl_vendor->FindTypes(name, /*max_matches*/ UINT32_MAX)) { + result = true; + std::unique_ptr<Language::TypeScavenger::Result> result( + new ObjCScavengerResult(type)); + results.insert(std::move(result)); } } } @@ -977,21 +960,16 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() { ResultSet &results) override { bool result = false; - Target *target = exe_scope->CalculateTarget().get(); - if (target) { - if (auto clang_modules_decl_vendor = + if (auto *target = exe_scope->CalculateTarget().get()) { + if (auto *clang_modules_decl_vendor = target->GetClangModulesDeclVendor()) { - std::vector<clang::NamedDecl *> decls; ConstString key_cs(key); - - if (clang_modules_decl_vendor->FindDecls(key_cs, false, UINT32_MAX, - decls) > 0 && - !decls.empty()) { - CompilerType module_type = - ClangASTContext::GetTypeForDecl(decls.front()); + auto types = clang_modules_decl_vendor->FindTypes( + key_cs, /*max_matches*/ UINT32_MAX); + if (!types.empty()) { result = true; std::unique_ptr<Language::TypeScavenger::Result> result( - new ObjCScavengerResult(module_type)); + new ObjCScavengerResult(types.front())); results.insert(std::move(result)); } } @@ -1005,7 +983,7 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() { class ObjCDebugInfoScavenger : public Language::ImageListTypeScavenger { public: - virtual CompilerType AdjustForInclusion(CompilerType &candidate) override { + CompilerType AdjustForInclusion(CompilerType &candidate) override { LanguageType lang_type(candidate.GetMinimumLanguage()); if (!Language::LanguageIsObjC(lang_type)) return CompilerType(); diff --git a/source/Plugins/Language/ObjC/ObjCLanguage.h b/source/Plugins/Language/ObjC/ObjCLanguage.h index 114f9323de02..3e2cc0972993 100644 --- a/source/Plugins/Language/ObjC/ObjCLanguage.h +++ b/source/Plugins/Language/ObjC/ObjCLanguage.h @@ -1,9 +1,8 @@ //===-- ObjCLanguage.h ------------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -59,32 +58,20 @@ public: Type GetType() const { return m_type; } - const ConstString &GetFullName() const { return m_full; } + ConstString GetFullName() const { return m_full; } ConstString GetFullNameWithoutCategory(bool empty_if_no_category); bool SetName(const char *name, bool strict); bool SetName(llvm::StringRef name, bool strict); - const ConstString &GetClassName(); - - const ConstString &GetClassNameWithCategory(); + ConstString GetClassName(); - const ConstString &GetCategory(); + ConstString GetClassNameWithCategory(); - const ConstString &GetSelector(); + ConstString GetCategory(); - // Get all possible names for a method. Examples: - // If name is "+[NSString(my_additions) myStringWithCString:]" - // names[0] => "+[NSString(my_additions) myStringWithCString:]" - // names[1] => "+[NSString myStringWithCString:]" - // If name is specified without the leading '+' or '-' like - // "[NSString(my_additions) myStringWithCString:]" - // names[0] => "+[NSString(my_additions) myStringWithCString:]" - // names[1] => "-[NSString(my_additions) myStringWithCString:]" - // names[2] => "+[NSString myStringWithCString:]" - // names[3] => "-[NSString myStringWithCString:]" - size_t GetFullNames(std::vector<ConstString> &names, bool append); + ConstString GetSelector(); protected: ConstString @@ -106,6 +93,18 @@ public: return lldb::eLanguageTypeObjC; } + // Get all possible names for a method. Examples: + // If method_name is "+[NSString(my_additions) myStringWithCString:]" + // variant_names[0] => "+[NSString myStringWithCString:]" + // If name is specified without the leading '+' or '-' like + // "[NSString(my_additions) myStringWithCString:]" + // variant_names[0] => "+[NSString(my_additions) myStringWithCString:]" + // variant_names[1] => "-[NSString(my_additions) myStringWithCString:]" + // variant_names[2] => "+[NSString myStringWithCString:]" + // variant_names[3] => "-[NSString myStringWithCString:]" + std::vector<ConstString> + GetMethodNameVariants(ConstString method_name) const override; + lldb::TypeCategoryImplSP GetFormatters() override; std::vector<ConstString> @@ -124,9 +123,7 @@ public: const Highlighter *GetHighlighter() const override { return &m_highlighter; } - //------------------------------------------------------------------ // Static Functions - //------------------------------------------------------------------ static void Initialize(); static void Terminate(); @@ -155,9 +152,7 @@ public: return false; } - //------------------------------------------------------------------ // PluginInterface protocol - //------------------------------------------------------------------ ConstString GetPluginName() override; uint32_t GetPluginVersion() override; diff --git a/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.cpp b/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.cpp index 5e6d86e05318..81b3c5807c41 100644 --- a/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.cpp +++ b/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.cpp @@ -1,10 +1,9 @@ //===-- ObjCPlusPlusLanguage.cpp --------------------------------------*- C++ //-*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -39,18 +38,14 @@ lldb_private::ConstString ObjCPlusPlusLanguage::GetPluginNameStatic() { return g_name; } -//------------------------------------------------------------------ // PluginInterface protocol -//------------------------------------------------------------------ lldb_private::ConstString ObjCPlusPlusLanguage::GetPluginName() { return GetPluginNameStatic(); } uint32_t ObjCPlusPlusLanguage::GetPluginVersion() { return 1; } -//------------------------------------------------------------------ // Static Functions -//------------------------------------------------------------------ Language *ObjCPlusPlusLanguage::CreateInstance(lldb::LanguageType language) { switch (language) { case lldb::eLanguageTypeObjC_plus_plus: diff --git a/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h b/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h index b64f0f81e001..6224a3f47b3b 100644 --- a/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h +++ b/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h @@ -1,9 +1,8 @@ //===-- ObjCPlusPlusLanguage.h ----------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -32,9 +31,7 @@ public: const Highlighter *GetHighlighter() const override { return &m_highlighter; } - //------------------------------------------------------------------ // Static Functions - //------------------------------------------------------------------ static void Initialize(); static void Terminate(); @@ -43,9 +40,7 @@ public: static lldb_private::ConstString GetPluginNameStatic(); - //------------------------------------------------------------------ // PluginInterface protocol - //------------------------------------------------------------------ ConstString GetPluginName() override; uint32_t GetPluginVersion() override; |
