Author: enrico Date: Tue Aug 30 15:39:58 2016 New Revision: 280151 URL: http://llvm.org/viewvc/llvm-project?rev=280151&view=rev Log: Add SBType::GetArrayType() such that - given a type - one can make an array (of a given size) of that type
This is currently only implemented for the clang-based TypeSystem, but other languages are welcome to jump in! Modified: lldb/trunk/include/lldb/API/SBType.h lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/CompilerType.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/scripts/interface/SBType.i lldb/trunk/source/API/SBType.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Symbol/CompilerType.cpp lldb/trunk/source/Symbol/TypeSystem.cpp Modified: lldb/trunk/include/lldb/API/SBType.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBType.h?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/include/lldb/API/SBType.h (original) +++ lldb/trunk/include/lldb/API/SBType.h Tue Aug 30 15:39:58 2016 @@ -189,6 +189,9 @@ public: GetArrayElementType (); lldb::SBType + GetArrayType (uint64_t size); + + lldb::SBType GetVectorElementType (); lldb::SBType Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Aug 30 15:39:58 2016 @@ -790,6 +790,9 @@ public: GetArrayElementType (lldb::opaque_compiler_type_t type, uint64_t *stride) override; CompilerType + GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size) override; + + CompilerType GetCanonicalType (lldb::opaque_compiler_type_t type) override; CompilerType Modified: lldb/trunk/include/lldb/Symbol/CompilerType.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/CompilerType.h (original) +++ lldb/trunk/include/lldb/Symbol/CompilerType.h Tue Aug 30 15:39:58 2016 @@ -269,6 +269,9 @@ public: GetArrayElementType(uint64_t *stride = nullptr) const; CompilerType + GetArrayType (uint64_t size) const; + + CompilerType GetCanonicalType () const; CompilerType Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original) +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Aug 30 15:39:58 2016 @@ -274,6 +274,9 @@ public: GetArrayElementType (lldb::opaque_compiler_type_t type, uint64_t *stride) = 0; virtual CompilerType + GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size); + + virtual CompilerType GetCanonicalType (lldb::opaque_compiler_type_t type) = 0; // Returns -1 if this isn't a function of if the function doesn't have a prototype Modified: lldb/trunk/scripts/interface/SBType.i URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBType.i?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/scripts/interface/SBType.i (original) +++ lldb/trunk/scripts/interface/SBType.i Tue Aug 30 15:39:58 2016 @@ -247,6 +247,9 @@ public: lldb::SBType GetArrayElementType (); + + lldb::SBType + GetArrayType (uint64_t size); lldb::SBType GetVectorElementType (); Modified: lldb/trunk/source/API/SBType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/source/API/SBType.cpp (original) +++ lldb/trunk/source/API/SBType.cpp Tue Aug 30 15:39:58 2016 @@ -229,6 +229,14 @@ SBType::GetArrayElementType() } SBType +SBType::GetArrayType (uint64_t size) +{ + if (!IsValid()) + return SBType(); + return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetCompilerType(true).GetArrayType(size)))); +} + +SBType SBType::GetVectorElementType () { SBType type_sb; Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original) +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Tue Aug 30 15:39:58 2016 @@ -4566,6 +4566,24 @@ ClangASTContext::GetArrayElementType (ll } CompilerType +ClangASTContext::GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size) +{ + if (type) + { + clang::QualType qual_type(GetCanonicalQualType(type)); + if (clang::ASTContext *ast_ctx = getASTContext()) + { + if (size == 0) + return CompilerType (ast_ctx, ast_ctx->getConstantArrayType(qual_type, llvm::APInt(64, size), clang::ArrayType::ArraySizeModifier::Normal, 0)); + else + return CompilerType (ast_ctx, ast_ctx->getIncompleteArrayType(qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0)); + } + } + + return CompilerType(); +} + +CompilerType ClangASTContext::GetCanonicalType (lldb::opaque_compiler_type_t type) { if (type) Modified: lldb/trunk/source/Symbol/CompilerType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerType.cpp?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/source/Symbol/CompilerType.cpp (original) +++ lldb/trunk/source/Symbol/CompilerType.cpp Tue Aug 30 15:39:58 2016 @@ -467,7 +467,16 @@ CompilerType::GetArrayElementType (uint6 if (IsValid()) { return m_type_system->GetArrayElementType(m_type, stride); - + } + return CompilerType(); +} + +CompilerType +CompilerType::GetArrayType (uint64_t size) const +{ + if (IsValid()) + { + return m_type_system->GetArrayType(m_type, size); } return CompilerType(); } Modified: lldb/trunk/source/Symbol/TypeSystem.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/TypeSystem.cpp?rev=280151&r1=280150&r2=280151&view=diff ============================================================================== --- lldb/trunk/source/Symbol/TypeSystem.cpp (original) +++ lldb/trunk/source/Symbol/TypeSystem.cpp Tue Aug 30 15:39:58 2016 @@ -62,6 +62,12 @@ TypeSystem::IsAnonymousType (lldb::opaqu } CompilerType +TypeSystem::GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size) +{ + return CompilerType(); +} + +CompilerType TypeSystem::GetLValueReferenceType (lldb::opaque_compiler_type_t type) { return CompilerType(); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits