]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Symbol/JavaASTContext.h
MFC r345805: Unify SCSI_STATUS_BUSY retry handling with other cases.
[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/Symbol/TypeSystem.h"
22 #include "lldb/Utility/ConstString.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   int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
207
208   CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
209                                               size_t idx) override;
210
211   CompilerType
212   GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
213
214   size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
215
216   TypeMemberFunctionImpl
217   GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
218                            size_t idx) override;
219
220   uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
221
222   CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
223                                std::string &name, uint64_t *bit_offset_ptr,
224                                uint32_t *bitfield_bit_size_ptr,
225                                bool *is_bitfield_ptr) override;
226
227   uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
228                           bool omit_empty_base_classes) override;
229
230   uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override;
231
232   uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override;
233
234   CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
235                                          size_t idx,
236                                          uint32_t *bit_offset_ptr) override;
237
238   CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
239                                           size_t idx,
240                                           uint32_t *bit_offset_ptr) override;
241
242   size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
243                                    const char *s, uint8_t *dst,
244                                    size_t dst_size) override;
245
246   void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
247                  Stream *s, lldb::Format format, const DataExtractor &data,
248                  lldb::offset_t data_offset, size_t data_byte_size,
249                  uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
250                  bool show_types, bool show_summary, bool verbose,
251                  uint32_t depth) override;
252
253   bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,
254                      lldb::Format format, const DataExtractor &data,
255                      lldb::offset_t data_offset, size_t data_byte_size,
256                      uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
257                      ExecutionContextScope *exe_scope) override;
258
259   void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
260
261   void DumpTypeDescription(lldb::opaque_compiler_type_t type,
262                            Stream *s) override;
263
264   void DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
265                    Stream *s, const DataExtractor &data,
266                    lldb::offset_t data_offset, size_t data_byte_size) override;
267
268   CompilerType GetChildCompilerTypeAtIndex(
269       lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
270       bool transparent_pointers, bool omit_empty_base_classes,
271       bool ignore_array_bounds, std::string &child_name,
272       uint32_t &child_byte_size, int32_t &child_byte_offset,
273       uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
274       bool &child_is_base_class, bool &child_is_deref_of_parent,
275       ValueObject *valobj, uint64_t &language_flags) override;
276
277   uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
278                                    const char *name,
279                                    bool omit_empty_base_classes) override;
280
281   size_t
282   GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,
283                                 const char *name, bool omit_empty_base_classes,
284                                 std::vector<uint32_t> &child_indexes) override;
285
286   CompilerType
287   GetLValueReferenceType(lldb::opaque_compiler_type_t type) override;
288
289   ConstString DeclContextGetScopeQualifiedName(
290       lldb::opaque_compiler_type_t opaque_decl_ctx) override;
291
292   CompilerType CreateBaseType(const ConstString &name);
293
294   CompilerType CreateObjectType(const ConstString &name,
295                                 const ConstString &linkage_name,
296                                 uint32_t byte_size);
297
298   CompilerType CreateArrayType(const ConstString &linkage_name,
299                                const CompilerType &element_type,
300                                const DWARFExpression &length_expression,
301                                const lldb::addr_t data_offset);
302
303   CompilerType CreateReferenceType(const CompilerType &pointee_type);
304
305   void CompleteObjectType(const CompilerType &object_type);
306
307   void AddBaseClassToObject(const CompilerType &object_type,
308                             const CompilerType &member_type,
309                             uint32_t member_offset);
310
311   void AddMemberToObject(const CompilerType &object_type,
312                          const ConstString &name,
313                          const CompilerType &member_type,
314                          uint32_t member_offset);
315
316   void SetDynamicTypeId(const CompilerType &type,
317                         const DWARFExpression &type_id);
318
319   static uint64_t CalculateDynamicTypeId(ExecutionContext *exe_ctx,
320                                          const CompilerType &type,
321                                          ValueObject &in_value);
322
323   static ConstString GetLinkageName(const CompilerType &type);
324
325   static uint32_t CalculateArraySize(const CompilerType &type,
326                                      ValueObject &in_value);
327
328   static uint64_t CalculateArrayElementOffset(const CompilerType &type,
329                                               size_t index);
330
331   //------------------------------------------------------------------
332   // llvm casting support
333   //------------------------------------------------------------------
334   static bool classof(const TypeSystem *ts) {
335     return ts->getKind() == TypeSystem::eKindJava;
336   }
337
338 private:
339   uint32_t m_pointer_byte_size;
340   std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap;
341   JavaTypeMap m_array_type_map;
342   JavaTypeMap m_base_type_map;
343   JavaTypeMap m_reference_type_map;
344   JavaTypeMap m_object_type_map;
345
346   JavaASTContext(const JavaASTContext &) = delete;
347   const JavaASTContext &operator=(const JavaASTContext &) = delete;
348 };
349 }
350 #endif // liblldb_JavaASTContext_h_