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