116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata//===-- SBTypeNameSpecifier.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/SBTypeNameSpecifier.h"
1316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
1416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata#include "lldb/API/SBStream.h"
15d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata#include "lldb/API/SBType.h"
1616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
17f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/DataVisualization.h"
1816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
1916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb;
2016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatausing namespace lldb_private;
2116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
2216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::SBTypeNameSpecifier() :
2316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp()
2416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
2516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
2616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
2716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::SBTypeNameSpecifier (const char* name,
2816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata                                          bool is_regex) :
2916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(new TypeNameSpecifierImpl(name, is_regex))
3016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
3116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (name == NULL || (*name) == 0)
3216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        m_opaque_sp.reset();
3316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
3416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
35d760907c1d42726fa0c8c48efa28385ed339bb94Enrico GranataSBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) :
36d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granatam_opaque_sp()
37d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata{
38d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    if (type.IsValid())
39d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata        m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType()));
40d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata}
41d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
4216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) :
4316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(rhs.m_opaque_sp)
4416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{}
4516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
4616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::~SBTypeNameSpecifier ()
4716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
4816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
4916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
5016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
5116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::IsValid() const
5216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
5316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp.get() != NULL;
5416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
5516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
5616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granataconst char*
5716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::GetName ()
5816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
5916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (!IsValid())
6016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return NULL;
6116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
6216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp->GetName();
6316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
6416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
65d760907c1d42726fa0c8c48efa28385ed339bb94Enrico GranataSBType
66d760907c1d42726fa0c8c48efa28385ed339bb94Enrico GranataSBTypeNameSpecifier::GetType ()
67d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata{
68d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    if (!IsValid())
69d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata        return SBType();
70d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb_private::ClangASTType c_type = m_opaque_sp->GetClangASTType();
71d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    if (c_type.IsValid())
72d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata        return SBType(c_type);
73d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    return SBType();
74d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata}
75d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
7616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
7716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::IsRegex ()
7816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
7916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (!IsValid())
8016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
8116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
8216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp->IsRegex();
8316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
8416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
8516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
8616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::GetDescription (lldb::SBStream &description,
8716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata                                     lldb::DescriptionLevel description_level)
8816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
8916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (!IsValid())
9016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
9116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    description.Printf("SBTypeNameSpecifier(%s,%s)", GetName(), IsRegex() ? "regex" : "plain");
9216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return true;
9316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
9416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
9516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::SBTypeNameSpecifier &
9616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::operator = (const lldb::SBTypeNameSpecifier &rhs)
9716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
9816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (this != &rhs)
9916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    {
10016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        m_opaque_sp = rhs.m_opaque_sp;
10116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    }
10216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return *this;
10316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
10416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
10516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
10616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::operator == (lldb::SBTypeNameSpecifier &rhs)
10716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
10816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
10916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
11016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp == rhs.m_opaque_sp;
11116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
11216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
11316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
11416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::IsEqualTo (lldb::SBTypeNameSpecifier &rhs)
11516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
11616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
11716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
11816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
11916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsRegex() != rhs.IsRegex())
12016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return false;
1216f01c93497df194b6f2194630a81e87d806ce0e0Jim Ingham    if (GetName() == NULL || rhs.GetName() == NULL)
1226f01c93497df194b6f2194630a81e87d806ce0e0Jim Ingham        return false;
12316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
12416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return (strcmp(GetName(), rhs.GetName()) == 0);
12516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
12616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
12716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatabool
12816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::operator != (lldb::SBTypeNameSpecifier &rhs)
12916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
13016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    if (IsValid() == false)
13116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata        return !rhs.IsValid();
13216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp != rhs.m_opaque_sp;
13316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
13416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
13516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatalldb::TypeNameSpecifierImplSP
13616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::GetSP ()
13716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
13816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    return m_opaque_sp;
13916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
14016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
14116376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatavoid
14216376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::SetSP (const lldb::TypeNameSpecifierImplSP &type_namespec_sp)
14316376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
14416376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata    m_opaque_sp = type_namespec_sp;
14516376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
14616376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata
14716376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico GranataSBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) :
14816376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granatam_opaque_sp(type_namespec_sp)
14916376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata{
15016376ed044df3ee70fcf69e19f06af01e71a8e9aEnrico Granata}
151