@@ -1545,20 +1545,10 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
15451545 " std::bitset synthetic child" , " ^std::(__debug::)?bitset<.+>(( )?&)?$" ,
15461546 stl_deref_flags, true );
15471547
1548- AddCXXSynthetic (
1549- cpp_category_sp,
1550- lldb_private::formatters::LibStdcppOptionalSyntheticFrontEndCreator,
1551- " std::optional synthetic child" , " ^std::optional<.+>(( )?&)?$" ,
1552- stl_deref_flags, true );
1553-
15541548 AddCXXSummary (cpp_category_sp,
15551549 lldb_private::formatters::StdlibCoroutineHandleSummaryProvider,
15561550 " libstdc++ std::coroutine_handle summary provider" ,
15571551 libstdcpp_std_coroutine_handle_regex, stl_summary_flags, true );
1558- AddCXXSummary (cpp_category_sp,
1559- lldb_private::formatters::GenericOptionalSummaryProvider,
1560- " libstd++ std::optional summary provider" ,
1561- " ^std::optional<.+>(( )?&)?$" , stl_summary_flags, true );
15621552}
15631553
15641554static lldb_private::SyntheticChildrenFrontEnd *
@@ -1648,6 +1638,17 @@ GenericForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *children,
16481638 *valobj_sp);
16491639}
16501640
1641+ static SyntheticChildrenFrontEnd *
1642+ GenericOptionalSyntheticFrontEndCreator (CXXSyntheticChildren *children,
1643+ lldb::ValueObjectSP valobj_sp) {
1644+ if (!valobj_sp)
1645+ return nullptr ;
1646+
1647+ if (IsMsvcStlOptional (*valobj_sp))
1648+ return MsvcStlOptionalSyntheticFrontEndCreator (children, valobj_sp);
1649+ return LibStdcppOptionalSyntheticFrontEndCreator (children, valobj_sp);
1650+ }
1651+
16511652// / Load formatters that are formatting types from more than one STL
16521653static void LoadCommonStlFormatters (lldb::TypeCategoryImplSP cpp_category_sp) {
16531654 if (!cpp_category_sp)
@@ -1713,6 +1714,12 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
17131714 " std::forward_list synthetic children" ,
17141715 " ^std::forward_list<.+>(( )?&)?$" , stl_synth_flags, true );
17151716
1717+ SyntheticChildren::Flags stl_deref_flags = stl_synth_flags;
1718+ stl_deref_flags.SetFrontEndWantsDereference ();
1719+ AddCXXSynthetic (cpp_category_sp, GenericOptionalSyntheticFrontEndCreator,
1720+ " std::optional synthetic children" ,
1721+ " ^std::optional<.+>(( )?&)?$" , stl_deref_flags, true );
1722+
17161723 AddCXXSummary (cpp_category_sp, GenericSmartPointerSummaryProvider,
17171724 " MSVC STL/libstdc++ std::shared_ptr summary provider" ,
17181725 " ^std::shared_ptr<.+>(( )?&)?$" , stl_summary_flags, true );
@@ -1739,6 +1746,9 @@ static void LoadCommonStlFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
17391746 TypeSummaryImplSP (new ScriptSummaryFormat (
17401747 stl_summary_flags,
17411748 " lldb.formatters.cpp.gnu_libstdcpp.ForwardListSummaryProvider" )));
1749+ AddCXXSummary (cpp_category_sp, GenericOptionalSummaryProvider,
1750+ " MSVC STL/libstd++ std::optional summary provider" ,
1751+ " ^std::optional<.+>(( )?&)?$" , stl_summary_flags, true );
17421752}
17431753
17441754static void LoadMsvcStlFormatters (lldb::TypeCategoryImplSP cpp_category_sp) {
0 commit comments