@@ -1719,17 +1719,10 @@ bool SwiftLanguage::GetFunctionDisplayName(
1719
1719
return true ;
1720
1720
}
1721
1721
case Language::FunctionNameRepresentation::eNameWithArgs: {
1722
- if (!sc.function )
1723
- return false ;
1724
- if (sc.function ->GetLanguage () != eLanguageTypeSwift)
1725
- return false ;
1726
- std::string display_name = SwiftLanguageRuntime::DemangleSymbolAsString (
1727
- sc.function ->GetMangled ().GetMangledName ().GetStringRef (),
1728
- SwiftLanguageRuntime::eSimplified, &sc, exe_ctx);
1722
+ std::string display_name = GetFunctionName (sc, exe_ctx);
1729
1723
if (display_name.empty ())
1730
1724
return false ;
1731
- ExecutionContextScope *exe_scope =
1732
- exe_ctx ? exe_ctx->GetBestExecutionContextScope () : NULL ;
1725
+ s << display_name;
1733
1726
const InlineFunctionInfo *inline_info = NULL ;
1734
1727
VariableListSP variable_list_sp;
1735
1728
bool get_function_vars = true ;
@@ -1749,109 +1742,131 @@ bool SwiftLanguage::GetFunctionDisplayName(
1749
1742
sc.function ->GetBlock (true ).GetBlockVariableList (true );
1750
1743
}
1751
1744
1752
- if (inline_info) {
1753
- s << display_name;
1754
- s.PutCString (" [inlined] " );
1755
- display_name = inline_info->GetName ().GetString ();
1756
- }
1757
-
1758
1745
VariableList args;
1759
1746
if (variable_list_sp)
1760
1747
variable_list_sp->AppendVariablesWithScope (eValueTypeVariableArgument,
1761
1748
args);
1762
- if (args.GetSize () == 0 ) {
1763
- s << display_name;
1764
- return true ;
1765
- }
1766
- const char *cstr = display_name.data ();
1767
- const char *open_paren = strchr (cstr, ' (' );
1768
- const char *close_paren = nullptr ;
1769
- const char *generic = strchr (cstr, ' <' );
1770
- // If before the arguments list begins there is a template sign
1771
- // then scan to the end of the generic args before you try to find
1772
- // the arguments list.
1773
- if (generic && open_paren && generic < open_paren) {
1774
- int generic_depth = 1 ;
1775
- ++generic;
1776
- for (; *generic && generic_depth > 0 ; generic++) {
1777
- if (*generic == ' <' )
1778
- generic_depth++;
1779
- if (*generic == ' >' )
1780
- generic_depth--;
1781
- }
1782
- if (*generic)
1783
- open_paren = strchr (generic, ' (' );
1784
- else
1785
- open_paren = nullptr ;
1749
+
1750
+ s << GetFunctionDisplayArgs (sc, args, exe_ctx);
1751
+ return true ;
1786
1752
}
1787
- if (open_paren) {
1788
- close_paren = strchr (open_paren, ' )' );
1789
1753
}
1754
+ return false ;
1755
+ }
1790
1756
1791
- if (open_paren)
1792
- s.Write (cstr, open_paren - cstr + 1 );
1793
- else {
1794
- s << display_name;
1795
- s.PutChar (' (' );
1757
+ std::string SwiftLanguage::GetFunctionName (const SymbolContext &sc,
1758
+ const ExecutionContext *exe_ctx) {
1759
+ if (!sc.function )
1760
+ return {};
1761
+ if (sc.function ->GetLanguage () != eLanguageTypeSwift)
1762
+ return {};
1763
+ std::string name = SwiftLanguageRuntime::DemangleSymbolAsString (
1764
+ sc.function ->GetMangled ().GetMangledName ().GetStringRef (),
1765
+ SwiftLanguageRuntime::eSimplified, &sc, exe_ctx);
1766
+ if (name.empty ())
1767
+ return {};
1768
+ size_t open_paren = name.find (' (' );
1769
+ size_t generic = name.find (' <' );
1770
+ size_t name_end = std::min (open_paren, generic);
1771
+ if (name_end == std::string::npos)
1772
+ return name;
1773
+ return name.substr (0 , name_end);
1774
+ }
1775
+
1776
+ std::string SwiftLanguage::GetFunctionDisplayArgs (
1777
+ const SymbolContext &sc, VariableList &args,
1778
+ const lldb_private::ExecutionContext *exe_ctx) {
1779
+ ExecutionContextScope *exe_scope =
1780
+ exe_ctx ? exe_ctx->GetBestExecutionContextScope () : NULL ;
1781
+ std::string name = SwiftLanguageRuntime::DemangleSymbolAsString (
1782
+ sc.function ->GetMangled ().GetMangledName ().GetStringRef (),
1783
+ SwiftLanguageRuntime::eSimplified, &sc, exe_ctx);
1784
+ lldb_private::StreamString s;
1785
+ const char *cstr = name.data ();
1786
+ const char *open_paren = strchr (cstr, ' (' );
1787
+ const char *close_paren = nullptr ;
1788
+ const char *generic = strchr (cstr, ' <' );
1789
+ // If before the arguments list begins there is a template sign
1790
+ // then scan to the end of the generic args before you try to find
1791
+ // the arguments list.
1792
+ const char *generic_start = generic;
1793
+ if (generic && open_paren && generic < open_paren) {
1794
+ int generic_depth = 1 ;
1795
+ ++generic;
1796
+ for (; *generic && generic_depth > 0 ; generic++) {
1797
+ if (*generic == ' <' )
1798
+ generic_depth++;
1799
+ if (*generic == ' >' )
1800
+ generic_depth--;
1796
1801
}
1797
- const size_t num_args = args.GetSize ();
1798
- for (size_t arg_idx = 0 ; arg_idx < num_args; ++arg_idx) {
1799
- std::string buffer;
1800
-
1801
- VariableSP var_sp (args.GetVariableAtIndex (arg_idx));
1802
- ValueObjectSP var_value_sp (
1803
- ValueObjectVariable::Create (exe_scope, var_sp));
1804
- if (!var_sp || !var_value_sp || var_sp->IsArtificial ())
1805
- continue ;
1806
- StreamString ss;
1807
- const char *var_representation = nullptr ;
1808
- const char *var_name = var_value_sp->GetName ().GetCString ();
1809
- if (var_value_sp->GetCompilerType ().IsValid ()) {
1810
- if (var_value_sp && exe_scope->CalculateTarget ())
1811
- var_value_sp = var_value_sp->GetQualifiedRepresentationIfAvailable (
1812
- exe_scope->CalculateTarget ()
1813
- ->TargetProperties ::GetPreferDynamicValue (),
1814
- exe_scope->CalculateTarget ()
1815
- ->TargetProperties ::GetEnableSyntheticValue ());
1816
- if (var_value_sp->GetCompilerType ().IsAggregateType () &&
1817
- DataVisualization::ShouldPrintAsOneLiner (*var_value_sp.get ())) {
1818
- static StringSummaryFormat format (TypeSummaryImpl::Flags ()
1819
- .SetHideItemNames (false )
1820
- .SetShowMembersOneLiner (true ),
1821
- " " );
1822
- format.FormatObject (var_value_sp.get (), buffer, TypeSummaryOptions ());
1823
- var_representation = buffer.c_str ();
1824
- } else
1825
- var_value_sp->DumpPrintableRepresentation (
1826
- ss,
1827
- ValueObject::ValueObjectRepresentationStyle::
1828
- eValueObjectRepresentationStyleSummary,
1829
- eFormatDefault,
1830
- ValueObject::PrintableRepresentationSpecialCases::eAllow, false );
1831
- }
1832
- if (ss.GetData () && ss.GetSize ())
1833
- var_representation = ss.GetData ();
1834
- if (arg_idx > 0 )
1835
- s.PutCString (" , " );
1836
- if (var_value_sp->GetError ().Success ()) {
1837
- if (var_representation)
1838
- s.Printf (" %s=%s" , var_name, var_representation);
1839
- else
1840
- s.Printf (" %s=%s at %s" , var_name,
1841
- var_value_sp->GetTypeName ().GetCString (),
1842
- var_value_sp->GetLocationAsCString ());
1802
+ if (*generic)
1803
+ open_paren = strchr (generic, ' (' );
1804
+ else
1805
+ open_paren = nullptr ;
1806
+ }
1807
+ if (open_paren) {
1808
+ close_paren = strchr (open_paren, ' )' );
1809
+ }
1810
+
1811
+ if (generic_start && generic_start < open_paren)
1812
+ s.Write (generic_start, open_paren - generic_start);
1813
+ s.PutChar (' (' );
1814
+
1815
+ const size_t num_args = args.GetSize ();
1816
+ for (size_t arg_idx = 0 ; arg_idx < num_args; ++arg_idx) {
1817
+ std::string buffer;
1818
+
1819
+ VariableSP var_sp (args.GetVariableAtIndex (arg_idx));
1820
+ ValueObjectSP var_value_sp (ValueObjectVariable::Create (exe_scope, var_sp));
1821
+ if (!var_sp || !var_value_sp || var_sp->IsArtificial ())
1822
+ continue ;
1823
+ StreamString ss;
1824
+ const char *var_representation = nullptr ;
1825
+ const char *var_name = var_value_sp->GetName ().GetCString ();
1826
+ if (var_value_sp->GetCompilerType ().IsValid ()) {
1827
+ if (var_value_sp && exe_scope->CalculateTarget ())
1828
+ var_value_sp = var_value_sp->GetQualifiedRepresentationIfAvailable (
1829
+ exe_scope->CalculateTarget ()
1830
+ ->TargetProperties ::GetPreferDynamicValue (),
1831
+ exe_scope->CalculateTarget ()
1832
+ ->TargetProperties ::GetEnableSyntheticValue ());
1833
+ if (var_value_sp->GetCompilerType ().IsAggregateType () &&
1834
+ DataVisualization::ShouldPrintAsOneLiner (*var_value_sp.get ())) {
1835
+ static StringSummaryFormat format (TypeSummaryImpl::Flags ()
1836
+ .SetHideItemNames (false )
1837
+ .SetShowMembersOneLiner (true ),
1838
+ " " );
1839
+ format.FormatObject (var_value_sp.get (), buffer, TypeSummaryOptions ());
1840
+ var_representation = buffer.c_str ();
1843
1841
} else
1844
- s.Printf (" %s=<unavailable>" , var_name);
1842
+ var_value_sp->DumpPrintableRepresentation (
1843
+ ss,
1844
+ ValueObject::ValueObjectRepresentationStyle::
1845
+ eValueObjectRepresentationStyleSummary,
1846
+ eFormatDefault,
1847
+ ValueObject::PrintableRepresentationSpecialCases::eAllow, false );
1845
1848
}
1846
-
1847
- if (close_paren)
1848
- s.PutCString (close_paren);
1849
- else
1850
- s.PutChar (' )' );
1851
- }
1852
- return true ;
1849
+ if (ss.GetData () && ss.GetSize ())
1850
+ var_representation = ss.GetData ();
1851
+ if (arg_idx > 0 )
1852
+ s.PutCString (" , " );
1853
+ if (var_value_sp->GetError ().Success ()) {
1854
+ if (var_representation)
1855
+ s.Printf (" %s=%s" , var_name, var_representation);
1856
+ else
1857
+ s.Printf (" %s=%s at %s" , var_name,
1858
+ var_value_sp->GetTypeName ().GetCString (),
1859
+ var_value_sp->GetLocationAsCString ());
1860
+ } else
1861
+ s.Printf (" %s=<unavailable>" , var_name);
1853
1862
}
1854
- return false ;
1863
+
1864
+ if (close_paren)
1865
+ s.PutCString (close_paren);
1866
+ else
1867
+ s.PutChar (' )' );
1868
+
1869
+ return s.GetString ().str ();
1855
1870
}
1856
1871
1857
1872
void SwiftLanguage::GetExceptionResolverDescription (bool catch_on,
0 commit comments