Data formatters cleanup:

- Making an error message more consistent
- Ensuring the element size is not zero before using it in a modulus
- Properly using target settings to cap the std::list element count
- Removing spurious element size calculations that were unused
- Removing spurious capping in std::map

llvm-svn: 178057
This commit is contained in:
Enrico Granata 2013-03-26 18:55:08 +00:00
parent bb1beaa220
commit 7c0788b2d9
4 changed files with 9 additions and 10 deletions

View File

@ -779,13 +779,12 @@ namespace lldb_private {
bool bool
HasLoop(); HasLoop();
static const size_t g_list_capping_size = 255; size_t m_list_capping_size;
static const bool g_use_loop_detect = true; static const bool g_use_loop_detect = true;
lldb::addr_t m_node_address; lldb::addr_t m_node_address;
ValueObject* m_head; ValueObject* m_head;
ValueObject* m_tail; ValueObject* m_tail;
ClangASTType m_element_type; ClangASTType m_element_type;
uint32_t m_element_size;
size_t m_count; size_t m_count;
std::map<size_t,lldb::ValueObjectSP> m_children; std::map<size_t,lldb::ValueObjectSP> m_children;
}; };
@ -821,11 +820,9 @@ namespace lldb_private {
void void
GetValueOffset (const lldb::ValueObjectSP& node); GetValueOffset (const lldb::ValueObjectSP& node);
static const size_t g_map_capping_size = 255;
ValueObject* m_tree; ValueObject* m_tree;
ValueObject* m_root_node; ValueObject* m_root_node;
ClangASTType m_element_type; ClangASTType m_element_type;
uint32_t m_element_size;
uint32_t m_skip_size; uint32_t m_skip_size;
size_t m_count; size_t m_count;
std::map<size_t,lldb::ValueObjectSP> m_children; std::map<size_t,lldb::ValueObjectSP> m_children;

View File

@ -402,7 +402,7 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
break; break;
} }
default: default:
stream.Printf("absurd: dt=%d",data_type); stream.Printf("unexpected value: dt=%d",data_type);
break; break;
} }
return true; return true;

View File

@ -142,11 +142,11 @@ private:
lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::LibcxxStdListSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::LibcxxStdListSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :
SyntheticChildrenFrontEnd(*valobj_sp.get()), SyntheticChildrenFrontEnd(*valobj_sp.get()),
m_list_capping_size(0),
m_node_address(), m_node_address(),
m_head(NULL), m_head(NULL),
m_tail(NULL), m_tail(NULL),
m_element_type(), m_element_type(),
m_element_size(0),
m_count(UINT32_MAX), m_count(UINT32_MAX),
m_children() m_children()
{ {
@ -197,7 +197,7 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::CalculateNumChildren (
{ {
size++; size++;
current.SetEntry(current.next()); current.SetEntry(current.next());
if (size > g_list_capping_size) if (size > m_list_capping_size)
break; break;
} }
return m_count = (size-1); return m_count = (size-1);
@ -239,6 +239,11 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::Update()
m_count = UINT32_MAX; m_count = UINT32_MAX;
Error err; Error err;
ValueObjectSP backend_addr(m_backend.AddressOf(err)); ValueObjectSP backend_addr(m_backend.AddressOf(err));
m_list_capping_size = 0;
if (m_backend.GetTargetSP())
m_list_capping_size = m_backend.GetTargetSP()->GetMaximumNumberOfChildrenToDisplay();
if (m_list_capping_size == 0)
m_list_capping_size = 255;
if (err.Fail() || backend_addr.get() == NULL) if (err.Fail() || backend_addr.get() == NULL)
return false; return false;
m_node_address = backend_addr->GetValueAsUnsigned(0); m_node_address = backend_addr->GetValueAsUnsigned(0);
@ -257,7 +262,6 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::Update()
return false; return false;
lldb::TemplateArgumentKind kind; lldb::TemplateArgumentKind kind;
m_element_type = ClangASTType(m_backend.GetClangAST(), ClangASTContext::GetTemplateArgument(m_backend.GetClangAST(), list_type, 0, kind)); m_element_type = ClangASTType(m_backend.GetClangAST(), ClangASTContext::GetTemplateArgument(m_backend.GetClangAST(), list_type, 0, kind));
m_element_size = m_element_type.GetTypeByteSize();
m_head = impl_sp->GetChildMemberWithName(ConstString("__next_"), true).get(); m_head = impl_sp->GetChildMemberWithName(ConstString("__next_"), true).get();
m_tail = impl_sp->GetChildMemberWithName(ConstString("__prev_"), true).get(); m_tail = impl_sp->GetChildMemberWithName(ConstString("__prev_"), true).get();
return false; return false;

View File

@ -215,7 +215,6 @@ SyntheticChildrenFrontEnd(*valobj_sp.get()),
m_tree(NULL), m_tree(NULL),
m_root_node(NULL), m_root_node(NULL),
m_element_type(), m_element_type(),
m_element_size(0),
m_skip_size(UINT32_MAX), m_skip_size(UINT32_MAX),
m_count(UINT32_MAX), m_count(UINT32_MAX),
m_children() m_children()
@ -256,7 +255,6 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetDataType()
if (!deref) if (!deref)
return false; return false;
m_element_type.SetClangType(deref->GetClangAST(), deref->GetClangType()); m_element_type.SetClangType(deref->GetClangAST(), deref->GetClangType());
m_element_size = m_element_type.GetTypeByteSize();
return true; return true;
} }