@@ -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);
@@ -1184,6 +1198,65 @@ static bool PrintFunctionNameWithArgs(Stream &s,
11841198 return true ;
11851199}
11861200
1201+ static bool FormatFunctionNameWithArgs (Stream &s, const SymbolContext *sc,
1202+ const ExecutionContext *exe_ctx) {
1203+ if (!sc)
1204+ return false ;
1205+
1206+ Language *language_plugin = nullptr ;
1207+ bool language_plugin_handled = false ;
1208+ StreamString ss;
1209+ if (sc->function )
1210+ language_plugin = Language::FindPlugin (sc->function ->GetLanguage ());
1211+ else if (sc->symbol )
1212+ language_plugin = Language::FindPlugin (sc->symbol ->GetLanguage ());
1213+
1214+ if (language_plugin)
1215+ language_plugin_handled = language_plugin->GetFunctionDisplayName (
1216+ sc, exe_ctx, Language::FunctionNameRepresentation::eNameWithArgs, ss);
1217+
1218+ if (language_plugin_handled) {
1219+ s << ss.GetString ();
1220+ return true ;
1221+ }
1222+
1223+ if (sc->function )
1224+ return PrintFunctionNameWithArgs (s, exe_ctx, *sc);
1225+
1226+ if (!sc->symbol )
1227+ return false ;
1228+
1229+ const char *cstr = sc->symbol ->GetName ().AsCString (nullptr );
1230+ if (!cstr)
1231+ return false ;
1232+
1233+ s.PutCString (cstr);
1234+ return true ;
1235+ }
1236+
1237+ static bool FormatFunctionNameForLanguage (Stream &s, const SymbolContext *sc,
1238+ const ExecutionContext *exe_ctx) {
1239+ if (!sc)
1240+ return false ;
1241+
1242+ Language *language_plugin = nullptr ;
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+ return false ;
1250+
1251+ const auto *format = language_plugin->GetFrameFormat ();
1252+ if (!format)
1253+ return false ;
1254+
1255+ return FormatEntity::Format (*format, s, sc, exe_ctx, /* addr=*/ nullptr ,
1256+ /* valobj=*/ nullptr , /* function_changed=*/ false ,
1257+ /* initial_function=*/ false );
1258+ }
1259+
11871260bool FormatEntity::FormatStringRef (const llvm::StringRef &format_str, Stream &s,
11881261 const SymbolContext *sc,
11891262 const ExecutionContext *exe_ctx,
@@ -1734,41 +1807,34 @@ bool FormatEntity::Format(const Entry &entry, Stream &s,
17341807 return true ;
17351808 }
17361809
1737- case Entry::Type::FunctionNameWithArgs: {
1810+ case Entry::Type::FunctionScope:
1811+ case Entry::Type::FunctionBasename:
1812+ case Entry::Type::FunctionTemplateArguments:
1813+ case Entry::Type::FunctionArguments:
1814+ case Entry::Type::FunctionReturnRight:
1815+ case Entry::Type::FunctionReturnLeft:
1816+ case Entry::Type::FunctionQualifiers: {
17381817 if (!sc)
17391818 return false ;
17401819
1741- Language *language_plugin = nullptr ;
1742- bool language_plugin_handled = false ;
1743- StreamString ss;
1744- if (sc->function )
1745- language_plugin = Language::FindPlugin (sc->function ->GetLanguage ());
1746- else if (sc->symbol )
1747- language_plugin = Language::FindPlugin (sc->symbol ->GetLanguage ());
1748-
1749- if (language_plugin)
1750- language_plugin_handled = language_plugin->GetFunctionDisplayName (
1751- sc, exe_ctx, Language::FunctionNameRepresentation::eNameWithArgs, ss);
1752-
1753- if (language_plugin_handled) {
1754- s << ss.GetString ();
1755- return true ;
1756- }
1757-
1758- if (sc->function )
1759- return PrintFunctionNameWithArgs (s, exe_ctx, *sc);
1760-
1761- if (!sc->symbol )
1820+ if (!sc->function )
17621821 return false ;
17631822
1764- const char *cstr = sc->symbol ->GetName ().AsCString (nullptr );
1765- if (!cstr)
1823+ Language *language_plugin =
1824+ Language::FindPlugin (sc->function ->GetLanguage ());
1825+ if (!language_plugin)
17661826 return false ;
17671827
1768- s. PutCString (cstr);
1769- return true ;
1828+ return language_plugin-> HandleFrameFormatVariable (*sc, exe_ctx, entry. type ,
1829+ s) ;
17701830 }
17711831
1832+ case Entry::Type::FunctionNameWithArgs: {
1833+ if (FormatFunctionNameForLanguage (s, sc, exe_ctx))
1834+ return true ;
1835+
1836+ return FormatFunctionNameWithArgs (s, sc, exe_ctx);
1837+ }
17721838 case Entry::Type::FunctionMangledName: {
17731839 if (!sc)
17741840 return false ;
0 commit comments