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