[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
tberghammer added a comment. Sorry, I missed that part. I just submitted r284831 what should fix the header order for both case. Repository: rL LLVM https://reviews.llvm.org/D25733 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
This revision was automatically updated to reflect the committed changes. Closed by commit rL284829: Add data formatter for libstdc++ tuple (authored by tberghammer). Changed prior to commit: https://reviews.llvm.org/D25733?vs=75417&id=75433#toc Repository: rL LLVM https://reviews.llvm.org/D25733 Files: lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/CMakeLists.txt lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcpp.h lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp Index: lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp === --- lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ lldb/trunk/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -811,6 +811,11 @@ lldb_private::formatters::LibStdcppSharedPtrSyntheticFrontEndCreator, "std::weak_ptr synthetic children", ConstString("^std::weak_ptr<.+>(( )?&)?$"), stl_synth_flags, true); + AddCXXSynthetic( + cpp_category_sp, + lldb_private::formatters::LibStdcppTupleSyntheticFrontEndCreator, + "std::tuple synthetic children", ConstString("^std::tuple<.+>(( )?&)?$"), + stl_synth_flags, true); AddCXXSummary(cpp_category_sp, lldb_private::formatters::LibStdcppSmartPointerSummaryProvider, Index: lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp === --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -0,0 +1,109 @@ +//===-- LibStdcppTuple.cpp --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "LibStdcpp.h" + +#include +#include + +#include "lldb/Core/ConstString.h" +#include "lldb/Core/ValueObject.h" +#include "lldb/DataFormatters/FormattersHelpers.h" +#include "lldb/DataFormatters/TypeSynthetic.h" + +using namespace lldb; +using namespace lldb_private; +using namespace lldb_private::formatters; + +namespace { + +class LibStdcppTupleSyntheticFrontEnd : public SyntheticChildrenFrontEnd { +public: + explicit LibStdcppTupleSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); + + size_t CalculateNumChildren() override; + + lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; + + bool Update() override; + + bool MightHaveChildren() override; + + size_t GetIndexOfChildWithName(const ConstString &name) override; + +private: + std::vector m_members; +}; + +} // end of anonymous namespace + +LibStdcppTupleSyntheticFrontEnd::LibStdcppTupleSyntheticFrontEnd( +lldb::ValueObjectSP valobj_sp) +: SyntheticChildrenFrontEnd(*valobj_sp) { + Update(); +} + +bool LibStdcppTupleSyntheticFrontEnd::Update() { + m_members.clear(); + + ValueObjectSP valobj_backend_sp = m_backend.GetSP(); + if (!valobj_backend_sp) +return false; + + ValueObjectSP next_child_sp = valobj_backend_sp->GetNonSyntheticValue(); + while (next_child_sp != nullptr) { +ValueObjectSP current_child = next_child_sp; +next_child_sp = nullptr; + +size_t child_count = current_child->GetNumChildren(); +for (size_t i = 0; i < child_count; ++i) { + ValueObjectSP child_sp = current_child->GetChildAtIndex(i, true); + llvm::StringRef name_str = child_sp->GetName().GetStringRef(); + if (name_str.startswith("std::_Tuple_impl<")) { +next_child_sp = child_sp; + } else if (name_str.startswith("std::_Head_base<")) { +ValueObjectSP value_sp = +child_sp->GetChildMemberWithName(ConstString("_M_head_impl"), true); +if (value_sp) { + StreamString name; + name.Printf("[%zd]", m_members.size()); + value_sp->SetName(ConstString(name.GetData())); + + m_members.push_back(value_sp); +} + } +} + } + + return false; +} + +bool LibStdcppTupleSyntheticFrontEnd::MightHaveChildren() { return true; } + +lldb::ValueObjectSP +LibStdcppTupleSyntheticFrontEnd::GetChildAtIndex(size_t idx) { + if (idx < m_members.size()) +return m_members[idx]; + return lldb::ValueObjectSP(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { + return m_members.size(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::GetIndex
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
Eugene.Zelenko added a comment. Headers orders is still not correct. Repository: rL LLVM https://reviews.llvm.org/D25733 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
tberghammer updated this revision to Diff 75417. tberghammer marked 4 inline comments as done. https://reviews.llvm.org/D25733 Files: packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp source/Plugins/Language/CPlusPlus/CMakeLists.txt source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp source/Plugins/Language/CPlusPlus/LibStdcpp.h source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp Index: source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp === --- /dev/null +++ source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -0,0 +1,109 @@ +//===-- LibStdcppTuple.cpp --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "LibStdcpp.h" + +#include +#include + +#include "lldb/Core/ConstString.h" +#include "lldb/Core/ValueObject.h" +#include "lldb/DataFormatters/FormattersHelpers.h" +#include "lldb/DataFormatters/TypeSynthetic.h" + +using namespace lldb; +using namespace lldb_private; +using namespace lldb_private::formatters; + +namespace { + +class LibStdcppTupleSyntheticFrontEnd : public SyntheticChildrenFrontEnd { +public: + explicit LibStdcppTupleSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); + + size_t CalculateNumChildren() override; + + lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; + + bool Update() override; + + bool MightHaveChildren() override; + + size_t GetIndexOfChildWithName(const ConstString &name) override; + +private: + std::vector m_members; +}; + +} // end of anonymous namespace + +LibStdcppTupleSyntheticFrontEnd::LibStdcppTupleSyntheticFrontEnd( +lldb::ValueObjectSP valobj_sp) +: SyntheticChildrenFrontEnd(*valobj_sp) { + Update(); +} + +bool LibStdcppTupleSyntheticFrontEnd::Update() { + m_members.clear(); + + ValueObjectSP valobj_backend_sp = m_backend.GetSP(); + if (!valobj_backend_sp) +return false; + + ValueObjectSP next_child_sp = valobj_backend_sp->GetNonSyntheticValue(); + while (next_child_sp != nullptr) { +ValueObjectSP current_child = next_child_sp; +next_child_sp = nullptr; + +size_t child_count = current_child->GetNumChildren(); +for (size_t i = 0; i < child_count; ++i) { + ValueObjectSP child_sp = current_child->GetChildAtIndex(i, true); + llvm::StringRef name_str = child_sp->GetName().GetStringRef(); + if (name_str.startswith("std::_Tuple_impl<")) { +next_child_sp = child_sp; + } else if (name_str.startswith("std::_Head_base<")) { +ValueObjectSP value_sp = +child_sp->GetChildMemberWithName(ConstString("_M_head_impl"), true); +if (value_sp) { + StreamString name; + name.Printf("[%zd]", m_members.size()); + value_sp->SetName(ConstString(name.GetData())); + + m_members.push_back(value_sp); +} + } +} + } + + return false; +} + +bool LibStdcppTupleSyntheticFrontEnd::MightHaveChildren() { return true; } + +lldb::ValueObjectSP +LibStdcppTupleSyntheticFrontEnd::GetChildAtIndex(size_t idx) { + if (idx < m_members.size()) +return m_members[idx]; + return lldb::ValueObjectSP(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { + return m_members.size(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName( +const ConstString &name) { + return ExtractIndexFromString(name.GetCString()); +} + +SyntheticChildrenFrontEnd * +lldb_private::formatters::LibStdcppTupleSyntheticFrontEndCreator( +CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) { + return (valobj_sp ? new LibStdcppTupleSyntheticFrontEnd(valobj_sp) : nullptr); +} Index: source/Plugins/Language/CPlusPlus/LibStdcpp.h === --- source/Plugins/Language/CPlusPlus/LibStdcpp.h +++ source/Plugins/Language/CPlusPlus/LibStdcpp.h @@ -36,6 +36,10 @@ lldb::ValueObjectSP); SyntheticChildrenFrontEnd * +LibStdcppTupleSyntheticFrontEndCreator(CXXSyntheticChildren *, + lldb::ValueObjectSP); + +SyntheticChildrenFrontEnd * LibStdcppVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *, lldb::ValueObjectSP); Index: source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp === --- source/Plugins/Language/CPlusPlus/CPlusPlusLanguag
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
labath added a comment. Just minor nits from my side. Comment at: packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile:5 + +CXXFLAGS := -O0 +USE_LIBSTDCPP := 1 I don't think this is necessary. Comment at: packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile:8 + +# clang-3.5+ outputs FullDebugInfo by default for Darwin/FreeBSD +# targets. Other targets do not, which causes this test to fail. Replace with `CFLAGS_EXTRAS += $(NO_LIMIT_DEBUG_INFO_FLAGS)` Comment at: source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp:58 + + ValueObjectSP valobj_sp = valobj_backend_sp->GetNonSyntheticValue(); + if (!valobj_sp) return false; Comment at: source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp:77 + StreamString name; + name.Printf("[%" PRIu64 "]", m_members.size()); + value_sp->SetName(ConstString(name.GetData())); You can use %z now. https://reviews.llvm.org/D25733 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
Eugene.Zelenko added a comment. There are same problems with formatting as in https://reviews.llvm.org/D25726. Also test case main() has wrong indentation. https://reviews.llvm.org/D25733 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D25733: Add data formatter for libstdc++ tuple
tberghammer created this revision. tberghammer added reviewers: labath, granata.enrico. tberghammer added a subscriber: lldb-commits. Herald added subscribers: mgorny, beanz. Add data formatter for libstdc++ tuple https://reviews.llvm.org/D25733 Files: packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/Makefile packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/TestDataFormatterStdTuple.py packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libstdcpp/tuple/main.cpp source/Plugins/Language/CPlusPlus/CMakeLists.txt source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp Index: source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp === --- /dev/null +++ source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -0,0 +1,110 @@ +//===-- LibStdcppTuple.cpp ---*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "LibStdcpp.h" + +#include +#include + +#include "lldb/Core/ConstString.h" +#include "lldb/Core/ValueObject.h" +#include "lldb/DataFormatters/FormattersHelpers.h" +#include "lldb/DataFormatters/TypeSynthetic.h" + +using namespace lldb; +using namespace lldb_private; +using namespace lldb_private::formatters; + +namespace { + +class LibStdcppTupleSyntheticFrontEnd : public SyntheticChildrenFrontEnd { + public: + explicit LibStdcppTupleSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); + + size_t CalculateNumChildren() override; + + lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; + + bool Update() override; + + bool MightHaveChildren() override; + + size_t GetIndexOfChildWithName(const ConstString &name) override; + + private: + std::vector m_members; +}; + +} // end of anonymous namespace + +LibStdcppTupleSyntheticFrontEnd::LibStdcppTupleSyntheticFrontEnd( +lldb::ValueObjectSP valobj_sp) +: SyntheticChildrenFrontEnd(*valobj_sp) { + Update(); +} + +bool LibStdcppTupleSyntheticFrontEnd::Update() { + m_members.clear(); + + ValueObjectSP valobj_backend_sp = m_backend.GetSP(); + if (!valobj_backend_sp) return false; + + ValueObjectSP valobj_sp = valobj_backend_sp->GetNonSyntheticValue(); + if (!valobj_sp) return false; + + ValueObjectSP next_child_sp = valobj_sp; + while (next_child_sp != nullptr) { +ValueObjectSP current_child = next_child_sp; +next_child_sp = nullptr; + +size_t child_count = current_child->GetNumChildren(); +for (size_t i = 0; i < child_count; ++i) { + ValueObjectSP child_sp = current_child->GetChildAtIndex(i, true); + llvm::StringRef name_str = child_sp->GetName().GetStringRef(); + if (name_str.startswith("std::_Tuple_impl<")) { +next_child_sp = child_sp; + } else if (name_str.startswith("std::_Head_base<")) { +ValueObjectSP value_sp = +child_sp->GetChildMemberWithName(ConstString("_M_head_impl"), true); +if (value_sp) { + StreamString name; + name.Printf("[%" PRIu64 "]", m_members.size()); + value_sp->SetName(ConstString(name.GetData())); + + m_members.push_back(value_sp); +} + } +} + } + + return false; +} + +bool LibStdcppTupleSyntheticFrontEnd::MightHaveChildren() { return true; } + +lldb::ValueObjectSP LibStdcppTupleSyntheticFrontEnd::GetChildAtIndex( +size_t idx) { + if (idx < m_members.size()) return m_members[idx]; + return lldb::ValueObjectSP(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { + return m_members.size(); +} + +size_t LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName( +const ConstString &name) { + return ExtractIndexFromString(name.GetCString()); +} + +SyntheticChildrenFrontEnd * +lldb_private::formatters::LibStdcppTupleSyntheticFrontEndCreator( +CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) { + return (valobj_sp ? new LibStdcppTupleSyntheticFrontEnd(valobj_sp) : nullptr); +} Index: source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp === --- source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -803,16 +803,31 @@ AddCXXSynthetic( cpp_category_sp, + lldb_private::formatters::LibStdcppUniquePtrSyntheticFrontEndCreator, + "std::unique_ptr synthetic children", + ConstString("^std::unique_ptr<.+>(( )?&)?$"), stl_synth_flags, true); + AddCXXSynthetic( + cpp_category_sp, lldb_private::formatters::LibStdcppSharedPtrSyntheticFrontEndCreator, "std::shared_ptr synthetic