116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//===-- SBTypeCategory.cpp ----------------------------------------*- C++ -*-===// 216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// 316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// The LLVM Compiler Infrastructure 416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// 516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// This file is distributed under the University of Illinois Open Source 616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// License. See LICENSE.TXT for details. 716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata// 816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//===----------------------------------------------------------------------===// 916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 10d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea#include "lldb/lldb-python.h" 11d891f9b872103235cfd2ed452c6f14a4394d9b3aDaniel Malea 1216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeCategory.h" 1316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 1416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeFilter.h" 1516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeFormat.h" 1616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeSummary.h" 1716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeSynthetic.h" 1816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBTypeNameSpecifier.h" 1916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBStream.h" 2016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 2116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/Core/Debugger.h" 22f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/DataVisualization.h" 2316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/Interpreter/CommandInterpreter.h" 2416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/Interpreter/ScriptInterpreter.h" 2516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 2616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb; 2716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb_private; 2816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 2916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatatypedef std::pair<lldb::TypeCategoryImplSP,user_id_t> ImplType; 3016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 3116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SBTypeCategory() : 3216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp() 3316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 3416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 3516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 3616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SBTypeCategory (const char* name) : 3716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp() 3816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 3916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DataVisualization::Categories::GetCategory(ConstString(name), m_opaque_sp); 4016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 4116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 4216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SBTypeCategory (const lldb::SBTypeCategory &rhs) : 4316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(rhs.m_opaque_sp) 4416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 4516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 4616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 4716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::~SBTypeCategory () 4816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 4916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 5016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 5116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 5216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::IsValid() const 5316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 5416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return (m_opaque_sp.get() != NULL); 5516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 5616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 5716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 5816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetEnabled () 5916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 6016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 6116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 6216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->IsEnabled(); 6316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 6416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 6516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid 6616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SetEnabled (bool enabled) 6716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 6816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 6916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return; 7016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (enabled) 7116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DataVisualization::Categories::Enable(m_opaque_sp); 7216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 7316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DataVisualization::Categories::Disable(m_opaque_sp); 7416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 7516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 7616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granataconst char* 7716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetName() 7816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 7916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 80f5dc0fc131b0a4350a0a19a32013088ec41cfeeaJason Molenda return NULL; 8116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetName(); 8216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 8316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 8416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatauint32_t 8516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetNumFormats () 8616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 8716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 8816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return 0; 8916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 9016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return DataVisualization::ValueFormats::GetCount(); 9116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 9216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 9316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatauint32_t 9416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetNumSummaries () 9516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 9616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 9716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return 0; 9816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetSummaryNavigator()->GetCount() + m_opaque_sp->GetRegexSummaryNavigator()->GetCount(); 9916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 10016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 10116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatauint32_t 10216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetNumFilters () 10316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 10416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 10516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return 0; 10616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetFilterNavigator()->GetCount() + m_opaque_sp->GetRegexFilterNavigator()->GetCount(); 10716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 10816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 109c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 11016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatauint32_t 11116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetNumSynthetics () 11216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 11316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 11416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return 0; 11516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetSyntheticNavigator()->GetCount() + m_opaque_sp->GetRegexSyntheticNavigator()->GetCount(); 11616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 117c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 11816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 11916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeNameSpecifier 12016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetTypeNameSpecifierForFilterAtIndex (uint32_t index) 12116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 12216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 12316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(); 12416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(m_opaque_sp->GetTypeNameSpecifierForFilterAtIndex(index)); 12516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 12616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 12716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeNameSpecifier 12816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetTypeNameSpecifierForFormatAtIndex (uint32_t index) 12916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 13016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 13116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(); 13216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(DataVisualization::ValueFormats::GetTypeNameSpecifierForFormatAtIndex(index)); 13316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 13416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 13516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeNameSpecifier 13616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetTypeNameSpecifierForSummaryAtIndex (uint32_t index) 13716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 13816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 13916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(); 14016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(m_opaque_sp->GetTypeNameSpecifierForSummaryAtIndex(index)); 14116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 14216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 143c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 14416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeNameSpecifier 14516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetTypeNameSpecifierForSyntheticAtIndex (uint32_t index) 14616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 14716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 14816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(); 14916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeNameSpecifier(m_opaque_sp->GetTypeNameSpecifierForSyntheticAtIndex(index)); 15016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 151c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 15216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 15316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFilter 15416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetFilterForType (SBTypeNameSpecifier spec) 15516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 15616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 15716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFilter(); 15816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 15916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!spec.IsValid()) 16016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFilter(); 16116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 16216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::SyntheticChildrenSP children_sp; 16316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 16416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (spec.IsRegex()) 16516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexFilterNavigator()->GetExact(ConstString(spec.GetName()), children_sp); 16616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 16716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetFilterNavigator()->GetExact(ConstString(spec.GetName()), children_sp); 16816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 16916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!children_sp) 17016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeFilter(); 17116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 172102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton TypeFilterImplSP filter_sp = std::static_pointer_cast<TypeFilterImpl>(children_sp); 17316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 17416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeFilter(filter_sp); 17516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 17616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 17716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat 17816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetFormatForType (SBTypeNameSpecifier spec) 17916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 18016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 18116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(); 18216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 18316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!spec.IsValid()) 18416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(); 18516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 18616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (spec.IsRegex()) 18716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(); 18816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 18916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(DataVisualization::ValueFormats::GetFormat(ConstString(spec.GetName()))); 19016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 19116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 192c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 19316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeSummary 19416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetSummaryForType (SBTypeNameSpecifier spec) 19516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 19616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 19716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSummary(); 19816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 19916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!spec.IsValid()) 20016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSummary(); 20116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 20216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::TypeSummaryImplSP summary_sp; 20316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 20416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (spec.IsRegex()) 20516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexSummaryNavigator()->GetExact(ConstString(spec.GetName()), summary_sp); 20616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 20716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetSummaryNavigator()->GetExact(ConstString(spec.GetName()), summary_sp); 20816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 20916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!summary_sp) 21016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSummary(); 21116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 21216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSummary(summary_sp); 21316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 214c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif // LLDB_DISABLE_PYTHON 21516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 216c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 21716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeSynthetic 21816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetSyntheticForType (SBTypeNameSpecifier spec) 21916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 22016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 22116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSynthetic(); 22216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 22316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!spec.IsValid()) 22416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSynthetic(); 22516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 22616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::SyntheticChildrenSP children_sp; 22716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 22816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (spec.IsRegex()) 22916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexSyntheticNavigator()->GetExact(ConstString(spec.GetName()), children_sp); 23016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 23116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetSyntheticNavigator()->GetExact(ConstString(spec.GetName()), children_sp); 23216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 23316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!children_sp) 23416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSynthetic(); 23516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 236102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton ScriptedSyntheticChildrenSP synth_sp = std::static_pointer_cast<ScriptedSyntheticChildren>(children_sp); 23716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 23816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSynthetic(synth_sp); 23916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 240c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 24116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 242c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 24316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFilter 24416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetFilterAtIndex (uint32_t index) 24516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 24616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 24716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFilter(); 24816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::SyntheticChildrenSP children_sp = m_opaque_sp->GetSyntheticAtIndex((index)); 24916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 25016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!children_sp.get()) 25116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeFilter(); 25216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 253102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton TypeFilterImplSP filter_sp = std::static_pointer_cast<TypeFilterImpl>(children_sp); 25416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 25516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeFilter(filter_sp); 25616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 257c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 25816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 25916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeFormat 26016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetFormatAtIndex (uint32_t index) 26116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 26216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 26316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(); 26416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeFormat(DataVisualization::ValueFormats::GetFormatAtIndex((index))); 26516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 26616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 267c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 26816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeSummary 26916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetSummaryAtIndex (uint32_t index) 27016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 27116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 27216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSummary(); 27316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSummary(m_opaque_sp->GetSummaryAtIndex((index))); 27416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 275c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 27616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 277c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 27816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeSynthetic 27916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetSyntheticAtIndex (uint32_t index) 28016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 28116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 28216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return SBTypeSynthetic(); 28316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::SyntheticChildrenSP children_sp = m_opaque_sp->GetSyntheticAtIndex((index)); 28416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 28516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!children_sp.get()) 28616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSynthetic(); 28716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 288102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton ScriptedSyntheticChildrenSP synth_sp = std::static_pointer_cast<ScriptedSyntheticChildren>(children_sp); 28916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 29016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::SBTypeSynthetic(synth_sp); 29116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 292c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 29316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 29416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 29516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::AddTypeFormat (SBTypeNameSpecifier type_name, 29616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata SBTypeFormat format) 29716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 29816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 29916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 30016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 30116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 30216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 30316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 30416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!format.IsValid()) 30516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 30616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 30716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 30816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 30916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 31016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DataVisualization::ValueFormats::Add(ConstString(type_name.GetName()), format.GetSP()); 31116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 31216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return true; 31316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 31416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 31516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 31616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::DeleteTypeFormat (SBTypeNameSpecifier type_name) 31716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 31816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsDefaultCategory()) 31916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 32016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 32116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 32216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 32316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 32416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 32516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 32616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 32716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return DataVisualization::ValueFormats::Delete(ConstString(type_name.GetName())); 32816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 32916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 330c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 33116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 33216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::AddTypeSummary (SBTypeNameSpecifier type_name, 33316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata SBTypeSummary summary) 33416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 33516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 33616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 33716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 33816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 33916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 34016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 34116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!summary.IsValid()) 34216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 34316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 34416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // FIXME: we need to iterate over all the Debugger objects and have each of them contain a copy of the function 34516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // since we currently have formatters live in a global space, while Python code lives in a specific Debugger-related environment 34616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // this should eventually be fixed by deciding a final location in the LLDB object space for formatters 34716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (summary.IsFunctionCode()) 34816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 34916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata void *name_token = (void*)ConstString(type_name.GetName()).GetCString(); 35016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata const char* script = summary.GetData(); 35116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata StringList input; input.SplitIntoLines(script, strlen(script)); 35216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata uint32_t num_debuggers = lldb_private::Debugger::GetNumDebuggers(); 35316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata bool need_set = true; 35416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata for (uint32_t j = 0; 35516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata j < num_debuggers; 35616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata j++) 35716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 35816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DebuggerSP debugger_sp = lldb_private::Debugger::GetDebuggerAtIndex(j); 35916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (debugger_sp) 36016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 36116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata ScriptInterpreter* interpreter_ptr = debugger_sp->GetCommandInterpreter().GetScriptInterpreter(); 36216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (interpreter_ptr) 36316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 364400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata std::string output; 365400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata if (interpreter_ptr->GenerateTypeScriptFunction(input, output, name_token) && !output.empty()) 36616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 36716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (need_set) 36816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 36916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata need_set = false; 370400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata summary.SetFunctionName(output.c_str()); 37116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 37716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 37816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 37916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexSummaryNavigator()->Add(lldb::RegularExpressionSP(new RegularExpression(type_name.GetName())), summary.GetSP()); 38016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 38116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetSummaryNavigator()->Add(ConstString(type_name.GetName()), summary.GetSP()); 38216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 38316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return true; 38416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 385c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif 38616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 38716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 38816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::DeleteTypeSummary (SBTypeNameSpecifier type_name) 38916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 39016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 39116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 39216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 39316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 39416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 39516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 39616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 39716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetRegexSummaryNavigator()->Delete(ConstString(type_name.GetName())); 39816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 39916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetSummaryNavigator()->Delete(ConstString(type_name.GetName())); 40016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 40116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 40216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 40316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::AddTypeFilter (SBTypeNameSpecifier type_name, 40416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata SBTypeFilter filter) 40516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 40616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 40716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 40816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 40916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 41016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 41116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 41216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!filter.IsValid()) 41316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 41416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 41516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 41616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexFilterNavigator()->Add(lldb::RegularExpressionSP(new RegularExpression(type_name.GetName())), filter.GetSP()); 41716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 41816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetFilterNavigator()->Add(ConstString(type_name.GetName()), filter.GetSP()); 41916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 42016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return true; 42116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 42216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 42316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 42416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::DeleteTypeFilter (SBTypeNameSpecifier type_name) 42516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 42616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 42716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 42816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 42916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 43016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 43116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 43216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 43316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetRegexFilterNavigator()->Delete(ConstString(type_name.GetName())); 43416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 43516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetFilterNavigator()->Delete(ConstString(type_name.GetName())); 43616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 43716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 438c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#ifndef LLDB_DISABLE_PYTHON 43916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 44016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::AddTypeSynthetic (SBTypeNameSpecifier type_name, 44116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata SBTypeSynthetic synth) 44216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 44316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 44416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 44516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 44616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 44716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 44816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 44916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!synth.IsValid()) 45016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 45116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 45216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // FIXME: we need to iterate over all the Debugger objects and have each of them contain a copy of the function 45316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // since we currently have formatters live in a global space, while Python code lives in a specific Debugger-related environment 45416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata // this should eventually be fixed by deciding a final location in the LLDB object space for formatters 45516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (synth.IsClassCode()) 45616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 45716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata void *name_token = (void*)ConstString(type_name.GetName()).GetCString(); 45816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata const char* script = synth.GetData(); 45916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata StringList input; input.SplitIntoLines(script, strlen(script)); 46016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata uint32_t num_debuggers = lldb_private::Debugger::GetNumDebuggers(); 46116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata bool need_set = true; 46216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata for (uint32_t j = 0; 46316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata j < num_debuggers; 46416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata j++) 46516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 46616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata DebuggerSP debugger_sp = lldb_private::Debugger::GetDebuggerAtIndex(j); 46716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (debugger_sp) 46816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 46916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata ScriptInterpreter* interpreter_ptr = debugger_sp->GetCommandInterpreter().GetScriptInterpreter(); 47016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (interpreter_ptr) 47116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 472400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata std::string output; 473400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata if (interpreter_ptr->GenerateTypeSynthClass(input, output, name_token) && !output.empty()) 47416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 47516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (need_set) 47616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 47716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata need_set = false; 478400105dd92731a0c8968d6296b0b7279b483ebf0Enrico Granata synth.SetClassName(output.c_str()); 47916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 48516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 48616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 48716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetRegexSyntheticNavigator()->Add(lldb::RegularExpressionSP(new RegularExpression(type_name.GetName())), synth.GetSP()); 48816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 48916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp->GetSyntheticNavigator()->Add(ConstString(type_name.GetName()), synth.GetSP()); 49016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 49116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return true; 49216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 49316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 49416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 49516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::DeleteTypeSynthetic (SBTypeNameSpecifier type_name) 49616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 49716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 49816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 49916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 50016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!type_name.IsValid()) 50116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 50216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 50316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (type_name.IsRegex()) 50416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetRegexSyntheticNavigator()->Delete(ConstString(type_name.GetName())); 50516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata else 50616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp->GetSyntheticNavigator()->Delete(ConstString(type_name.GetName())); 50716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 508c48ca82920bd333c7ccb6ec0e579207add130296Jason Molenda#endif // LLDB_DISABLE_PYTHON 50916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 51016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 51116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetDescription (lldb::SBStream &description, 51216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata lldb::DescriptionLevel description_level) 51316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 51416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 51516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 51616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata description.Printf("Category name: %s\n",GetName()); 51716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return true; 51816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 51916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 52016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeCategory & 52116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::operator = (const lldb::SBTypeCategory &rhs) 52216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 52316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (this != &rhs) 52416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata { 52516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp = rhs.m_opaque_sp; 52616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata } 52716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return *this; 52816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 52916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 53016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 53116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::operator == (lldb::SBTypeCategory &rhs) 53216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 53316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (IsValid() == false) 53416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return !rhs.IsValid(); 53516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 53616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp.get() == rhs.m_opaque_sp.get(); 53716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 53816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 53916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 54016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 54116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::operator != (lldb::SBTypeCategory &rhs) 54216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 54316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (IsValid() == false) 54416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return rhs.IsValid(); 54516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 54616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp.get() != rhs.m_opaque_sp.get(); 54716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 54816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 54916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::TypeCategoryImplSP 55016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::GetSP () 55116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 55216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 55316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return lldb::TypeCategoryImplSP(); 55416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return m_opaque_sp; 55516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 55616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 55716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid 55816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SetSP (const lldb::TypeCategoryImplSP &typecategory_impl_sp) 55916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 56016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata m_opaque_sp = typecategory_impl_sp; 56116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 56216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 56316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::SBTypeCategory (const lldb::TypeCategoryImplSP &typecategory_impl_sp) : 56416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(typecategory_impl_sp) 56516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 56616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 56716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 56816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool 56916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeCategory::IsDefaultCategory() 57016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{ 57116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata if (!IsValid()) 57216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return false; 57316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 57416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata return (strcmp(m_opaque_sp->GetName(),"default") == 0); 57516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata} 57616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata 577