@@ -122,7 +122,14 @@ constexpr Definition g_function_child_entries[] = {
122122 Definition (" pc-offset" , EntryType::FunctionPCOffset),
123123 Definition (" initial-function" , EntryType::FunctionInitial),
124124 Definition (" changed" , EntryType::FunctionChanged),
125- Definition (" is-optimized" , EntryType::FunctionIsOptimized)};
125+ Definition (" is-optimized" , EntryType::FunctionIsOptimized),
126+ Definition (" scope" , EntryType::FunctionScope),
127+ Definition (" basename" , EntryType::FunctionBasename),
128+ Definition (" template-arguments" , EntryType::FunctionTemplateArguments),
129+ Definition (" arguments" , EntryType::FunctionArguments),
130+ Definition (" return-left" , EntryType::FunctionReturnLeft),
131+ Definition (" return-right" , EntryType::FunctionReturnRight),
132+ Definition (" qualifiers" , EntryType::FunctionQualifiers)};
126133
127134constexpr Definition g_line_child_entries[] = {
128135 Entry::DefinitionWithChildren (" file" , EntryType::LineEntryFile,
@@ -352,6 +359,13 @@ const char *FormatEntity::Entry::TypeToCString(Type t) {
352359 ENUM_TO_CSTR (FunctionNameWithArgs);
353360 ENUM_TO_CSTR (FunctionNameNoArgs);
354361 ENUM_TO_CSTR (FunctionMangledName);
362+ ENUM_TO_CSTR (FunctionScope);
363+ ENUM_TO_CSTR (FunctionBasename);
364+ ENUM_TO_CSTR (FunctionTemplateArguments);
365+ ENUM_TO_CSTR (FunctionArguments);
366+ ENUM_TO_CSTR (FunctionReturnLeft);
367+ ENUM_TO_CSTR (FunctionReturnRight);
368+ ENUM_TO_CSTR (FunctionQualifiers);
355369 ENUM_TO_CSTR (FunctionAddrOffset);
356370 ENUM_TO_CSTR (FunctionAddrOffsetConcrete);
357371 ENUM_TO_CSTR (FunctionLineOffset);
@@ -1218,6 +1232,65 @@ static bool PrintFunctionNameWithArgs(Stream &s,
12181232 return true ;
12191233}
12201234
1235+ static bool FormatFunctionNameWithArgs (Stream &s, const SymbolContext *sc,
1236+ const ExecutionContext *exe_ctx) {
1237+ if (!sc)
1238+ return false ;
1239+
1240+ Language *language_plugin = nullptr ;
1241+ bool language_plugin_handled = false ;
1242+ StreamString ss;
1243+ if (sc->function )
1244+ language_plugin = Language::FindPlugin (sc->function ->GetLanguage ());
1245+ else if (sc->symbol )
1246+ language_plugin = Language::FindPlugin (sc->symbol ->GetLanguage ());
1247+
1248+ if (language_plugin)
1249+ language_plugin_handled = language_plugin->GetFunctionDisplayName (
1250+ sc, exe_ctx, Language::FunctionNameRepresentation::eNameWithArgs, ss);
1251+
1252+ if (language_plugin_handled) {
1253+ s << ss.GetString ();
1254+ return true ;
1255+ }
1256+
1257+ if (sc->function )
1258+ return PrintFunctionNameWithArgs (s, exe_ctx, *sc);
1259+
1260+ if (!sc->symbol )
1261+ return false ;
1262+
1263+ const char *cstr = sc->symbol ->GetName ().AsCString (nullptr );
1264+ if (!cstr)
1265+ return false ;
1266+
1267+ s.PutCString (cstr);
1268+ return true ;
1269+ }
1270+
1271+ static bool FormatFunctionNameForLanguage (Stream &s, const SymbolContext *sc,
1272+ const ExecutionContext *exe_ctx) {
1273+ if (!sc)
1274+ return false ;
1275+
1276+ Language *language_plugin = nullptr ;
1277+ if (sc->function )
1278+ language_plugin = Language::FindPlugin (sc->function ->GetLanguage ());
1279+ else if (sc->symbol )
1280+ language_plugin = Language::FindPlugin (sc->symbol ->GetLanguage ());
1281+
1282+ if (!language_plugin)
1283+ return false ;
1284+
1285+ const auto *format = language_plugin->GetFrameFormat ();
1286+ if (!format)
1287+ return false ;
1288+
1289+ return FormatEntity::Format (*format, s, sc, exe_ctx, /* addr=*/ nullptr ,
1290+ /* valobj=*/ nullptr , /* function_changed=*/ false ,
1291+ /* initial_function=*/ false );
1292+ }
1293+
12211294bool FormatEntity::FormatStringRef (const llvm::StringRef &format_str, Stream &s,
12221295 const SymbolContext *sc,
12231296 const ExecutionContext *exe_ctx,
@@ -1775,41 +1848,34 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
17751848 }
17761849 return false ;
17771850
1778- case Entry::Type::FunctionNameWithArgs: {
1851+ case Entry::Type::FunctionScope:
1852+ case Entry::Type::FunctionBasename:
1853+ case Entry::Type::FunctionTemplateArguments:
1854+ case Entry::Type::FunctionArguments:
1855+ case Entry::Type::FunctionReturnRight:
1856+ case Entry::Type::FunctionReturnLeft:
1857+ case Entry::Type::FunctionQualifiers: {
17791858 if (!sc)
17801859 return false ;
17811860
1782- Language *language_plugin = nullptr ;
1783- bool language_plugin_handled = false ;
1784- StreamString ss;
1785- if (sc->function )
1786- language_plugin = Language::FindPlugin (sc->function ->GetLanguage ());
1787- else if (sc->symbol )
1788- language_plugin = Language::FindPlugin (sc->symbol ->GetLanguage ());
1789-
1790- if (language_plugin)
1791- language_plugin_handled = language_plugin->GetFunctionDisplayName (
1792- sc, exe_ctx, Language::FunctionNameRepresentation::eNameWithArgs, ss);
1793-
1794- if (language_plugin_handled) {
1795- s << ss.GetString ();
1796- return true ;
1797- }
1798-
1799- if (sc->function )
1800- return PrintFunctionNameWithArgs (s, exe_ctx, *sc);
1801-
1802- if (!sc->symbol )
1861+ if (!sc->function )
18031862 return false ;
18041863
1805- const char *cstr = sc->symbol ->GetName ().AsCString (nullptr );
1806- if (!cstr)
1864+ Language *language_plugin =
1865+ Language::FindPlugin (sc->function ->GetLanguage ());
1866+ if (!language_plugin)
18071867 return false ;
18081868
1809- s. PutCString (cstr);
1810- return true ;
1869+ return language_plugin-> HandleFrameFormatVariable (*sc, exe_ctx, entry. type ,
1870+ s) ;
18111871 }
18121872
1873+ case Entry::Type::FunctionNameWithArgs: {
1874+ if (FormatFunctionNameForLanguage (s, sc, exe_ctx))
1875+ return true ;
1876+
1877+ return FormatFunctionNameWithArgs (s, sc, exe_ctx);
1878+ }
18131879 case Entry::Type::FunctionMangledName: {
18141880 if (!sc)
18151881 return false ;
0 commit comments