1 //===-- JavaASTContext.h ----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_JavaASTContext_h_
11 #define liblldb_JavaASTContext_h_
19 // Other libraries and framework includes
21 #include "lldb/Symbol/TypeSystem.h"
22 #include "lldb/Utility/ConstString.h"
24 namespace lldb_private {
26 class JavaASTContext : public TypeSystem {
29 typedef std::map<ConstString, std::unique_ptr<JavaType>> JavaTypeMap;
31 JavaASTContext(const ArchSpec &arch);
32 ~JavaASTContext() override;
34 //------------------------------------------------------------------
35 // PluginInterface functions
36 //------------------------------------------------------------------
37 ConstString GetPluginName() override;
39 uint32_t GetPluginVersion() override;
41 static ConstString GetPluginNameStatic();
43 static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
44 Module *module, Target *target);
46 static void EnumerateSupportedLanguages(
47 std::set<lldb::LanguageType> &languages_for_types,
48 std::set<lldb::LanguageType> &languages_for_expressions);
50 static void Initialize();
52 static void Terminate();
54 DWARFASTParser *GetDWARFParser() override;
56 uint32_t GetPointerByteSize() override;
58 //----------------------------------------------------------------------
59 // CompilerDecl functions
60 //----------------------------------------------------------------------
61 ConstString DeclGetName(void *opaque_decl) override;
63 //----------------------------------------------------------------------
64 // CompilerDeclContext functions
65 //----------------------------------------------------------------------
67 std::vector<CompilerDecl>
68 DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name,
69 const bool ignore_imported_decls) override;
71 bool DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override;
73 ConstString DeclContextGetName(void *opaque_decl_ctx) override;
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;
80 //----------------------------------------------------------------------
82 //----------------------------------------------------------------------
84 bool IsArrayType(lldb::opaque_compiler_type_t type,
85 CompilerType *element_type, uint64_t *size,
86 bool *is_incomplete) override;
88 bool IsAggregateType(lldb::opaque_compiler_type_t type) override;
90 bool IsCharType(lldb::opaque_compiler_type_t type) override;
92 bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count,
93 bool &is_complex) override;
95 bool IsFunctionType(lldb::opaque_compiler_type_t type,
96 bool *is_variadic_ptr = nullptr) override;
99 GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;
101 CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type,
102 const size_t index) override;
104 bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;
106 bool IsBlockPointerType(lldb::opaque_compiler_type_t type,
107 CompilerType *function_pointer_type_ptr) override;
109 bool IsIntegerType(lldb::opaque_compiler_type_t type,
110 bool &is_signed) override;
112 bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type,
113 CompilerType *target_type, bool check_cplusplus,
114 bool check_objc) override;
116 bool IsPointerType(lldb::opaque_compiler_type_t type,
117 CompilerType *pointee_type = nullptr) override;
119 bool IsReferenceType(lldb::opaque_compiler_type_t type,
120 CompilerType *pointee_type = nullptr,
121 bool *is_rvalue = nullptr) override;
123 bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,
124 CompilerType *pointee_type = nullptr) override;
126 bool IsScalarType(lldb::opaque_compiler_type_t type) override;
128 bool IsVoidType(lldb::opaque_compiler_type_t type) override;
130 bool IsCStringType(lldb::opaque_compiler_type_t type,
131 uint32_t &length) override;
133 bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;
135 bool IsTypedefType(lldb::opaque_compiler_type_t type) override;
137 bool IsVectorType(lldb::opaque_compiler_type_t type,
138 CompilerType *element_type, uint64_t *size) override;
140 bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;
142 bool IsCompleteType(lldb::opaque_compiler_type_t type) override;
144 bool IsConst(lldb::opaque_compiler_type_t type) override;
146 bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;
148 bool IsDefined(lldb::opaque_compiler_type_t type) override;
150 uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type,
151 CompilerType *base_type_ptr) override;
153 bool SupportsLanguage(lldb::LanguageType language) override;
155 bool GetCompleteType(lldb::opaque_compiler_type_t type) override;
157 ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;
159 uint32_t GetTypeInfo(
160 lldb::opaque_compiler_type_t type,
161 CompilerType *pointee_or_element_compiler_type = nullptr) override;
163 lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;
166 GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;
168 CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type,
169 uint64_t *stride = nullptr) override;
171 CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override;
173 CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override;
175 CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;
178 GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;
180 CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;
182 CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;
184 CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;
186 CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding,
187 size_t bit_size) override;
189 size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
192 GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;
194 uint64_t GetBitSize(lldb::opaque_compiler_type_t type,
195 ExecutionContextScope *exe_scope) override;
197 lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
198 uint64_t &count) override;
200 lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
202 unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;
204 size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override;
206 int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
208 CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
209 size_t idx) override;
212 GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
214 size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
216 TypeMemberFunctionImpl
217 GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
218 size_t idx) override;
220 uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
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;
227 uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
228 bool omit_empty_base_classes) override;
230 uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override;
232 uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override;
234 CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
236 uint32_t *bit_offset_ptr) override;
238 CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
240 uint32_t *bit_offset_ptr) override;
242 size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
243 const char *s, uint8_t *dst,
244 size_t dst_size) override;
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;
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;
259 void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
261 void DumpTypeDescription(lldb::opaque_compiler_type_t type,
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;
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;
277 uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
279 bool omit_empty_base_classes) override;
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;
287 GetLValueReferenceType(lldb::opaque_compiler_type_t type) override;
289 ConstString DeclContextGetScopeQualifiedName(
290 lldb::opaque_compiler_type_t opaque_decl_ctx) override;
292 CompilerType CreateBaseType(const ConstString &name);
294 CompilerType CreateObjectType(const ConstString &name,
295 const ConstString &linkage_name,
298 CompilerType CreateArrayType(const ConstString &linkage_name,
299 const CompilerType &element_type,
300 const DWARFExpression &length_expression,
301 const lldb::addr_t data_offset);
303 CompilerType CreateReferenceType(const CompilerType &pointee_type);
305 void CompleteObjectType(const CompilerType &object_type);
307 void AddBaseClassToObject(const CompilerType &object_type,
308 const CompilerType &member_type,
309 uint32_t member_offset);
311 void AddMemberToObject(const CompilerType &object_type,
312 const ConstString &name,
313 const CompilerType &member_type,
314 uint32_t member_offset);
316 void SetDynamicTypeId(const CompilerType &type,
317 const DWARFExpression &type_id);
319 static uint64_t CalculateDynamicTypeId(ExecutionContext *exe_ctx,
320 const CompilerType &type,
321 ValueObject &in_value);
323 static ConstString GetLinkageName(const CompilerType &type);
325 static uint32_t CalculateArraySize(const CompilerType &type,
326 ValueObject &in_value);
328 static uint64_t CalculateArrayElementOffset(const CompilerType &type,
331 //------------------------------------------------------------------
332 // llvm casting support
333 //------------------------------------------------------------------
334 static bool classof(const TypeSystem *ts) {
335 return ts->getKind() == TypeSystem::eKindJava;
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;
346 JavaASTContext(const JavaASTContext &) = delete;
347 const JavaASTContext &operator=(const JavaASTContext &) = delete;
350 #endif // liblldb_JavaASTContext_h_