<div dir="ltr"><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 8, 2015 at 3:10 PM Enrico Granata via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: enrico<br>
Date: Tue Sep  8 17:09:19 2015<br>
New Revision: 247082<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=247082&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=247082&view=rev</a><br>
Log:<br>
Implement a Target::GetTypeSystemForLanguage API, as well as provide helpers on the TypeSystem to get numeric types of specific sizes and signedness<br>
<br>
Modified:<br>
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br>
    lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
    lldb/trunk/include/lldb/Target/Target.h<br>
    lldb/trunk/source/DataFormatters/CoreMedia.cpp<br>
    lldb/trunk/source/DataFormatters/VectorType.cpp<br>
    lldb/trunk/source/Target/Target.cpp<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Sep  8 17:09:19 2015<br>
@@ -454,7 +454,7 @@ public:<br>
     //------------------------------------------------------------------<br>
<br>
     CompilerType<br>
-    GetIntTypeFromBitSize (size_t bit_size, bool is_signed)<br>
+    GetIntTypeFromBitSize (size_t bit_size, bool is_signed) override<br>
     {<br>
         return GetIntTypeFromBitSize (getASTContext(), bit_size, is_signed);<br>
     }<br>
@@ -477,7 +477,7 @@ public:<br>
     //------------------------------------------------------------------<br>
<br>
     CompilerType<br>
-    GetFloatTypeFromBitSize (size_t bit_size)<br>
+    GetFloatTypeFromBitSize (size_t bit_size) override<br>
     {<br>
         return GetFloatTypeFromBitSize (getASTContext(), bit_size);<br>
     }<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Sep  8 17:09:19 2015<br>
@@ -400,6 +400,12 @@ public:<br>
     virtual CompilerType<br>
     GetBasicTypeFromAST (lldb::BasicType basic_type) = 0;<br>
<br>
+    virtual CompilerType<br>
+    GetIntTypeFromBitSize (size_t bit_size, bool is_signed) = 0;<br>
+<br>
+    virtual CompilerType<br>
+    GetFloatTypeFromBitSize (size_t bit_size) = 0;<br>
+<br></blockquote><div><br></div><div>Why do these need to be here? It seems like everything using these is clang specific.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     virtual bool<br>
     IsBeingDefined (void *type) = 0;<br>
<br>
<br>
Modified: lldb/trunk/include/lldb/Target/Target.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Target/Target.h (original)<br>
+++ lldb/trunk/include/lldb/Target/Target.h Tue Sep  8 17:09:19 2015<br>
@@ -1230,6 +1230,14 @@ public:<br>
     ClangASTContext *<br>
     GetScratchClangASTContext(bool create_on_demand=true);<br>
<br>
+    TypeSystem*<br>
+    GetTypeSystemForLanguage (lldb::LanguageType language);<br>
+<br>
+    CompilerType<br>
+    GetBasicType (lldb::LanguageType language,<br>
+                  lldb::BasicType basic_type,<br>
+                  size_t size = 0);<br>
+<br></blockquote><div><br></div><div>Again, I'm not sure why this needs to be here when all uses are clang specific.</div><div>If it needs to be here, can you add some documentation?</div><div>When writing a new TypeSystem, does it need to be added to GetTypeSystemForLanguage?</div><div>How would it be used? Do types from this "scratch" type system need to interact with types from a real, symbol file backed type system? What if the sizes of basic types aren't standardized and need to be lookup up in the debug info?</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     ClangASTImporter *<br>
     GetClangASTImporter();<br>
<br>
<br>
Modified: lldb/trunk/source/DataFormatters/CoreMedia.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CoreMedia.cpp?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CoreMedia.cpp?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/DataFormatters/CoreMedia.cpp (original)<br>
+++ lldb/trunk/source/DataFormatters/CoreMedia.cpp Tue Sep  8 17:09:19 2015<br>
@@ -10,7 +10,7 @@<br>
 #include "lldb/DataFormatters/CoreMedia.h"<br>
<br>
 #include "lldb/Core/Flags.h"<br>
-#include "lldb/Symbol/ClangASTContext.h"<br>
+#include "lldb/Symbol/TypeSystem.h"<br>
 #include "lldb/Target/Target.h"<br>
 #include <inttypes.h><br>
<br>
@@ -25,13 +25,13 @@ lldb_private::formatters::CMTimeSummaryP<br>
     if (!type.IsValid())<br>
         return false;<br>
<br>
-    ClangASTContext *ast_ctx = valobj.GetExecutionContextRef().GetTargetSP()->GetScratchClangASTContext();<br>
-    if (!ast_ctx)<br>
+    TypeSystem *type_system = valobj.GetExecutionContextRef().GetTargetSP()->GetTypeSystemForLanguage(lldb::eLanguageTypeC);<br>
+    if (!type_system)<br>
         return false;<br>
<br>
     // fetch children by offset to compensate for potential lack of debug info<br>
-    auto int64_ty = ast_ctx->GetIntTypeFromBitSize(64, true);<br>
-    auto int32_ty = ast_ctx->GetIntTypeFromBitSize(32, true);<br>
+    auto int64_ty = type_system->GetIntTypeFromBitSize(64, true);<br>
+    auto int32_ty = type_system->GetIntTypeFromBitSize(32, true);<br>
<br>
     auto value_sp(valobj.GetSyntheticChildAtOffset(0, int64_ty, true));<br>
     auto timescale_sp(valobj.GetSyntheticChildAtOffset(8, int32_ty, true));<br>
<br>
Modified: lldb/trunk/source/DataFormatters/VectorType.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/VectorType.cpp?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/VectorType.cpp?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/DataFormatters/VectorType.cpp (original)<br>
+++ lldb/trunk/source/DataFormatters/VectorType.cpp Tue Sep  8 17:09:19 2015<br>
@@ -11,8 +11,8 @@<br>
<br>
 #include "lldb/Core/ValueObject.h"<br>
 #include "lldb/DataFormatters/FormattersHelpers.h"<br>
-#include "lldb/Symbol/ClangASTContext.h"<br>
 #include "lldb/Symbol/CompilerType.h"<br>
+#include "lldb/Symbol/TypeSystem.h"<br>
<br>
 #include "lldb/Utility/LLDBAssert.h"<br>
<br>
@@ -22,85 +22,85 @@ using namespace lldb_private::formatters<br>
<br>
 static CompilerType<br>
 GetCompilerTypeForFormat (lldb::Format format,<br>
-                       CompilerType element_type,<br>
-                       ClangASTContext *ast_ctx)<br>
+                          CompilerType element_type,<br>
+                          TypeSystem *type_system)<br>
 {<br>
-    lldbassert(ast_ctx && "ast_ctx needs to be not NULL");<br>
+    lldbassert(type_system && "type_system needs to be not NULL");<br>
<br>
     switch (format)<br>
     {<br>
         case lldb::eFormatAddressInfo:<br>
         case lldb::eFormatPointer:<br>
-            return ast_ctx->GetPointerSizedIntType(false);<br>
+            return type_system->GetIntTypeFromBitSize(8*type_system->GetPointerByteSize(), false);<br>
<br>
         case lldb::eFormatBoolean:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeBool);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeBool);<br>
<br>
         case lldb::eFormatBytes:<br>
         case lldb::eFormatBytesWithASCII:<br>
         case lldb::eFormatChar:<br>
         case lldb::eFormatCharArray:<br>
         case lldb::eFormatCharPrintable:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeChar);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar);<br>
<br>
         case lldb::eFormatComplex /* lldb::eFormatComplexFloat */:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeFloatComplex);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloatComplex);<br>
<br>
         case lldb::eFormatCString:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeChar).GetPointerType();<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar).GetPointerType();<br>
<br>
         case lldb::eFormatFloat:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeFloat);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloat);<br>
<br>
         case lldb::eFormatHex:<br>
         case lldb::eFormatHexUppercase:<br>
         case lldb::eFormatOctal:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeInt);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeInt);<br>
<br>
         case lldb::eFormatHexFloat:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeFloat);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeFloat);<br>
<br>
         case lldb::eFormatUnicode16:<br>
         case lldb::eFormatUnicode32:<br>
<br>
         case lldb::eFormatUnsigned:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeUnsignedInt);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeUnsignedInt);<br>
<br>
         case lldb::eFormatVectorOfChar:<br>
-            return ast_ctx->GetBasicType(lldb::eBasicTypeChar);<br>
+            return type_system->GetBasicTypeFromAST(lldb::eBasicTypeChar);<br>
<br>
         case lldb::eFormatVectorOfFloat32:<br>
-            return ast_ctx->GetFloatTypeFromBitSize(32);<br>
+            return type_system->GetFloatTypeFromBitSize(32);<br>
<br>
         case lldb::eFormatVectorOfFloat64:<br>
-            return ast_ctx->GetFloatTypeFromBitSize(64);<br>
+            return type_system->GetFloatTypeFromBitSize(64);<br>
<br>
         case lldb::eFormatVectorOfSInt16:<br>
-            return ast_ctx->GetIntTypeFromBitSize(16, true);<br>
+            return type_system->GetIntTypeFromBitSize(16, true);<br>
<br>
         case lldb::eFormatVectorOfSInt32:<br>
-            return ast_ctx->GetIntTypeFromBitSize(32, true);<br>
+            return type_system->GetIntTypeFromBitSize(32, true);<br>
<br>
         case lldb::eFormatVectorOfSInt64:<br>
-            return ast_ctx->GetIntTypeFromBitSize(64, true);<br>
+            return type_system->GetIntTypeFromBitSize(64, true);<br>
<br>
         case lldb::eFormatVectorOfSInt8:<br>
-            return ast_ctx->GetIntTypeFromBitSize(8, true);<br>
+            return type_system->GetIntTypeFromBitSize(8, true);<br>
<br>
         case lldb::eFormatVectorOfUInt128:<br>
-            return ast_ctx->GetIntTypeFromBitSize(128, false);<br>
+            return type_system->GetIntTypeFromBitSize(128, false);<br>
<br>
         case lldb::eFormatVectorOfUInt16:<br>
-            return ast_ctx->GetIntTypeFromBitSize(16, false);<br>
+            return type_system->GetIntTypeFromBitSize(16, false);<br>
<br>
         case lldb::eFormatVectorOfUInt32:<br>
-            return ast_ctx->GetIntTypeFromBitSize(32, false);<br>
+            return type_system->GetIntTypeFromBitSize(32, false);<br>
<br>
         case lldb::eFormatVectorOfUInt64:<br>
-            return ast_ctx->GetIntTypeFromBitSize(64, false);<br>
+            return type_system->GetIntTypeFromBitSize(64, false);<br>
<br>
         case lldb::eFormatVectorOfUInt8:<br>
-            return ast_ctx->GetIntTypeFromBitSize(8, false);<br>
+            return type_system->GetIntTypeFromBitSize(8, false);<br>
<br>
         case lldb::eFormatDefault:<br>
             return element_type;<br>
@@ -113,7 +113,7 @@ GetCompilerTypeForFormat (lldb::Format f<br>
         case lldb::eFormatOSType:<br>
         case lldb::eFormatVoid:<br>
         default:<br>
-            return ast_ctx->GetIntTypeFromBitSize(8, false);<br>
+            return type_system->GetIntTypeFromBitSize(8, false);<br>
     }<br>
 }<br>
<br>
@@ -232,7 +232,10 @@ namespace lldb_private {<br>
                 CompilerType parent_type(m_backend.GetCompilerType());<br>
                 CompilerType element_type;<br>
                 parent_type.IsVectorType(&element_type, nullptr);<br>
-                m_child_type = ::GetCompilerTypeForFormat(m_parent_format, element_type, llvm::dyn_cast_or_null<ClangASTContext>(parent_type.GetTypeSystem()));<br>
+                TargetSP target_sp(m_backend.GetTargetSP());<br>
+                m_child_type = ::GetCompilerTypeForFormat(m_parent_format,<br>
+                                                          element_type,<br>
+                                                          target_sp ? target_sp->GetTypeSystemForLanguage(lldb::eLanguageTypeC) : nullptr);<br>
                 m_num_children = ::CalculateNumChildren(parent_type,<br>
                                                         m_child_type);<br>
                 m_item_format = GetItemFormatForFormat(m_parent_format,<br>
<br>
Modified: lldb/trunk/source/Target/Target.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=247082&r1=247081&r2=247082&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=247082&r1=247081&r2=247082&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Target/Target.cpp (original)<br>
+++ lldb/trunk/source/Target/Target.cpp Tue Sep  8 17:09:19 2015<br>
@@ -1906,6 +1906,27 @@ Target::GetScratchClangASTContext(bool c<br>
     return m_scratch_ast_context_ap.get();<br>
 }<br>
<br>
+TypeSystem*<br>
+Target::GetTypeSystemForLanguage (lldb::LanguageType language)<br>
+{<br>
+    switch (language)<br>
+    {<br>
+        case lldb::eLanguageTypeC:<br>
+        case lldb::eLanguageTypeC11:<br>
+        case lldb::eLanguageTypeC89:<br>
+        case lldb::eLanguageTypeC99:<br>
+        case lldb::eLanguageTypeC_plus_plus:<br>
+        case lldb::eLanguageTypeC_plus_plus_03:<br>
+        case lldb::eLanguageTypeC_plus_plus_11:<br>
+        case lldb::eLanguageTypeC_plus_plus_14:<br>
+        case lldb::eLanguageTypeObjC:<br>
+        case lldb::eLanguageTypeObjC_plus_plus:<br>
+            return GetScratchClangASTContext(true);<br>
+        default:<br>
+            return nullptr;<br>
+    }<br>
+}<br>
+<br>
 ClangASTImporter *<br>
 Target::GetClangASTImporter()<br>
 {<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div></div>