<div dir="ltr">Was this clang-formatted? some of these lines look way longer than 80 columns.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 3, 2016 at 4:41 PM Enrico Granata via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: enrico<br class="gmail_msg">
Date: Mon Oct 3 18:33:00 2016<br class="gmail_msg">
New Revision: 283160<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=283160&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=283160&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
Changes to the std::multimap formatter to make it work against trunk libc++<br class="gmail_msg">
<br class="gmail_msg">
Fixes rdar://28237486<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified:<br class="gmail_msg">
lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp?rev=283160&r1=283159&r2=283160&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp?rev=283160&r1=283159&r2=283160&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp (original)<br class="gmail_msg">
+++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp Mon Oct 3 18:33:00 2016<br class="gmail_msg">
@@ -39,21 +39,21 @@ public:<br class="gmail_msg">
static ConstString g_left("__left_");<br class="gmail_msg">
if (!m_entry_sp)<br class="gmail_msg">
return m_entry_sp;<br class="gmail_msg">
- return m_entry_sp->GetChildMemberWithName(g_left, true);<br class="gmail_msg">
+ return m_entry_sp->GetSyntheticChildAtOffset(0, m_entry_sp->GetCompilerType(), true);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
ValueObjectSP right() const {<br class="gmail_msg">
static ConstString g_right("__right_");<br class="gmail_msg">
if (!m_entry_sp)<br class="gmail_msg">
return m_entry_sp;<br class="gmail_msg">
- return m_entry_sp->GetChildMemberWithName(g_right, true);<br class="gmail_msg">
+ return m_entry_sp->GetSyntheticChildAtOffset(m_entry_sp->GetProcessSP()->GetAddressByteSize(), m_entry_sp->GetCompilerType(), true);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
ValueObjectSP parent() const {<br class="gmail_msg">
static ConstString g_parent("__parent_");<br class="gmail_msg">
if (!m_entry_sp)<br class="gmail_msg">
return m_entry_sp;<br class="gmail_msg">
- return m_entry_sp->GetChildMemberWithName(g_parent, true);<br class="gmail_msg">
+ return m_entry_sp->GetSyntheticChildAtOffset(2*m_entry_sp->GetProcessSP()->GetAddressByteSize(), m_entry_sp->GetCompilerType(), true);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
uint64_t value() const {<br class="gmail_msg">
@@ -231,6 +231,8 @@ size_t lldb_private::formatters::LibcxxS<br class="gmail_msg">
<br class="gmail_msg">
bool lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetDataType() {<br class="gmail_msg">
static ConstString g___value_("__value_");<br class="gmail_msg">
+ static ConstString g_tree_("__tree_");<br class="gmail_msg">
+ static ConstString g_pair3("__pair3_");<br class="gmail_msg">
<br class="gmail_msg">
if (m_element_type.GetOpaqueQualType() && m_element_type.GetTypeSystem())<br class="gmail_msg">
return true;<br class="gmail_msg">
@@ -241,10 +243,21 @@ bool lldb_private::formatters::LibcxxStd<br class="gmail_msg">
if (!deref || error.Fail())<br class="gmail_msg">
return false;<br class="gmail_msg">
deref = deref->GetChildMemberWithName(g___value_, true);<br class="gmail_msg">
+ if (deref) {<br class="gmail_msg">
+ m_element_type = deref->GetCompilerType();<br class="gmail_msg">
+ return true;<br class="gmail_msg">
+ }<br class="gmail_msg">
+ lldb::TemplateArgumentKind kind;<br class="gmail_msg">
+ deref = m_backend.GetChildAtNamePath( {g_tree_, g_pair3} );<br class="gmail_msg">
if (!deref)<br class="gmail_msg">
return false;<br class="gmail_msg">
- m_element_type = deref->GetCompilerType();<br class="gmail_msg">
- return true;<br class="gmail_msg">
+ m_element_type = deref->GetCompilerType().GetTemplateArgument(1, kind).GetTemplateArgument(1, kind);<br class="gmail_msg">
+ if (!m_element_type)<br class="gmail_msg">
+ return false;<br class="gmail_msg">
+ std::string name; uint64_t bit_offset_ptr; uint32_t bitfield_bit_size_ptr; bool is_bitfield_ptr;<br class="gmail_msg">
+ m_element_type = m_element_type.GetFieldAtIndex(0, name, &bit_offset_ptr, &bitfield_bit_size_ptr, &is_bitfield_ptr);<br class="gmail_msg">
+ m_element_type = m_element_type.GetTypedefedType();<br class="gmail_msg">
+ return m_element_type.IsValid();<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
void lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetValueOffset(<br class="gmail_msg">
@@ -255,10 +268,32 @@ void lldb_private::formatters::LibcxxStd<br class="gmail_msg">
return;<br class="gmail_msg">
CompilerType node_type(node->GetCompilerType());<br class="gmail_msg">
uint64_t bit_offset;<br class="gmail_msg">
- if (node_type.GetIndexOfFieldWithName("__value_", nullptr, &bit_offset) ==<br class="gmail_msg">
- UINT32_MAX)<br class="gmail_msg">
- return;<br class="gmail_msg">
- m_skip_size = bit_offset / 8u;<br class="gmail_msg">
+ if (node_type.GetIndexOfFieldWithName("__value_", nullptr, &bit_offset) !=<br class="gmail_msg">
+ UINT32_MAX) {<br class="gmail_msg">
+ m_skip_size = bit_offset / 8u;<br class="gmail_msg">
+ }<br class="gmail_msg">
+ else {<br class="gmail_msg">
+ ClangASTContext *ast_ctx = llvm::dyn_cast_or_null<ClangASTContext>(node_type.GetTypeSystem());<br class="gmail_msg">
+ if (!ast_ctx)<br class="gmail_msg">
+ return;<br class="gmail_msg">
+ CompilerType tree_node_type = ast_ctx->CreateStructForIdentifier(ConstString(), {<br class="gmail_msg">
+ {"ptr0",ast_ctx->GetBasicType(lldb::eBasicTypeVoid).GetPointerType()},<br class="gmail_msg">
+ {"ptr1",ast_ctx->GetBasicType(lldb::eBasicTypeVoid).GetPointerType()},<br class="gmail_msg">
+ {"ptr2",ast_ctx->GetBasicType(lldb::eBasicTypeVoid).GetPointerType()},<br class="gmail_msg">
+ {"cw",ast_ctx->GetBasicType(lldb::eBasicTypeBool)},<br class="gmail_msg">
+ {"payload",m_element_type}<br class="gmail_msg">
+ });<br class="gmail_msg">
+ std::string child_name;<br class="gmail_msg">
+ uint32_t child_byte_size;<br class="gmail_msg">
+ int32_t child_byte_offset = 0;<br class="gmail_msg">
+ uint32_t child_bitfield_bit_size;<br class="gmail_msg">
+ uint32_t child_bitfield_bit_offset;<br class="gmail_msg">
+ bool child_is_base_class;<br class="gmail_msg">
+ bool child_is_deref_of_parent;<br class="gmail_msg">
+ uint64_t language_flags;<br class="gmail_msg">
+ if (tree_node_type.GetChildCompilerTypeAtIndex(nullptr, 4, true, true, true, child_name, child_byte_size, child_byte_offset, child_bitfield_bit_size, child_bitfield_bit_offset, child_is_base_class, child_is_deref_of_parent, nullptr, language_flags).IsValid())<br class="gmail_msg">
+ m_skip_size = (uint32_t)child_byte_offset;<br class="gmail_msg">
+ }<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
lldb::ValueObjectSP<br class="gmail_msg">
@@ -301,7 +336,12 @@ lldb_private::formatters::LibcxxStdMapSy<br class="gmail_msg">
return lldb::ValueObjectSP();<br class="gmail_msg">
}<br class="gmail_msg">
GetValueOffset(iterated_sp);<br class="gmail_msg">
- iterated_sp = iterated_sp->GetChildMemberWithName(g___value_, true);<br class="gmail_msg">
+ auto child_sp = iterated_sp->GetChildMemberWithName(g___value_, true);<br class="gmail_msg">
+ if (child_sp)<br class="gmail_msg">
+ iterated_sp = child_sp;<br class="gmail_msg">
+ else<br class="gmail_msg">
+ iterated_sp = iterated_sp->GetSyntheticChildAtOffset(<br class="gmail_msg">
+ m_skip_size, m_element_type, true);<br class="gmail_msg">
if (!iterated_sp) {<br class="gmail_msg">
m_tree = nullptr;<br class="gmail_msg">
return lldb::ValueObjectSP();<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
lldb-commits mailing list<br class="gmail_msg">
<a href="mailto:lldb-commits@lists.llvm.org" class="gmail_msg" target="_blank">lldb-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br class="gmail_msg">
</blockquote></div>