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