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/Core/ConstString.h"
22 #include "lldb/Symbol/TypeSystem.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 CompilerType GetTemplateArgument(lldb::opaque_compiler_type_t type,
208 lldb::TemplateArgumentKind &kind) override;
210 int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;
212 CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type,
213 size_t idx) override;
216 GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;
218 size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;
220 TypeMemberFunctionImpl
221 GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type,
222 size_t idx) override;
224 uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override;
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;
231 uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
232 bool omit_empty_base_classes) override;
234 uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override;
236 uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override;
238 CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type,
240 uint32_t *bit_offset_ptr) override;
242 CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type,
244 uint32_t *bit_offset_ptr) override;
246 size_t ConvertStringToFloatValue(lldb::opaque_compiler_type_t type,
247 const char *s, uint8_t *dst,
248 size_t dst_size) override;
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;
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;
263 void DumpTypeDescription(lldb::opaque_compiler_type_t type) override;
265 void DumpTypeDescription(lldb::opaque_compiler_type_t type,
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;
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;
281 uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
283 bool omit_empty_base_classes) override;
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;
291 GetLValueReferenceType(lldb::opaque_compiler_type_t type) override;
293 ConstString DeclContextGetScopeQualifiedName(
294 lldb::opaque_compiler_type_t opaque_decl_ctx) override;
296 CompilerType CreateBaseType(const ConstString &name);
298 CompilerType CreateObjectType(const ConstString &name,
299 const ConstString &linkage_name,
302 CompilerType CreateArrayType(const ConstString &linkage_name,
303 const CompilerType &element_type,
304 const DWARFExpression &length_expression,
305 const lldb::addr_t data_offset);
307 CompilerType CreateReferenceType(const CompilerType &pointee_type);
309 void CompleteObjectType(const CompilerType &object_type);
311 void AddBaseClassToObject(const CompilerType &object_type,
312 const CompilerType &member_type,
313 uint32_t member_offset);
315 void AddMemberToObject(const CompilerType &object_type,
316 const ConstString &name,
317 const CompilerType &member_type,
318 uint32_t member_offset);
320 void SetDynamicTypeId(const CompilerType &type,
321 const DWARFExpression &type_id);
323 static uint64_t CalculateDynamicTypeId(ExecutionContext *exe_ctx,
324 const CompilerType &type,
325 ValueObject &in_value);
327 static ConstString GetLinkageName(const CompilerType &type);
329 static uint32_t CalculateArraySize(const CompilerType &type,
330 ValueObject &in_value);
332 static uint64_t CalculateArrayElementOffset(const CompilerType &type,
335 //------------------------------------------------------------------
336 // llvm casting support
337 //------------------------------------------------------------------
338 static bool classof(const TypeSystem *ts) {
339 return ts->getKind() == TypeSystem::eKindJava;
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;
350 JavaASTContext(const JavaASTContext &) = delete;
351 const JavaASTContext &operator=(const JavaASTContext &) = delete;
354 #endif // liblldb_JavaASTContext_h_