[Lldb-commits] [lldb] r179253 - Changed the way ClangExpressionDeclMap registers

Sean Callanan scallanan at apple.com
Wed Apr 10 19:05:12 PDT 2013


Author: spyffe
Date: Wed Apr 10 21:05:11 2013
New Revision: 179253

URL: http://llvm.org/viewvc/llvm-project?rev=179253&view=rev
Log:
Changed the way ClangExpressionDeclMap registers
entities with the new Materializer so that it only
registers those entities that actually need to be
placed in the struct.

Modified:
    lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp

Modified: lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp?rev=179253&r1=179252&r2=179253&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionDeclMap.cpp Wed Apr 10 21:05:11 2013
@@ -520,6 +520,12 @@ ClangExpressionDeclMap::AddPersistentVar
     parser_vars->m_named_decl = decl;
     parser_vars->m_parser_type = parser_type;
     
+    if (m_parser_vars->m_materializer)
+    {
+        Error err;
+        m_parser_vars->m_materializer->AddResultVariable(user_type, err);
+    }
+    
     return true;
 }
 
@@ -536,6 +542,8 @@ ClangExpressionDeclMap::AddValueToStruct
     assert (m_struct_vars.get());
     assert (m_parser_vars.get());
     
+    bool is_persistent_variable = false;
+    
     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
     
     m_struct_vars->m_struct_laid_out = false;
@@ -546,7 +554,10 @@ ClangExpressionDeclMap::AddValueToStruct
     ClangExpressionVariableSP var_sp (m_found_entities.GetVariable(decl, GetParserID()));
     
     if (!var_sp)
+    {
         var_sp = m_parser_vars->m_persistent_vars->GetVariable(decl, GetParserID());
+        is_persistent_variable = true;
+    }
     
     if (!var_sp)
         return false;
@@ -573,6 +584,25 @@ ClangExpressionDeclMap::AddValueToStruct
     
     m_struct_members.AddVariable(var_sp);
     
+    if (m_parser_vars->m_materializer)
+    {
+        Error err;
+
+        if (is_persistent_variable)
+        {
+            m_parser_vars->m_materializer->AddPersistentVariable(var_sp, err);
+        }
+        else
+        {
+            if (const lldb_private::Symbol *sym = parser_vars->m_lldb_sym)
+                m_parser_vars->m_materializer->AddSymbol(*sym, err);
+            else if (const RegisterInfo *reg_info = var_sp->GetRegisterInfo())
+                m_parser_vars->m_materializer->AddRegister(*reg_info, err);
+            else if (parser_vars->m_lldb_var)
+                m_parser_vars->m_materializer->AddVariable(parser_vars->m_lldb_var, err);
+        }
+    }
+    
     return true;
 }
 
@@ -3412,12 +3442,6 @@ ClangExpressionDeclMap::AddOneVariable (
     ConstString entity_name(decl_name.c_str());
     ClangExpressionVariableSP entity(m_found_entities.CreateVariable (valobj));
     
-    if (m_parser_vars->m_materializer)
-    {
-        Error err;
-        m_parser_vars->m_materializer->AddVariable(var, err);
-    }
-    
     assert (entity.get());
     entity->EnableParserVars(GetParserID());
     ClangExpressionVariable::ParserVars *parser_vars = entity->GetParserVars(GetParserID());
@@ -3508,12 +3532,6 @@ ClangExpressionDeclMap::AddOneGenericVar
                                                                       m_parser_vars->m_target_info.address_byte_size));
     assert (entity.get());
     
-    if (m_parser_vars->m_materializer)
-    {
-        Error err;
-        m_parser_vars->m_materializer->AddSymbol(symbol, err);
-    }
-    
     std::auto_ptr<Value> symbol_location(new Value);
     
     const Address &symbol_address = symbol.GetAddress();
@@ -3629,12 +3647,6 @@ ClangExpressionDeclMap::AddOneRegister (
                                                                       m_parser_vars->m_target_info.address_byte_size));
     assert (entity.get());
     
-    if (m_parser_vars->m_materializer && reg_info)
-    {
-        Error err;
-        m_parser_vars->m_materializer->AddRegister(*reg_info, err);
-    }
-    
     std::string decl_name(context.m_decl_name.getAsString());
     entity->SetName (ConstString (decl_name.c_str()));
     entity->SetRegisterInfo (reg_info);





More information about the lldb-commits mailing list