]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Symbol/JavaASTContext.h
Update DTS files from Linux 4.12
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Symbol / JavaASTContext.h
1 //===-- JavaASTContext.h ----------------------------------------*- 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 #ifndef liblldb_JavaASTContext_h_
11 #define liblldb_JavaASTContext_h_
12
13 // C Includes
14 // C++ Includes
15 #include <map>
16 #include <memory>
17 #include <set>
18
19 // Other libraries and framework includes
20 // Project includes
21 #include "lldb/Core/ConstString.h"
22 #include "lldb/Symbol/TypeSystem.h"
23
24 namespace lldb_private {
25
26 class JavaASTContext : public TypeSystem {
27 public:
28   class JavaType;
29   typedef std::map<ConstString, std::unique_ptr<JavaType>> JavaTypeMap;
30
31   JavaASTContext(const ArchSpec &arch);
32   ~JavaASTContext() override;
33
34   //------------------------------------------------------------------
35   // PluginInterface functions
36   //------------------------------------------------------------------
37   ConstString GetPluginName() override;
38
39   uint32_t GetPluginVersion() override;
40
41   static ConstString GetPluginNameStatic();
42
43   static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
44                                            Module *module, Target *target);
45
46   static void EnumerateSupportedLanguages(
47       std::set<lldb::LanguageType> &languages_for_types,
48       std::set<lldb::LanguageType> &languages_for_expressions);
49
50   static void Initialize();
51
52   static void Terminate();
53
54   DWARFASTParser *GetDWARFParser() override;
55
56   uint32_t GetPointerByteSize() override;
57
58   //----------------------------------------------------------------------
59   // CompilerDecl functions
60   //----------------------------------------------------------------------
61   ConstString DeclGetName(void *opaque_decl) override;
62
63   //----------------------------------------------------------------------
64   // CompilerDeclContext functions
65   //----------------------------------------------------------------------
66
67   std::vector<CompilerDecl>
68   DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name,
69                             const bool ignore_imported_decls) override;
70
71   bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override;
72
73   ConstString DeclContextGetName(void *opaque_decl_ctx) override;
74
75   bool DeclContextIsClassMethod(void *opaque_decl_ctx,
76                                 lldb::LanguageType *language_ptr,
77                                 bool *is_instance_method_ptr,
78                                 ConstString *language_object_name_ptr) override;
79
80   //----------------------------------------------------------------------
81   // Tests
82   //----------------------------------------------------------------------
83
84   bool IsArrayType(lldb::opaque_compiler_type_t type,
85                    CompilerType *element_type, uint64_t *size,
86                    bool *is_incomplete) override;
87
88   bool IsAggregateType(lldb::opaque_compiler_type_t type) override;
89
90   bool IsCharType(lldb::opaque_compiler_type_t type) override;
91
92   bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count,
93                            bool &is_complex) override;
94
95   bool IsFunctionType(lldb::opaque_compiler_type_t type,
96                       bool *is_variadic_ptr = nullptr) override;
97
98   size_t
99   GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;
100
101   CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
102                                           const size_t index) override;
103
104   bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;
105
106   bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
107                           CompilerType *function_pointer_type_ptr) override;
108
109   bool IsIntegerType(lldb::opaque_compiler_type_t type,
110                      bool &is_signed) override;
111
112   bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
113                              CompilerType *target_type, bool check_cplusplus,
114                              bool check_objc) override;
115
116   bool IsPointerType(lldb::opaque_compiler_type_t type,
117                      CompilerType *pointee_type = nullptr) override;
118
119   bool IsReferenceType(lldb::opaque_compiler_type_t type,
120                        CompilerType *pointee_type = nullptr,
121                        bool *is_rvalue = nullptr) override;
122
123   bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
124                                 CompilerType *pointee_type = nullptr) override;
125
126   bool IsScalarType(lldb::opaque_compiler_type_t type) override;
127
128   bool IsVoidType(lldb::opaque_compiler_type_t type) override;
129
130   bool IsCStringType(lldb::opaque_compiler_type_t type,
131                      uint32_t &length) override;
132
133   bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;
134
135   bool IsTypedefType(lldb::opaque_compiler_type_t type) override;
136
137   bool IsVectorType(lldb::opaque_compiler_type_t type,
138                     CompilerType *element_type, uint64_t *size) override;
139
140   bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;
141
142   bool IsCompleteType(lldb::opaque_compiler_type_t type) override;
143
144   bool IsConst(lldb::opaque_compiler_type_t type) override;
145
146   bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;
147
148   bool IsDefined(lldb::opaque_compiler_type_t type) override;
149
150   uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
151                                   CompilerType *base_type_ptr) override;
152
153   bool SupportsLanguage(lldb::LanguageType language) override;
154
155   bool GetCompleteType(lldb::opaque_compiler_type_t type) override;
156
157   ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
158
159   uint32_t GetTypeInfo(
160       lldb::opaque_compiler_type_t type,
161       CompilerType *pointee_or_element_compiler_type = nullptr) override;
162
163   lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
164
165   lldb::LanguageType
166   GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;
167
168   CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
169                                    uint64_t *stride = nullptr) override;
170
171   CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override;
172
173   CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override;
174
175   CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;
176
177   CompilerType
178   GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;
179
180   CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;
181
182   CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;
183
184   CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;
185
186   CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
187                                                    size_t bit_size) override;
188
189   size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
190
191   lldb::BasicType
192   GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;
193
194   uint64_t GetBitSize(lldb::opaque_compiler_type_t type,
195                       ExecutionContextScope *exe_scope) override;
196
197   lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
198                              uint64_t &count) override;
199
200   lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
201
202   unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
203
204   size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override;
205
206   CompilerType GetTemplateArgument(lldb::opaque_compiler_type_t type,
207                                    size_t idx,
208                                    lldb::TemplateArgumentKind &kind) override;
209
210   int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
211
212   CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
213                                               size_t idx) override;
214
215   CompilerType
216   GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
217
218   size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
219
220   TypeMemberFunctionImpl
221   GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
222                            size_t idx) override;
223
224   uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
225
226   CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
227                                std::string &name, uint64_t *bit_offset_ptr,
228                                uint32_t *bitfield_bit_size_ptr,
229                                bool *is_bitfield_ptr) override;
230
231   uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
232                           bool omit_empty_base_classes) override;
233
234   uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override;
235
236   uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override;
237
238   CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
239                                          size_t idx,
240                                          uint32_t *bit_offset_ptr) override;
241
242   CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
243                                           size_t idx,
244                                           uint32_t *bit_offset_ptr) override;
245
246   size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
247                                    const char *s, uint8_t *dst,
248                                    size_t dst_size) override;
249
250   void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
251                  Stream *s, lldb::Format format, const DataExtractor &data,
252                  lldb::offset_t data_offset, size_t data_byte_size,
253                  uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
254                  bool show_types, bool show_summary, bool verbose,
255                  uint32_t depth) override;
256
257   bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,
258                      lldb::Format format, const DataExtractor &data,
259                      lldb::offset_t data_offset, size_t data_byte_size,
260                      uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
261                      ExecutionContextScope *exe_scope) override;
262
263   void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
264
265   void DumpTypeDescription(lldb::opaque_compiler_type_t type,
266                            Stream *s) override;
267
268   void DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
269                    Stream *s, const DataExtractor &data,
270                    lldb::offset_t data_offset, size_t data_byte_size) override;
271
272   CompilerType GetChildCompilerTypeAtIndex(
273       lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
274       bool transparent_pointers, bool omit_empty_base_classes,
275       bool ignore_array_bounds, std::string &child_name,
276       uint32_t &child_byte_size, int32_t &child_byte_offset,
277       uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
278       bool &child_is_base_class, bool &child_is_deref_of_parent,
279       ValueObject *valobj, uint64_t &language_flags) override;
280
281   uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
282                                    const char *name,
283                                    bool omit_empty_base_classes) override;
284
285   size_t
286   GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,
287                                 const char *name, bool omit_empty_base_classes,
288                                 std::vector<uint32_t> &child_indexes) override;
289
290   CompilerType
291   GetLValueReferenceType(lldb::opaque_compiler_type_t type) override;
292
293   ConstString DeclContextGetScopeQualifiedName(
294       lldb::opaque_compiler_type_t opaque_decl_ctx) override;
295
296   CompilerType CreateBaseType(const ConstString &name);
297
298   CompilerType CreateObjectType(const ConstString &name,
299                                 const ConstString &linkage_name,
300                                 uint32_t byte_size);
301
302   CompilerType CreateArrayType(const ConstString &linkage_name,
303                                const CompilerType &element_type,
304                                const DWARFExpression &length_expression,
305                                const lldb::addr_t data_offset);
306
307   CompilerType CreateReferenceType(const CompilerType &pointee_type);
308
309   void CompleteObjectType(const CompilerType &object_type);
310
311   void AddBaseClassToObject(const CompilerType &object_type,
312                             const CompilerType &member_type,
313                             uint32_t member_offset);
314
315   void AddMemberToObject(const CompilerType &object_type,
316                          const ConstString &name,
317                          const CompilerType &member_type,
318                          uint32_t member_offset);
319
320   void SetDynamicTypeId(const CompilerType &type,
321                         const DWARFExpression &type_id);
322
323   static uint64_t CalculateDynamicTypeId(ExecutionContext *exe_ctx,
324                                          const CompilerType &type,
325                                          ValueObject &in_value);
326
327   static ConstString GetLinkageName(const CompilerType &type);
328
329   static uint32_t CalculateArraySize(const CompilerType &type,
330                                      ValueObject &in_value);
331
332   static uint64_t CalculateArrayElementOffset(const CompilerType &type,
333                                               size_t index);
334
335   //------------------------------------------------------------------
336   // llvm casting support
337   //------------------------------------------------------------------
338   static bool classof(const TypeSystem *ts) {
339     return ts->getKind() == TypeSystem::eKindJava;
340   }
341
342 private:
343   uint32_t m_pointer_byte_size;
344   std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap;
345   JavaTypeMap m_array_type_map;
346   JavaTypeMap m_base_type_map;
347   JavaTypeMap m_reference_type_map;
348   JavaTypeMap m_object_type_map;
349
350   JavaASTContext(const JavaASTContext &) = delete;
351   const JavaASTContext &operator=(const JavaASTContext &) = delete;
352 };
353 }
354 #endif // liblldb_JavaASTContext_h_