@@ -214,6 +214,104 @@ class Language : public PluginInterface {
214214 return std::vector<Language::MethodNameVariant>();
215215 };
216216
217+ class MethodName {
218+ public:
219+ MethodName () {}
220+
221+ MethodName (ConstString full)
222+ : m_full(full), m_basename(), m_context(), m_arguments(),
223+ m_qualifiers (), m_return_type(), m_scope_qualified(), m_parsed(false ),
224+ m_parse_error(false ) {}
225+
226+ virtual ~MethodName () {};
227+
228+ void Clear () {
229+ m_full.Clear ();
230+ m_basename = llvm::StringRef ();
231+ m_context = llvm::StringRef ();
232+ m_arguments = llvm::StringRef ();
233+ m_qualifiers = llvm::StringRef ();
234+ m_return_type = llvm::StringRef ();
235+ m_scope_qualified.clear ();
236+ m_parsed = false ;
237+ m_parse_error = false ;
238+ }
239+
240+ bool IsValid () {
241+ if (!m_parsed)
242+ Parse ();
243+ if (m_parse_error)
244+ return false ;
245+ return (bool )m_full;
246+ }
247+
248+ ConstString GetFullName () const { return m_full; }
249+
250+ llvm::StringRef GetBasename () {
251+ if (!m_parsed)
252+ Parse ();
253+ return m_basename;
254+ }
255+
256+ llvm::StringRef GetContext () {
257+ if (!m_parsed)
258+ Parse ();
259+ return m_context;
260+ }
261+
262+ llvm::StringRef GetArguments () {
263+ if (!m_parsed)
264+ Parse ();
265+ return m_arguments;
266+ }
267+
268+ llvm::StringRef GetQualifiers () {
269+ if (!m_parsed)
270+ Parse ();
271+ return m_qualifiers;
272+ }
273+
274+ llvm::StringRef GetReturnType () {
275+ if (!m_parsed)
276+ Parse ();
277+ return m_return_type;
278+ }
279+
280+ std::string GetScopeQualifiedName () {
281+ if (!m_parsed)
282+ Parse ();
283+ return m_scope_qualified;
284+ }
285+
286+ protected:
287+ virtual void Parse () {
288+ m_parsed = true ;
289+ m_parse_error = true ;
290+ }
291+
292+ ConstString m_full; // Full name:
293+ // "size_t lldb::SBTarget::GetBreakpointAtIndex(unsigned
294+ // int) const"
295+ llvm::StringRef m_basename; // Basename: "GetBreakpointAtIndex"
296+ llvm::StringRef m_context; // Decl context: "lldb::SBTarget"
297+ llvm::StringRef m_arguments; // Arguments: "(unsigned int)"
298+ llvm::StringRef m_qualifiers; // Qualifiers: "const"
299+ llvm::StringRef m_return_type; // Return type: "size_t"
300+ std::string m_scope_qualified;
301+ bool m_parsed = false ;
302+ bool m_parse_error = false ;
303+ };
304+
305+ virtual std::unique_ptr<Language::MethodName>
306+ GetMethodName (ConstString name) const {
307+ return std::make_unique<Language::MethodName>(name);
308+ };
309+
310+ virtual std::pair<lldb::FunctionNameType, std::optional<ConstString>>
311+ GetFunctionNameInfo (ConstString name) const {
312+ return std::pair{lldb::eFunctionNameTypeNone, std::nullopt };
313+ };
314+
217315 // / Returns true iff the given symbol name is compatible with the mangling
218316 // / scheme of this language.
219317 // /
0 commit comments