124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBType.h ------------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBType_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBType_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass SBTypeList;
18ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton
19d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass SBTypeMember
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
22d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBTypeMember ();
23979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
24d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBTypeMember (const lldb::SBTypeMember& rhs);
25d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
26d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ~SBTypeMember();
277dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
28d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBTypeMember&
29d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator = (const lldb::SBTypeMember& rhs);
30d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
3198f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
32d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    IsValid() const;
33979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
34d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    const char *
35d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetName ();
36979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
37d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
38d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetType ();
39ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton
40d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint64_t
4196154be69fa240a662419183ed08e1cfc5418164Greg Clayton    GetOffsetInBytes();
4296154be69fa240a662419183ed08e1cfc5418164Greg Clayton
4396154be69fa240a662419183ed08e1cfc5418164Greg Clayton    uint64_t
4496154be69fa240a662419183ed08e1cfc5418164Greg Clayton    GetOffsetInBits();
45f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton
46f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton    bool
47f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton    IsBitfield();
48f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton
49f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton    uint32_t
50f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton    GetBitfieldSizeInBits();
5196154be69fa240a662419183ed08e1cfc5418164Greg Clayton
5296154be69fa240a662419183ed08e1cfc5418164Greg Clayton    bool
5396154be69fa240a662419183ed08e1cfc5418164Greg Clayton    GetDescription (lldb::SBStream &description,
5496154be69fa240a662419183ed08e1cfc5418164Greg Clayton                    lldb::DescriptionLevel description_level);
55979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
56d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonprotected:
57d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    friend class SBType;
58d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
59d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    void
60d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    reset (lldb_private::TypeMemberImpl *);
61d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
62d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb_private::TypeMemberImpl &
63d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ref ();
64d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
65d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    const lldb_private::TypeMemberImpl &
66d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ref () const;
67d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
68102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<lldb_private::TypeMemberImpl> m_opaque_ap;
69d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton};
70d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
71d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass SBType
72d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton{
73d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonpublic:
74d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
75d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBType();
76d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
77d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBType (const lldb::SBType &rhs);
78d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
79d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ~SBType ();
80d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
81ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton    bool
82979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    IsValid() const;
83979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
84fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton    uint64_t
85d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetByteSize();
86bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton
87bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    bool
88d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    IsPointerType();
89979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
90ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton    bool
91d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    IsReferenceType();
92ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton
9399270577568c7829116a97094eabceaee9a21737Greg Clayton    bool
9499270577568c7829116a97094eabceaee9a21737Greg Clayton    IsFunctionType ();
9599270577568c7829116a97094eabceaee9a21737Greg Clayton
9677e67a51acb825d79d25be687c085833713d5205Greg Clayton    bool
9777e67a51acb825d79d25be687c085833713d5205Greg Clayton    IsPolymorphicClass ();
9877e67a51acb825d79d25be687c085833713d5205Greg Clayton
99d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
100d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetPointerType();
101ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton
102d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
103d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetPointeeType();
104979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
105d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
106d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetReferenceType();
107979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
108d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
109d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetDereferencedType();
1106e56157a52b093759f13321b7f2d601e3eaea8a0Greg Clayton
1116e56157a52b093759f13321b7f2d601e3eaea8a0Greg Clayton    lldb::SBType
1126e56157a52b093759f13321b7f2d601e3eaea8a0Greg Clayton    GetUnqualifiedType();
1136e56157a52b093759f13321b7f2d601e3eaea8a0Greg Clayton
11418e0830db3f7602e3b97f543161b1b1e21824a44Greg Clayton    lldb::SBType
11518e0830db3f7602e3b97f543161b1b1e21824a44Greg Clayton    GetCanonicalType();
116949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton    // Get the "lldb::BasicType" enumeration for a type. If a type is not a basic
117949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton    // type eBasicTypeInvalid will be returned
118949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton    lldb::BasicType
119949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton    GetBasicType();
120949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton
121949b7178cf48cc4cf8533c729999a6c90785773dGreg Clayton    // The call below confusing and should really be renamed to "CreateBasicType"
122d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
123d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetBasicType(lldb::BasicType type);
124d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
125d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint32_t
126d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetNumberOfFields ();
127d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
128d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint32_t
129d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetNumberOfDirectBaseClasses ();
130d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
131d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint32_t
132d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetNumberOfVirtualBaseClasses ();
133d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
134d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBTypeMember
135d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetFieldAtIndex (uint32_t idx);
136d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
137d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBTypeMember
138d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetDirectBaseClassAtIndex (uint32_t idx);
139d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
140d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBTypeMember
141d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetVirtualBaseClassAtIndex (uint32_t idx);
142d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
1433eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    uint32_t
1443eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    GetNumberOfTemplateArguments ();
1453eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton
1463eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    lldb::SBType
1473eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    GetTemplateArgumentType (uint32_t idx);
1483eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton
1493eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    lldb::TemplateArgumentKind
1503eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton    GetTemplateArgumentKind (uint32_t idx);
1513eeaf6e715784499520885535236ccff1ba56d1cGreg Clayton
15299270577568c7829116a97094eabceaee9a21737Greg Clayton    lldb::SBType
15399270577568c7829116a97094eabceaee9a21737Greg Clayton    GetFunctionReturnType ();
15499270577568c7829116a97094eabceaee9a21737Greg Clayton
15599270577568c7829116a97094eabceaee9a21737Greg Clayton    lldb::SBTypeList
15699270577568c7829116a97094eabceaee9a21737Greg Clayton    GetFunctionArgumentTypes ();
15799270577568c7829116a97094eabceaee9a21737Greg Clayton
158979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    const char*
159979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetName();
1608c1d7203f726e3a62b832dbeeaf0ae76f9f65222Greg Clayton
161d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::TypeClass
162d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetTypeClass ();
163d44c9d31d23d0b44ce40325ad69226889a9638bcEnrico Granata
164d44c9d31d23d0b44ce40325ad69226889a9638bcEnrico Granata    bool
165d44c9d31d23d0b44ce40325ad69226889a9638bcEnrico Granata    IsTypeComplete ();
166d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
16796154be69fa240a662419183ed08e1cfc5418164Greg Clayton    bool
16896154be69fa240a662419183ed08e1cfc5418164Greg Clayton    GetDescription (lldb::SBStream &description,
16996154be69fa240a662419183ed08e1cfc5418164Greg Clayton                    lldb::DescriptionLevel description_level);
17096154be69fa240a662419183ed08e1cfc5418164Greg Clayton
171d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType &
172d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator = (const lldb::SBType &rhs);
173d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
174d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    bool
175d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator == (lldb::SBType &rhs);
176d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
177d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    bool
178d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator != (lldb::SBType &rhs);
179d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
18086ad476885a1fc5a14692534fb841be4eee7722aGreg Claytonprotected:
1817dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton
182d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb_private::TypeImpl &
183d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ref ();
184d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
185d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    const lldb_private::TypeImpl &
186d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ref () const;
187d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
1880a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    lldb::TypeImplSP
1890a19a1b9c25117854f226256805239d95153ed2dGreg Clayton    GetSP ();
1900a19a1b9c25117854f226256805239d95153ed2dGreg Clayton
191d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    void
1927dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    SetSP (const lldb::TypeImplSP &type_impl_sp);
193d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
1940fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    lldb::TypeImplSP m_opaque_sp;
195979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
1967dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    friend class SBFunction;
197979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    friend class SBModule;
198979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    friend class SBTarget;
199d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    friend class SBTypeNameSpecifier;
200d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    friend class SBTypeMember;
201979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    friend class SBTypeList;
2027dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    friend class SBValue;
203ef28e2ab6bc6273c129f0bc8a0c88a24d3b6876eGreg Clayton
2040fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    SBType (const lldb_private::ClangASTType &);
2050fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    SBType (const lldb::TypeSP &);
2060fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    SBType (const lldb::TypeImplSP &);
207979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
208979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata};
209979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
210979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass SBTypeList
211979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{
212979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic:
213979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    SBTypeList();
214979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
215d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    SBTypeList(const lldb::SBTypeList& rhs);
216979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
217d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ~SBTypeList();
218d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
219d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBTypeList&
220d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    operator = (const lldb::SBTypeList& rhs);
221979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
2220c64baff28c9340f84fa566df1bf9426ddd2dc31Johnny Chen    bool
223d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    IsValid();
2240c64baff28c9340f84fa566df1bf9426ddd2dc31Johnny Chen
225979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    void
226d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    Append (lldb::SBType type);
227979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
228d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::SBType
229d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetTypeAtIndex (uint32_t index);
230979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
231d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint32_t
232d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetSize();
233979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
234979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
235979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataprivate:
236102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<lldb_private::TypeListImpl> m_opaque_ap;
237a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    friend class SBModule;
238a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton    friend class SBCompileUnit;
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
240d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBType_h_
245