1 //===-- OCamlASTContext.h ------------------------------------------*- C++
4 // The LLVM Compiler Infrastructure
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
9 //===----------------------------------------------------------------------===//
11 #ifndef liblldb_OCamlASTContext_h_
12 #define liblldb_OCamlASTContext_h_
22 // Other libraries and framework includes
24 #include "lldb/Symbol/CompilerType.h"
25 #include "lldb/Symbol/TypeSystem.h"
26 #include "lldb/Utility/ConstString.h"
28 namespace lldb_private {
30 class OCamlASTContext : public TypeSystem {
33 typedef std::map<ConstString, std::unique_ptr<OCamlType>> OCamlTypeMap;
36 ~OCamlASTContext() override;
38 ConstString GetPluginName() override;
40 uint32_t GetPluginVersion() override;
42 static ConstString GetPluginNameStatic();
44 static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
45 Module *module, Target *target);
47 static void EnumerateSupportedLanguages(
48 std::set<lldb::LanguageType> &languages_for_types,
49 std::set<lldb::LanguageType> &languages_for_expressions);
51 static void Initialize();
53 static void Terminate();
55 DWARFASTParser *GetDWARFParser() override;
57 void SetAddressByteSize(int byte_size) { m_pointer_byte_size = byte_size; }
59 static bool classof(const TypeSystem *ts) {
60 return ts->getKind() == TypeSystem::eKindOCaml;
63 ConstString DeclGetName(void *opaque_decl) override { return ConstString(); }
65 bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override {
69 ConstString DeclContextGetName(void *opaque_decl_ctx) override {
73 ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override {
78 DeclContextIsClassMethod(void *opaque_decl_ctx,
79 lldb::LanguageType *language_ptr,
80 bool *is_instance_method_ptr,
81 ConstString *language_object_name_ptr) override {
85 bool SupportsLanguage(lldb::LanguageType language) override;
86 uint32_t GetPointerByteSize() override;
88 bool IsArrayType(lldb::opaque_compiler_type_t type,
89 CompilerType *element_type, uint64_t *size,
90 bool *is_incomplete) override;
92 bool IsAggregateType(lldb::opaque_compiler_type_t type) override;
94 bool IsCharType(lldb::opaque_compiler_type_t type) override;
96 bool IsCompleteType(lldb::opaque_compiler_type_t type) override;
98 bool IsDefined(lldb::opaque_compiler_type_t type) override;
100 bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count,
101 bool &is_complex) override;
103 bool IsFunctionType(lldb::opaque_compiler_type_t type,
104 bool *is_variadic_ptr = nullptr) override;
107 GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;
109 CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
110 const size_t index) override;
112 bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;
114 bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
115 CompilerType *function_pointer_type_ptr) override;
117 bool IsIntegerType(lldb::opaque_compiler_type_t type,
118 bool &is_signed) override;
120 bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
121 CompilerType *target_type, bool check_cplusplus,
122 bool check_objc) override;
124 bool IsPointerType(lldb::opaque_compiler_type_t type,
125 CompilerType *pointee_type = nullptr) override;
127 bool IsScalarType(lldb::opaque_compiler_type_t type) override;
129 bool IsVoidType(lldb::opaque_compiler_type_t type) override;
131 bool GetCompleteType(lldb::opaque_compiler_type_t type) override;
133 ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
135 uint32_t GetTypeInfo(
136 lldb::opaque_compiler_type_t type,
137 CompilerType *pointee_or_element_compiler_type = nullptr) override;
140 GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;
142 lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
144 CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
145 uint64_t *stride = nullptr) override;
147 CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;
149 int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
151 CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
152 size_t idx) override;
155 GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
157 size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
159 TypeMemberFunctionImpl
160 GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
161 size_t idx) override;
163 CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override;
165 CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override;
167 uint64_t GetBitSize(lldb::opaque_compiler_type_t type,
168 ExecutionContextScope *exe_scope) override;
170 lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
171 uint64_t &count) override;
173 lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
175 uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
176 bool omit_empty_base_classes) override;
179 GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;
181 CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
182 size_t bit_size) override;
184 uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
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;
191 uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override {
196 GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override {
200 CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
202 uint32_t *bit_offset_ptr) override {
203 return CompilerType();
206 CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
208 uint32_t *bit_offset_ptr) override {
209 return CompilerType();
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;
221 uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
223 bool omit_empty_base_classes) override;
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;
230 size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override {
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;
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;
247 void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
249 void DumpTypeDescription(lldb::opaque_compiler_type_t type,
252 bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;
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;
258 size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
259 const char *s, uint8_t *dst,
260 size_t dst_size) override;
262 bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
263 CompilerType *pointee_type = nullptr) override;
265 unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
267 bool IsCStringType(lldb::opaque_compiler_type_t type,
268 uint32_t &length) override;
270 size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
272 CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;
274 bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;
276 bool IsConst(lldb::opaque_compiler_type_t type) override;
278 uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
279 CompilerType *base_type_ptr) override;
281 bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;
283 bool IsTypedefType(lldb::opaque_compiler_type_t type) override;
285 CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;
287 bool IsVectorType(lldb::opaque_compiler_type_t type,
288 CompilerType *element_type, uint64_t *size) override;
291 GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;
293 CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;
295 bool IsReferenceType(lldb::opaque_compiler_type_t type,
296 CompilerType *pointee_type = nullptr,
297 bool *is_rvalue = nullptr) override;
299 CompilerType CreateBaseType(const ConstString &name, uint64_t);
302 int m_pointer_byte_size;
303 std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap;
304 OCamlTypeMap m_base_type_map;
306 OCamlASTContext(const OCamlASTContext &) = delete;
307 const OCamlASTContext &operator=(const OCamlASTContext &) = delete;
310 class OCamlASTContextForExpr : public OCamlASTContext {
312 OCamlASTContextForExpr(lldb::TargetSP target) : m_target_wp(target) {}
315 lldb::TargetWP m_target_wp;
318 #endif // liblldb_OCamlASTContext_h_