<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">The plan is definitely to have one</div><div class=""><br class=""></div><div class="">I am not done yet with being ready to use this though; the wait should be short enough that you can hold your breath through it :-)</div><br class=""><div><blockquote type="cite" class=""><div class="">On Aug 30, 2016, at 2:29 PM, Zachary Turner <<a href="mailto:zturner@google.com" class="">zturner@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Is there going to be a test for this?</div><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Tue, Aug 30, 2016 at 1:48 PM Enrico Granata via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" class="">lldb-commits@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: enrico<br class="">
Date: Tue Aug 30 15:39:58 2016<br class="">
New Revision: 280151<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=280151&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=280151&view=rev</a><br class="">
Log:<br class="">
Add SBType::GetArrayType() such that - given a type - one can make an array (of a given size) of that type<br class="">
<br class="">
This is currently only implemented for the clang-based TypeSystem, but other languages are welcome to jump in!<br class="">
<br class="">
<br class="">
Modified:<br class="">
    lldb/trunk/include/lldb/API/SBType.h<br class="">
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br class="">
    lldb/trunk/include/lldb/Symbol/CompilerType.h<br class="">
    lldb/trunk/include/lldb/Symbol/TypeSystem.h<br class="">
    lldb/trunk/scripts/interface/SBType.i<br class="">
    lldb/trunk/source/API/SBType.cpp<br class="">
    lldb/trunk/source/Symbol/ClangASTContext.cpp<br class="">
    lldb/trunk/source/Symbol/CompilerType.cpp<br class="">
    lldb/trunk/source/Symbol/TypeSystem.cpp<br class="">
<br class="">
Modified: lldb/trunk/include/lldb/API/SBType.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBType.h?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBType.h?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/include/lldb/API/SBType.h (original)<br class="">
+++ lldb/trunk/include/lldb/API/SBType.h Tue Aug 30 15:39:58 2016<br class="">
@@ -189,6 +189,9 @@ public:<br class="">
     GetArrayElementType ();<br class="">
<br class="">
     lldb::SBType<br class="">
+    GetArrayType (uint64_t size);<br class="">
+<br class="">
+    lldb::SBType<br class="">
     GetVectorElementType ();<br class="">
<br class="">
     lldb::SBType<br class="">
<br class="">
Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)<br class="">
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Aug 30 15:39:58 2016<br class="">
@@ -790,6 +790,9 @@ public:<br class="">
     GetArrayElementType (lldb::opaque_compiler_type_t type, uint64_t *stride) override;<br class="">
<br class="">
     CompilerType<br class="">
+    GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size) override;<br class="">
+<br class="">
+    CompilerType<br class="">
     GetCanonicalType (lldb::opaque_compiler_type_t type) override;<br class="">
<br class="">
     CompilerType<br class="">
<br class="">
Modified: lldb/trunk/include/lldb/Symbol/CompilerType.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/include/lldb/Symbol/CompilerType.h (original)<br class="">
+++ lldb/trunk/include/lldb/Symbol/CompilerType.h Tue Aug 30 15:39:58 2016<br class="">
@@ -269,6 +269,9 @@ public:<br class="">
     GetArrayElementType(uint64_t *stride = nullptr) const;<br class="">
<br class="">
     CompilerType<br class="">
+    GetArrayType (uint64_t size) const;<br class="">
+<br class="">
+    CompilerType<br class="">
     GetCanonicalType () const;<br class="">
<br class="">
     CompilerType<br class="">
<br class="">
Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original)<br class="">
+++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Aug 30 15:39:58 2016<br class="">
@@ -274,6 +274,9 @@ public:<br class="">
     GetArrayElementType (lldb::opaque_compiler_type_t type, uint64_t *stride) = 0;<br class="">
<br class="">
     virtual CompilerType<br class="">
+    GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size);<br class="">
+<br class="">
+    virtual CompilerType<br class="">
     GetCanonicalType (lldb::opaque_compiler_type_t type) = 0;<br class="">
<br class="">
     // Returns -1 if this isn't a function of if the function doesn't have a prototype<br class="">
<br class="">
Modified: lldb/trunk/scripts/interface/SBType.i<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBType.i?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBType.i?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/scripts/interface/SBType.i (original)<br class="">
+++ lldb/trunk/scripts/interface/SBType.i Tue Aug 30 15:39:58 2016<br class="">
@@ -247,6 +247,9 @@ public:<br class="">
<br class="">
     lldb::SBType<br class="">
     GetArrayElementType ();<br class="">
+<br class="">
+    lldb::SBType<br class="">
+    GetArrayType (uint64_t size);<br class="">
<br class="">
     lldb::SBType<br class="">
     GetVectorElementType ();<br class="">
<br class="">
Modified: lldb/trunk/source/API/SBType.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/source/API/SBType.cpp (original)<br class="">
+++ lldb/trunk/source/API/SBType.cpp Tue Aug 30 15:39:58 2016<br class="">
@@ -229,6 +229,14 @@ SBType::GetArrayElementType()<br class="">
 }<br class="">
<br class="">
 SBType<br class="">
+SBType::GetArrayType (uint64_t size)<br class="">
+{<br class="">
+    if (!IsValid())<br class="">
+        return SBType();<br class="">
+    return SBType(TypeImplSP(new TypeImpl(m_opaque_sp->GetCompilerType(true).GetArrayType(size))));<br class="">
+}<br class="">
+<br class="">
+SBType<br class="">
 SBType::GetVectorElementType ()<br class="">
 {<br class="">
     SBType type_sb;<br class="">
<br class="">
Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)<br class="">
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Tue Aug 30 15:39:58 2016<br class="">
@@ -4566,6 +4566,24 @@ ClangASTContext::GetArrayElementType (ll<br class="">
 }<br class="">
<br class="">
 CompilerType<br class="">
+ClangASTContext::GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size)<br class="">
+{<br class="">
+    if (type)<br class="">
+    {<br class="">
+        clang::QualType qual_type(GetCanonicalQualType(type));<br class="">
+        if (clang::ASTContext *ast_ctx = getASTContext())<br class="">
+        {<br class="">
+            if (size == 0)<br class="">
+                return CompilerType (ast_ctx, ast_ctx->getConstantArrayType(qual_type, llvm::APInt(64, size), clang::ArrayType::ArraySizeModifier::Normal, 0));<br class="">
+            else<br class="">
+                return CompilerType (ast_ctx, ast_ctx->getIncompleteArrayType(qual_type, clang::ArrayType::ArraySizeModifier::Normal, 0));<br class="">
+        }<br class="">
+    }<br class="">
+<br class="">
+    return CompilerType();<br class="">
+}<br class="">
+<br class="">
+CompilerType<br class="">
 ClangASTContext::GetCanonicalType (lldb::opaque_compiler_type_t type)<br class="">
 {<br class="">
     if (type)<br class="">
<br class="">
Modified: lldb/trunk/source/Symbol/CompilerType.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerType.cpp?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerType.cpp?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/source/Symbol/CompilerType.cpp (original)<br class="">
+++ lldb/trunk/source/Symbol/CompilerType.cpp Tue Aug 30 15:39:58 2016<br class="">
@@ -467,7 +467,16 @@ CompilerType::GetArrayElementType (uint6<br class="">
     if (IsValid())<br class="">
     {<br class="">
         return m_type_system->GetArrayElementType(m_type, stride);<br class="">
-<br class="">
+    }<br class="">
+    return CompilerType();<br class="">
+}<br class="">
+<br class="">
+CompilerType<br class="">
+CompilerType::GetArrayType (uint64_t size) const<br class="">
+{<br class="">
+    if (IsValid())<br class="">
+    {<br class="">
+        return m_type_system->GetArrayType(m_type, size);<br class="">
     }<br class="">
     return CompilerType();<br class="">
 }<br class="">
<br class="">
Modified: lldb/trunk/source/Symbol/TypeSystem.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/TypeSystem.cpp?rev=280151&r1=280150&r2=280151&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/TypeSystem.cpp?rev=280151&r1=280150&r2=280151&view=diff</a><br class="">
==============================================================================<br class="">
--- lldb/trunk/source/Symbol/TypeSystem.cpp (original)<br class="">
+++ lldb/trunk/source/Symbol/TypeSystem.cpp Tue Aug 30 15:39:58 2016<br class="">
@@ -62,6 +62,12 @@ TypeSystem::IsAnonymousType (lldb::opaqu<br class="">
 }<br class="">
<br class="">
 CompilerType<br class="">
+TypeSystem::GetArrayType (lldb::opaque_compiler_type_t type, uint64_t size)<br class="">
+{<br class="">
+    return CompilerType();<br class="">
+}<br class="">
+<br class="">
+CompilerType<br class="">
 TypeSystem::GetLValueReferenceType (lldb::opaque_compiler_type_t type)<br class="">
 {<br class="">
     return CompilerType();<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
lldb-commits mailing list<br class="">
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank" class="">lldb-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""><div class="">
<div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class="Apple-interchange-newline">Thanks,</div><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><i class="">- Enrico</i><br class="">📩 egranata@<font color="#ff2600" class=""></font>.com ☎️ 27683</div>
</div>
<br class=""></body></html>