]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/API/SBTypeNameSpecifier.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / API / SBTypeNameSpecifier.cpp
1 //===-- SBTypeNameSpecifier.cpp ------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "lldb/lldb-python.h"
11
12 #include "lldb/API/SBTypeNameSpecifier.h"
13
14 #include "lldb/API/SBStream.h"
15 #include "lldb/API/SBType.h"
16
17 #include "lldb/DataFormatters/DataVisualization.h"
18
19 using namespace lldb;
20 using namespace lldb_private;
21
22 SBTypeNameSpecifier::SBTypeNameSpecifier() :
23 m_opaque_sp()
24 {
25 }
26
27 SBTypeNameSpecifier::SBTypeNameSpecifier (const char* name,
28                                           bool is_regex) :
29 m_opaque_sp(new TypeNameSpecifierImpl(name, is_regex))
30 {
31     if (name == NULL || (*name) == 0)
32         m_opaque_sp.reset();
33 }
34
35 SBTypeNameSpecifier::SBTypeNameSpecifier (SBType type) :
36 m_opaque_sp()
37 {
38     if (type.IsValid())
39         m_opaque_sp = TypeNameSpecifierImplSP(new TypeNameSpecifierImpl(type.m_opaque_sp->GetClangASTType()));
40 }
41
42 SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::SBTypeNameSpecifier &rhs) :
43 m_opaque_sp(rhs.m_opaque_sp)
44 {}
45
46 SBTypeNameSpecifier::~SBTypeNameSpecifier ()
47 {
48 }
49
50 bool
51 SBTypeNameSpecifier::IsValid() const
52 {
53     return m_opaque_sp.get() != NULL;
54 }
55
56 const char*
57 SBTypeNameSpecifier::GetName ()
58 {
59     if (!IsValid())
60         return NULL;
61     
62     return m_opaque_sp->GetName();
63 }
64
65 SBType
66 SBTypeNameSpecifier::GetType ()
67 {
68     if (!IsValid())
69         return SBType();
70     lldb_private::ClangASTType c_type = m_opaque_sp->GetClangASTType();
71     if (c_type.IsValid())
72         return SBType(c_type);
73     return SBType();
74 }
75
76 bool
77 SBTypeNameSpecifier::IsRegex ()
78 {
79     if (!IsValid())
80         return false;
81
82     return m_opaque_sp->IsRegex();
83 }
84
85 bool
86 SBTypeNameSpecifier::GetDescription (lldb::SBStream &description, 
87                                      lldb::DescriptionLevel description_level)
88 {
89     if (!IsValid())
90         return false;
91     description.Printf("SBTypeNameSpecifier(%s,%s)", GetName(), IsRegex() ? "regex" : "plain");
92     return true;
93 }
94
95 lldb::SBTypeNameSpecifier &
96 SBTypeNameSpecifier::operator = (const lldb::SBTypeNameSpecifier &rhs)
97 {
98     if (this != &rhs)
99     {
100         m_opaque_sp = rhs.m_opaque_sp;
101     }
102     return *this;
103 }
104
105 bool
106 SBTypeNameSpecifier::operator == (lldb::SBTypeNameSpecifier &rhs)
107 {
108     if (IsValid() == false)
109         return !rhs.IsValid();
110     return m_opaque_sp == rhs.m_opaque_sp;
111 }
112
113 bool
114 SBTypeNameSpecifier::IsEqualTo (lldb::SBTypeNameSpecifier &rhs)
115 {
116     if (IsValid() == false)
117         return !rhs.IsValid();
118     
119     if (IsRegex() != rhs.IsRegex())
120         return false;
121     if (GetName() == NULL || rhs.GetName() == NULL)
122         return false;
123     
124     return (strcmp(GetName(), rhs.GetName()) == 0);
125 }
126
127 bool
128 SBTypeNameSpecifier::operator != (lldb::SBTypeNameSpecifier &rhs)
129 {
130     if (IsValid() == false)
131         return !rhs.IsValid();
132     return m_opaque_sp != rhs.m_opaque_sp;
133 }
134
135 lldb::TypeNameSpecifierImplSP
136 SBTypeNameSpecifier::GetSP ()
137 {
138     return m_opaque_sp;
139 }
140
141 void
142 SBTypeNameSpecifier::SetSP (const lldb::TypeNameSpecifierImplSP &type_namespec_sp)
143 {
144     m_opaque_sp = type_namespec_sp;
145 }
146
147 SBTypeNameSpecifier::SBTypeNameSpecifier (const lldb::TypeNameSpecifierImplSP &type_namespec_sp) :
148 m_opaque_sp(type_namespec_sp)
149 {
150 }