Added an API to SymbolContext to hide the complexity of getting the

function name from a symbol context.  Use that in CommandCompletions
to get the right name.

llvm-svn: 140628
This commit is contained in:
Jim Ingham
2011-09-27 19:48:20 +00:00
parent 2bc774ac1a
commit 530a413c7b
3 changed files with 44 additions and 8 deletions

View File

@@ -15,6 +15,7 @@
#include "lldb/lldb-private.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/Mangled.h"
#include "lldb/Symbol/ClangASTType.h"
#include "lldb/Symbol/LineEntry.h"
@@ -266,6 +267,23 @@ public:
// const char *line_number,
// const char *symbol);
//------------------------------------------------------------------
/// Find a name of the innermost function for the symbol context.
///
/// For instance, if the symbol context contains an inlined block,
/// it will return the inlined function name.
///
/// @param[in] prefer_mangled
/// if \btrue, then the mangled name will be returned if there
/// is one. Otherwise the unmangled name will be returned if it
/// is available.
///
/// @return
/// The name of the function represented by this symbol context.
//------------------------------------------------------------------
ConstString
GetFunctionName (Mangled::NamePreference preference = Mangled::ePreferDemangled);
bool
GetParentInlinedFrameInfo (const Address &curr_frame_pc,
bool is_concrete_frame,

View File

@@ -627,14 +627,9 @@ CommandCompletions::SymbolCompleter::SearchCallback (
{
if (sc_list.GetContextAtIndex(i, sc))
{
if (sc.function)
{
m_match_set.insert (sc.function->GetMangled().GetDemangledName());
}
else if (sc.symbol && sc.symbol->GetAddressRangePtr())
{
m_match_set.insert (sc.symbol->GetMangled().GetName());
}
ConstString func_name = sc.GetFunctionName(Mangled::ePreferDemangled);
if (!func_name.IsEmpty())
m_match_set.insert (func_name);
}
}
}

View File

@@ -575,6 +575,29 @@ SymbolContext::GetParentInlinedFrameInfo (const Address &curr_frame_pc,
return false;
}
ConstString
SymbolContext::GetFunctionName (Mangled::NamePreference preference)
{
if (function)
{
if (block)
{
const InlineFunctionInfo *inline_info = block->GetInlinedFunctionInfo();
if (inline_info)
return inline_info->GetName();
}
return function->GetMangled().GetName(preference);
}
else if (symbol && symbol->GetAddressRangePtr())
{
return symbol->GetMangled().GetName(preference);
}
else
{
// No function, return an empty string.
return ConstString();
}
}
//----------------------------------------------------------------------
//