[Lldb-commits] [lldb] r142561 - in /lldb/trunk: include/lldb/Expression/ASTDumper.h source/Expression/ASTDumper.cpp source/Expression/ClangExpressionDeclMap.cpp

Greg Clayton gclayton at apple.com
Wed Oct 19 17:47:21 PDT 2011


Author: gclayton
Date: Wed Oct 19 19:47:21 2011
New Revision: 142561

URL: http://llvm.org/viewvc/llvm-project?rev=142561&view=rev
Log:
Modified the ASTDumper to return a "const char *" instead of a copy of the
std::string and modified all places that used the std::string it returned
to use the "const char *".

Also modified the expression parser to not crash when a function type fails
to copy into the expression AST context.


Modified:
    lldb/trunk/include/lldb/Expression/ASTDumper.h
    lldb/trunk/source/Expression/ASTDumper.cpp
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp

Modified: lldb/trunk/include/lldb/Expression/ASTDumper.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ASTDumper.h?rev=142561&r1=142560&r2=142561&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ASTDumper.h (original)
+++ lldb/trunk/include/lldb/Expression/ASTDumper.h Wed Oct 19 19:47:21 2011
@@ -26,7 +26,7 @@
     ASTDumper (clang::QualType type);
     ASTDumper (lldb::clang_type_t type);
     
-    std::string AsString();
+    const char *GetCString();
     void ToSTDERR();
     void ToLog(lldb::LogSP &log, const char *prefix);
     void ToStream(lldb::StreamSP &stream);

Modified: lldb/trunk/source/Expression/ASTDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ASTDumper.cpp?rev=142561&r1=142560&r2=142561&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ASTDumper.cpp (original)
+++ lldb/trunk/source/Expression/ASTDumper.cpp Wed Oct 19 19:47:21 2011
@@ -78,9 +78,10 @@
     m_dump = clang::QualType::getFromOpaquePtr(type).getAsString();
 }
     
-std::string ASTDumper::AsString()
+const char *
+ASTDumper::GetCString()
 {
-    return m_dump;
+    return m_dump.c_str();
 }
 
 void ASTDumper::ToSTDERR()

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=142561&r1=142560&r2=142561&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Wed Oct 19 19:47:21 2011
@@ -2180,8 +2180,8 @@
             
             if (log)
             {
-                std::string type_string = ASTDumper(pointer_target_qual_type).AsString();
-                log->Printf("  FEVD[%u] Adding type for $__lldb_class: %s", current_id, type_string.c_str());
+                ASTDumper ast_dumper(pointer_target_qual_type);
+                log->Printf("  FEVD[%u] Adding type for $__lldb_class: %s", current_id, ast_dumper.GetCString());
             }
             
             AddOneType(context, class_user_type, current_id, true);
@@ -2231,8 +2231,8 @@
             
             if (log)
             {
-                std::string type_string = ASTDumper(pointer_target_type).AsString();
-                log->Printf("  FEVD[%u] Adding type for $__lldb_objc_class: %s", current_id, type_string.c_str());
+                ASTDumper ast_dumper(pointer_target_type);
+                log->Printf("  FEVD[%u] Adding type for $__lldb_objc_class: %s", current_id, ast_dumper.GetCString());
             }
             
             AddOneType(context, class_user_type, current_id, false);
@@ -2591,12 +2591,11 @@
         {
             if (log)
             {
-                std::string decl_print_string = ASTDumper(decl).AsString();
-                
+                ASTDumper ast_dumper(decl);
                 if (const NamedDecl *context_named_decl = dyn_cast<NamedDecl>(context_decl))
-                    log->Printf("  FELD[%d] Adding [to %s] lexical decl %s", current_id, context_named_decl->getNameAsString().c_str(), decl_print_string.c_str());
+                    log->Printf("  FELD[%d] Adding [to %s] lexical decl %s", current_id, context_named_decl->getNameAsString().c_str(), ast_dumper.GetCString());
                 else
-                    log->Printf("  FELD[%d] Adding lexical decl %s", current_id, decl_print_string.c_str());
+                    log->Printf("  FELD[%d] Adding lexical decl %s", current_id, ast_dumper.GetCString());
             }
                         
             Decl *copied_decl = ast_importer->CopyDecl(original_ctx, decl);
@@ -2776,9 +2775,8 @@
     
     if (log)
     {
-        std::string var_decl_print_string = ASTDumper(var_decl).AsString();
-        
-        log->Printf("  FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), var_decl_print_string.c_str());
+        ASTDumper ast_dumper(var_decl);        
+        log->Printf("  FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString());
     }
 }
 
@@ -2806,9 +2804,8 @@
     
     if (log)
     {
-        std::string var_decl_print_string = ASTDumper(var_decl).AsString();
-        
-        log->Printf("  FEVD[%u] Added pvar %s, returned %s", current_id, pvar_sp->GetName().GetCString(), var_decl_print_string.c_str());
+        ASTDumper ast_dumper(var_decl);
+        log->Printf("  FEVD[%u] Added pvar %s, returned %s", current_id, pvar_sp->GetName().GetCString(), ast_dumper.GetCString());
     }
 }
 
@@ -2865,9 +2862,9 @@
     
     if (log)
     {
-        std::string var_decl_print_string = ASTDumper(var_decl).AsString();
+        ASTDumper ast_dumper(var_decl);
         
-        log->Printf("  FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), var_decl_print_string.c_str());
+        log->Printf("  FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString());
     }
 }
 
@@ -2899,9 +2896,8 @@
             
             if (log)
             {
-                std::string var_decl_print_string = ASTDumper((clang::Decl*)var_decl).AsString();
-            
-                log->Printf("Variable of unknown type now has Decl %s", var_decl_print_string.c_str());
+                ASTDumper ast_dumper(const_cast<VarDecl*>(var_decl));
+                log->Printf("Variable of unknown type now has Decl %s", ast_dumper.GetCString());
             }
                 
             QualType var_type = var_decl->getType();
@@ -2962,9 +2958,8 @@
     
     if (log && log->GetVerbose())
     {
-        std::string var_decl_print_string = ASTDumper(var_decl).AsString();
-        
-        log->Printf("  FEVD[%d] Added register %s, returned %s", current_id, context.m_decl_name.getAsString().c_str(), var_decl_print_string.c_str());
+        ASTDumper ast_dumper(var_decl);
+        log->Printf("  FEVD[%d] Added register %s, returned %s", current_id, context.m_decl_name.getAsString().c_str(), ast_dumper.GetCString());
     }
 }
 
@@ -3032,8 +3027,20 @@
         
         fun_ast_context = fun_type->GetClangASTContext().getASTContext();
         void *copied_type = GuardedCopyType(context.GetASTContext(), fun_ast_context, fun_opaque_type);
-        
-        fun_decl = context.AddFunDecl(copied_type);
+        if (copied_type)
+        {
+            fun_decl = context.AddFunDecl(copied_type);
+        }
+        else
+        {
+            // We failed to copy the type we found
+            if (log)
+            {
+                log->Printf ("  Failed to import the function type '%s' {0x%8.8llx} into the expression parser AST contenxt",
+                             fun_type->GetName().GetCString(), 
+                             fun_type->GetID());
+            }
+        }
     }
     else if (symbol)
     {
@@ -3070,13 +3077,13 @@
         
     if (log)
     {
-        std::string fun_decl_print_string = ASTDumper(fun_decl).AsString();
+        ASTDumper ast_dumper(fun_decl);
         
         log->Printf("  FEVD[%u] Found %s function %s, returned %s", 
                     current_id,
                     (fun ? "specific" : "generic"), 
                     decl_name.c_str(), 
-                    fun_decl_print_string.c_str());
+                    ast_dumper.GetCString());
     }
 }
 





More information about the lldb-commits mailing list