diff options
author | nerix <nerixdev@outlook.de> | 2025-07-21 11:20:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-21 10:20:47 +0100 |
commit | f0a7462cf03dd69dc9d5affb870facc098d9e73d (patch) | |
tree | 5c6917f9e674ded52a6398c2b76839f9aa190a6d /lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | |
parent | 040bffc633fa56b95f5fa535442fedcbae2f9b94 (diff) | |
download | llvm-f0a7462cf03dd69dc9d5affb870facc098d9e73d.zip llvm-f0a7462cf03dd69dc9d5affb870facc098d9e73d.tar.gz llvm-f0a7462cf03dd69dc9d5affb870facc098d9e73d.tar.bz2 |
[LLDB] Add formatters for MSVC STL std::optional (#149545)
Adds synthetic children for `std::optional` from MSVC's STL. Most of the
machinery for `std::optional` is already there.
Towards #24834.
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index a8ebde0..a0d5e1d 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -1545,20 +1545,10 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { "std::bitset synthetic child", "^std::(__debug::)?bitset<.+>(( )?&)?$", stl_deref_flags, true); - AddCXXSynthetic( - cpp_category_sp, - lldb_private::formatters::LibStdcppOptionalSyntheticFrontEndCreator, - "std::optional synthetic child", "^std::optional<.+>(( )?&)?$", - stl_deref_flags, true); - AddCXXSummary(cpp_category_sp, lldb_private::formatters::StdlibCoroutineHandleSummaryProvider, "libstdc++ std::coroutine_handle summary provider", libstdcpp_std_coroutine_handle_regex, stl_summary_flags, true); - AddCXXSummary(cpp_category_sp, - lldb_private::formatters::GenericOptionalSummaryProvider, - "libstd++ std::optional summary provider", - "^std::optional<.+>(( )?&)?$", stl_summary_flags, true); } static lldb_private::SyntheticChildrenFrontEnd * @@ -1648,6 +1638,17 @@ GenericForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *children, *valobj_sp); } +static SyntheticChildrenFrontEnd * +GenericOptionalSyntheticFrontEndCreator(CXXSyntheticChildren *children, + lldb::ValueObjectSP valobj_sp) { + if (!valobj_sp) + return nullptr; + + if (IsMsvcStlOptional(*valobj_sp)) + return MsvcStlOptionalSyntheticFrontEndCreator(children, valobj_sp); + return LibStdcppOptionalSyntheticFrontEndCreator(children, valobj_sp); +} + /// Load formatters that are formatting types from more than one STL static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { if (!cpp_category_sp) @@ -1713,6 +1714,12 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { "std::forward_list synthetic children", "^std::forward_list<.+>(( )?&)?$", stl_synth_flags, true); + SyntheticChildren::Flags stl_deref_flags = stl_synth_flags; + stl_deref_flags.SetFrontEndWantsDereference(); + AddCXXSynthetic(cpp_category_sp, GenericOptionalSyntheticFrontEndCreator, + "std::optional synthetic children", + "^std::optional<.+>(( )?&)?$", stl_deref_flags, true); + AddCXXSummary(cpp_category_sp, GenericSmartPointerSummaryProvider, "MSVC STL/libstdc++ std::shared_ptr summary provider", "^std::shared_ptr<.+>(( )?&)?$", stl_summary_flags, true); @@ -1739,6 +1746,9 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { TypeSummaryImplSP(new ScriptSummaryFormat( stl_summary_flags, "lldb.formatters.cpp.gnu_libstdcpp.ForwardListSummaryProvider"))); + AddCXXSummary(cpp_category_sp, GenericOptionalSummaryProvider, + "MSVC STL/libstd++ std::optional summary provider", + "^std::optional<.+>(( )?&)?$", stl_summary_flags, true); } static void LoadMsvcStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { |