================
@@ -208,6 +209,152 @@ static bool PrettyPrintFunctionNameWithArgs(Stream 
&out_stream,
   return true;
 }
 
+static std::optional<llvm::StringRef> GetDemangledBasename(Function &function) 
{
+  auto demangled_name = function.GetName().GetStringRef();
+  if (demangled_name.empty())
+    return std::nullopt;
+
+  const std::optional<DemangledNameInfo> &info =
+      function.GetMangled().GetDemangledInfo();
+  if (!info)
+    return std::nullopt;
+
+  // Function without a basename is nonsense.
+  if (!info->hasBasename())
+    return std::nullopt;
+
+  assert(info->BasenameRange.first < demangled_name.size());
+  assert(info->BasenameRange.second < demangled_name.size());
+
+  return demangled_name.substr(info->BasenameRange.first,
+                               info->BasenameRange.second -
+                                   info->BasenameRange.first);
+}
+
+static std::optional<llvm::StringRef>
+GetDemangledTemplateArguments(Function &function) {
+  auto demangled_name = function.GetName().GetStringRef();
+  if (demangled_name.empty())
+    return std::nullopt;
+
+  const std::optional<DemangledNameInfo> &info =
+      function.GetMangled().GetDemangledInfo();
+  if (!info)
+    return std::nullopt;
+
+  // Function without a basename is nonsense.
+  if (!info->hasBasename())
+    return std::nullopt;
+
+  assert(info->BasenameRange.second < demangled_name.size());
+  assert(info->ArgumentsRange.first < demangled_name.size());
+  assert(info->ArgumentsRange.first >= info->BasenameRange.second);
+
+  return demangled_name.substr(info->BasenameRange.second,
+                               info->ArgumentsRange.first -
+                                   info->BasenameRange.second);
+}
+
+static std::optional<llvm::StringRef>
+GetDemangledReturnTypeLHS(Function &function) {
+  auto demangled_name = function.GetName().GetStringRef();
+  if (demangled_name.empty())
+    return std::nullopt;
+
+  const std::optional<DemangledNameInfo> &info =
+      function.GetMangled().GetDemangledInfo();
+  if (!info)
+    return std::nullopt;
+
+  // Function without a basename is nonsense.
+  if (!info->hasBasename())
+    return std::nullopt;
+
+  assert(info->ScopeRange.first < demangled_name.size());
+
+  return demangled_name.substr(0, info->ScopeRange.first);
+}
+
+static std::optional<llvm::StringRef>
+GetDemangledFunctionQualifiers(Function &function) {
+  auto demangled_name = function.GetName().GetStringRef();
+  if (demangled_name.empty())
+    return std::nullopt;
+
+  const std::optional<DemangledNameInfo> &info =
+      function.GetMangled().GetDemangledInfo();
+  if (!info)
+    return std::nullopt;
+
+  // Function without a basename is nonsense.
+  if (!info->hasBasename())
+    return std::nullopt;
+
+  assert(info->QualifiersRange.first <= demangled_name.size());
+  assert(info->QualifiersRange.second <= demangled_name.size());
+  assert(info->QualifiersRange.second >= info->QualifiersRange.first);
+
+  return demangled_name.substr(info->QualifiersRange.first,
+                               info->QualifiersRange.second -
+                                   info->QualifiersRange.first);
----------------
labath wrote:

The only thing that changes here is the DemangledNameInfo field, right?

Maybe you could turn deduplicate that using a utility function that takes a 
member pointer as an argument?

https://github.com/llvm/llvm-project/pull/131836
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to