]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Symbol/OCamlASTContext.h
MFC r345805: Unify SCSI_STATUS_BUSY retry handling with other cases.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Symbol / OCamlASTContext.h
1 //===-- OCamlASTContext.h ------------------------------------------*- C++
2 //-*-===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef liblldb_OCamlASTContext_h_
12 #define liblldb_OCamlASTContext_h_
13
14 // C Includes
15 // C++ Includes
16 #include <map>
17 #include <memory>
18 #include <set>
19 #include <string>
20 #include <vector>
21
22 // Other libraries and framework includes
23 // Project includes
24 #include "lldb/Symbol/CompilerType.h"
25 #include "lldb/Symbol/TypeSystem.h"
26 #include "lldb/Utility/ConstString.h"
27
28 namespace lldb_private {
29
30 class OCamlASTContext : public TypeSystem {
31 public:
32   class OCamlType;
33   typedef std::map<ConstString, std::unique_ptr<OCamlType>> OCamlTypeMap;
34
35   OCamlASTContext();
36   ~OCamlASTContext() override;
37
38   ConstString GetPluginName() override;
39
40   uint32_t GetPluginVersion() override;
41
42   static ConstString GetPluginNameStatic();
43
44   static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
45                                            Module *module, Target *target);
46
47   static void EnumerateSupportedLanguages(
48       std::set<lldb::LanguageType> &languages_for_types,
49       std::set<lldb::LanguageType> &languages_for_expressions);
50
51   static void Initialize();
52
53   static void Terminate();
54
55   DWARFASTParser *GetDWARFParser() override;
56
57   void SetAddressByteSize(int byte_size) { m_pointer_byte_size = byte_size; }
58
59   static bool classof(const TypeSystem *ts) {
60     return ts->getKind() == TypeSystem::eKindOCaml;
61   }
62
63   ConstString DeclGetName(void *opaque_decl) override { return ConstString(); }
64
65   bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override {
66     return false;
67   }
68
69   ConstString DeclContextGetName(void *opaque_decl_ctx) override {
70     return ConstString();
71   }
72
73   ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override {
74     return ConstString();
75   }
76
77   bool
78   DeclContextIsClassMethod(void *opaque_decl_ctx,
79                            lldb::LanguageType *language_ptr,
80                            bool *is_instance_method_ptr,
81                            ConstString *language_object_name_ptr) override {
82     return false;
83   }
84
85   bool SupportsLanguage(lldb::LanguageType language) override;
86   uint32_t GetPointerByteSize() override;
87
88   bool IsArrayType(lldb::opaque_compiler_type_t type,
89                    CompilerType *element_type, uint64_t *size,
90                    bool *is_incomplete) override;
91
92   bool IsAggregateType(lldb::opaque_compiler_type_t type) override;
93
94   bool IsCharType(lldb::opaque_compiler_type_t type) override;
95
96   bool IsCompleteType(lldb::opaque_compiler_type_t type) override;
97
98   bool IsDefined(lldb::opaque_compiler_type_t type) override;
99
100   bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count,
101                            bool &is_complex) override;
102
103   bool IsFunctionType(lldb::opaque_compiler_type_t type,
104                       bool *is_variadic_ptr = nullptr) override;
105
106   size_t
107   GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;
108
109   CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
110                                           const size_t index) override;
111
112   bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;
113
114   bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
115                           CompilerType *function_pointer_type_ptr) override;
116
117   bool IsIntegerType(lldb::opaque_compiler_type_t type,
118                      bool &is_signed) override;
119
120   bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
121                              CompilerType *target_type, bool check_cplusplus,
122                              bool check_objc) override;
123
124   bool IsPointerType(lldb::opaque_compiler_type_t type,
125                      CompilerType *pointee_type = nullptr) override;
126
127   bool IsScalarType(lldb::opaque_compiler_type_t type) override;
128
129   bool IsVoidType(lldb::opaque_compiler_type_t type) override;
130
131   bool GetCompleteType(lldb::opaque_compiler_type_t type) override;
132
133   ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
134
135   uint32_t GetTypeInfo(
136       lldb::opaque_compiler_type_t type,
137       CompilerType *pointee_or_element_compiler_type = nullptr) override;
138
139   lldb::LanguageType
140   GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;
141
142   lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
143
144   CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
145                                    uint64_t *stride = nullptr) override;
146
147   CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;
148
149   int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
150
151   CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
152                                               size_t idx) override;
153
154   CompilerType
155   GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
156
157   size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
158
159   TypeMemberFunctionImpl
160   GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
161                            size_t idx) override;
162
163   CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override;
164
165   CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override;
166
167   uint64_t GetBitSize(lldb::opaque_compiler_type_t type,
168                       ExecutionContextScope *exe_scope) override;
169
170   lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
171                              uint64_t &count) override;
172
173   lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
174
175   uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
176                           bool omit_empty_base_classes) override;
177
178   lldb::BasicType
179   GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;
180
181   CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
182                                                    size_t bit_size) override;
183
184   uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
185
186   CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx,
187                                std::string &name, uint64_t *bit_offset_ptr,
188                                uint32_t *bitfield_bit_size_ptr,
189                                bool *is_bitfield_ptr) override;
190
191   uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override {
192     return 0;
193   }
194
195   uint32_t
196   GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override {
197     return 0;
198   }
199
200   CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
201                                          size_t idx,
202                                          uint32_t *bit_offset_ptr) override {
203     return CompilerType();
204   }
205
206   CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
207                                           size_t idx,
208                                           uint32_t *bit_offset_ptr) override {
209     return CompilerType();
210   }
211
212   CompilerType GetChildCompilerTypeAtIndex(
213       lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,
214       bool transparent_pointers, bool omit_empty_base_classes,
215       bool ignore_array_bounds, std::string &child_name,
216       uint32_t &child_byte_size, int32_t &child_byte_offset,
217       uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
218       bool &child_is_base_class, bool &child_is_deref_of_parent,
219       ValueObject *valobj, uint64_t &language_flags) override;
220
221   uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
222                                    const char *name,
223                                    bool omit_empty_base_classes) override;
224
225   size_t
226   GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,
227                                 const char *name, bool omit_empty_base_classes,
228                                 std::vector<uint32_t> &child_indexes) override;
229
230   size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override {
231     return 0;
232   }
233
234   void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
235                  Stream *s, lldb::Format format, const DataExtractor &data,
236                  lldb::offset_t data_offset, size_t data_byte_size,
237                  uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
238                  bool show_types, bool show_summary, bool verbose,
239                  uint32_t depth) override;
240
241   bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,
242                      lldb::Format format, const DataExtractor &data,
243                      lldb::offset_t data_offset, size_t data_byte_size,
244                      uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,
245                      ExecutionContextScope *exe_scope) override;
246
247   void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
248
249   void DumpTypeDescription(lldb::opaque_compiler_type_t type,
250                            Stream *s) override;
251
252   bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;
253
254   void DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,
255                    Stream *s, const DataExtractor &data,
256                    lldb::offset_t data_offset, size_t data_byte_size) override;
257
258   size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
259                                    const char *s, uint8_t *dst,
260                                    size_t dst_size) override;
261
262   bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
263                                 CompilerType *pointee_type = nullptr) override;
264
265   unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
266
267   bool IsCStringType(lldb::opaque_compiler_type_t type,
268                      uint32_t &length) override;
269
270   size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
271
272   CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;
273
274   bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;
275
276   bool IsConst(lldb::opaque_compiler_type_t type) override;
277
278   uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
279                                   CompilerType *base_type_ptr) override;
280
281   bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;
282
283   bool IsTypedefType(lldb::opaque_compiler_type_t type) override;
284
285   CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;
286
287   bool IsVectorType(lldb::opaque_compiler_type_t type,
288                     CompilerType *element_type, uint64_t *size) override;
289
290   CompilerType
291   GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;
292
293   CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;
294
295   bool IsReferenceType(lldb::opaque_compiler_type_t type,
296                        CompilerType *pointee_type = nullptr,
297                        bool *is_rvalue = nullptr) override;
298
299   CompilerType CreateBaseType(const ConstString &name, uint64_t);
300
301 private:
302   int m_pointer_byte_size;
303   std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap;
304   OCamlTypeMap m_base_type_map;
305
306   OCamlASTContext(const OCamlASTContext &) = delete;
307   const OCamlASTContext &operator=(const OCamlASTContext &) = delete;
308 };
309
310 class OCamlASTContextForExpr : public OCamlASTContext {
311 public:
312   OCamlASTContextForExpr(lldb::TargetSP target) : m_target_wp(target) {}
313
314 private:
315   lldb::TargetWP m_target_wp;
316 };
317 }
318 #endif // liblldb_OCamlASTContext_h_