Author: spyffe
Date: Thu Oct  1 18:07:06 2015
New Revision: 249095

URL: http://llvm.org/viewvc/llvm-project?rev=249095&view=rev
Log:
Eliminated redundant "constructors" for ClangExpressionVariable.                
                                                                                
                                                       
                                                                                
                                                                                
                                                       
The ClangExpressionVariable::CreateVariableInList functions looked cute, but    
                                                                                
                                                       
caused more confusion than they solved.  I removed them, and instead made sure  
                                                                                
                                                       
that there are adequate facilities for easily adding newly-constructed          
                                                                                
                                                       
ExpressionVariables to lists.      

I also made some of the constructors that are common be generic, so that it's
possible to construct expression variables from generic places (like the ABI and
ValueObject) without having to know the specifics about the class.

Modified:
    lldb/trunk/include/lldb/Expression/ExpressionVariable.h
    lldb/trunk/source/Core/ValueObject.cpp
    lldb/trunk/source/Expression/Materializer.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h
    
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h
    lldb/trunk/source/Target/ABI.cpp

Modified: lldb/trunk/include/lldb/Expression/ExpressionVariable.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Expression/ExpressionVariable.h?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Expression/ExpressionVariable.h (original)
+++ lldb/trunk/include/lldb/Expression/ExpressionVariable.h Thu Oct  1 18:07:06 
2015
@@ -184,6 +184,14 @@ public:
         m_variables.push_back(var_sp);
         return m_variables.size() - 1;
     }
+    
+    lldb::ExpressionVariableSP
+    AddNewlyConstructedVariable (ExpressionVariable *var)
+    {
+        lldb::ExpressionVariableSP var_sp(var);
+        m_variables.push_back(var_sp);
+        return m_variables.back();
+    }
 
     bool
     ContainsVariable (const lldb::ExpressionVariableSP &var_sp)
@@ -283,6 +291,16 @@ public:
         m_kind(kind)
     {
     }
+    
+    virtual lldb::ExpressionVariableSP
+    CreatePersistentVariable (const lldb::ValueObjectSP &valobj_sp) = 0;
+    
+    virtual lldb::ExpressionVariableSP
+    CreatePersistentVariable (ExecutionContextScope *exe_scope,
+                              const ConstString &name,
+                              const CompilerType &type,
+                              lldb::ByteOrder byte_order,
+                              uint32_t addr_byte_size) = 0;
 
     virtual ~PersistentExpressionState ();
     

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Thu Oct  1 18:07:06 2015
@@ -4284,13 +4284,11 @@ ValueObject::Persist ()
     
     ConstString name(persistent_state->GetNextPersistentVariableName());
     
-    ExpressionVariableSP clang_var_sp(new 
ClangExpressionVariable(target_sp.get(), GetValue(), name));
-    if (clang_var_sp)
-    {
-        clang_var_sp->m_live_sp = clang_var_sp->m_frozen_sp;
-        clang_var_sp->m_flags |= ClangExpressionVariable::EVIsProgramReference;
-        persistent_state->AddVariable(clang_var_sp);
-    }
+    ValueObjectSP const_result_sp = ValueObjectConstResult::Create 
(target_sp.get(), GetValue(), name);
+    
+    ExpressionVariableSP clang_var_sp = 
persistent_state->CreatePersistentVariable(const_result_sp);
+    clang_var_sp->m_live_sp = clang_var_sp->m_frozen_sp;
+    clang_var_sp->m_flags |= ExpressionVariable::EVIsProgramReference;
     
     return clang_var_sp->GetValueObject();
 }

Modified: lldb/trunk/source/Expression/Materializer.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/Materializer.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Expression/Materializer.cpp (original)
+++ lldb/trunk/source/Expression/Materializer.cpp Thu Oct  1 18:07:06 2015
@@ -875,12 +875,11 @@ public:
         
         ConstString name = persistent_state->GetNextPersistentVariableName();
         
-        lldb::ExpressionVariableSP ret = 
ClangExpressionVariable::CreateVariableInList(*persistent_state,
-                                                                               
        exe_scope,
-                                                                               
        name,
-                                                                               
        m_type,
-                                                                               
        map.GetByteOrder(),
-                                                                               
        map.GetAddressByteSize())->shared_from_this();
+        lldb::ExpressionVariableSP ret = 
persistent_state->CreatePersistentVariable(exe_scope,
+                                                                               
     name,
+                                                                               
     m_type,
+                                                                               
     map.GetByteOrder(),
+                                                                               
     map.GetAddressByteSize());
         
         if (!ret)
         {
@@ -915,7 +914,7 @@ public:
             return;
         }
                 
-        result_variable_sp = ret;
+        result_variable_sp = persistent_state->GetVariable(name);
         
         if (!can_persist || !m_keep_in_memory)
         {

Modified: 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp 
(original)
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp 
Thu Oct  1 18:07:06 2015
@@ -219,16 +219,14 @@ ClangExpressionDeclMap::AddPersistentVar
 
         uint32_t offset = 
m_parser_vars->m_materializer->AddResultVariable(user_type, is_lvalue, 
m_keep_result_in_memory, err);
 
-        ClangExpressionVariable *var = 
ClangExpressionVariable::CreateVariableInList(m_found_entities,
-                                                                               
      exe_ctx.GetBestExecutionContextScope(),
-                                                                               
      name,
-                                                                               
      user_type,
-                                                                               
      m_parser_vars->m_target_info.byte_order,
-                                                                               
      m_parser_vars->m_target_info.address_byte_size);
-
-        if (!var)
-            return false;
+        ClangExpressionVariable *var = new 
ClangExpressionVariable(exe_ctx.GetBestExecutionContextScope(),
+                                                                   name,
+                                                                   user_type,
+                                                                   
m_parser_vars->m_target_info.byte_order,
+                                                                   
m_parser_vars->m_target_info.address_byte_size);
 
+        m_found_entities.AddNewlyConstructedVariable(var);
+        
         var->EnableParserVars(GetParserID());
 
         ClangExpressionVariable::ParserVars *parser_vars = 
var->GetParserVars(GetParserID());
@@ -268,11 +266,11 @@ ClangExpressionDeclMap::AddPersistentVar
     if (!m_parser_vars->m_target_info.IsValid())
         return false;
 
-    ClangExpressionVariable *var = 
m_parser_vars->m_persistent_vars->CreatePersistentVariable 
(exe_ctx.GetBestExecutionContextScope (),
-                                                                               
                name,
-                                                                               
                user_type,
-                                                                               
                m_parser_vars->m_target_info.byte_order,
-                                                                               
                m_parser_vars->m_target_info.address_byte_size);
+    ClangExpressionVariable *var = 
llvm::cast<ClangExpressionVariable>(m_parser_vars->m_persistent_vars->CreatePersistentVariable
 (exe_ctx.GetBestExecutionContextScope (),
+                                                                               
                                                    name,
+                                                                               
                                                    user_type,
+                                                                               
                                                    
m_parser_vars->m_target_info.byte_order,
+                                                                               
                                                    
m_parser_vars->m_target_info.address_byte_size).get());
 
     if (!var)
         return false;
@@ -1801,7 +1799,8 @@ ClangExpressionDeclMap::AddOneVariable (
 
     std::string decl_name(context.m_decl_name.getAsString());
     ConstString entity_name(decl_name.c_str());
-    ClangExpressionVariable 
*entity(ClangExpressionVariable::CreateVariableInList(m_found_entities, 
valobj));
+    ClangExpressionVariable *entity(new ClangExpressionVariable(valobj));
+    m_found_entities.AddNewlyConstructedVariable(entity);
 
     assert (entity);
     entity->EnableParserVars(GetParserID());
@@ -1879,14 +1878,13 @@ ClangExpressionDeclMap::AddOneGenericVar
 
     std::string decl_name(context.m_decl_name.getAsString());
     ConstString entity_name(decl_name.c_str());
-    ClangExpressionVariable 
*entity(ClangExpressionVariable::CreateVariableInList(m_found_entities,
-                                                                               
   m_parser_vars->m_exe_ctx.GetBestExecutionContextScope (),
-                                                                               
   entity_name,
-                                                                               
   user_type,
-                                                                               
   m_parser_vars->m_target_info.byte_order,
-                                                                               
   m_parser_vars->m_target_info.address_byte_size));
-    assert (entity);
-
+    ClangExpressionVariable *entity(new 
ClangExpressionVariable(m_parser_vars->m_exe_ctx.GetBestExecutionContextScope 
(),
+                                                                entity_name,
+                                                                user_type,
+                                                                
m_parser_vars->m_target_info.byte_order,
+                                                                
m_parser_vars->m_target_info.address_byte_size));
+    m_found_entities.AddNewlyConstructedVariable(entity);
+    
     entity->EnableParserVars(GetParserID());
     ClangExpressionVariable::ParserVars *parser_vars = 
entity->GetParserVars(GetParserID());
 
@@ -1995,11 +1993,10 @@ ClangExpressionDeclMap::AddOneRegister (
 
     NamedDecl *var_decl = context.AddVarDecl(parser_clang_type);
 
-    ClangExpressionVariable 
*entity(ClangExpressionVariable::CreateVariableInList(m_found_entities,
-                                                                               
   m_parser_vars->m_exe_ctx.GetBestExecutionContextScope(),
-                                                                               
   m_parser_vars->m_target_info.byte_order,
-                                                                               
   m_parser_vars->m_target_info.address_byte_size));
-    assert (entity);
+    ClangExpressionVariable *entity(new 
ClangExpressionVariable(m_parser_vars->m_exe_ctx.GetBestExecutionContextScope(),
+                                                                
m_parser_vars->m_target_info.byte_order,
+                                                                
m_parser_vars->m_target_info.address_byte_size));
+    m_found_entities.AddNewlyConstructedVariable(entity);
 
     std::string decl_name(context.m_decl_name.getAsString());
     entity->SetName (ConstString (decl_name.c_str()));
@@ -2104,11 +2101,10 @@ ClangExpressionDeclMap::AddOneFunction (
 
     lldb::addr_t load_addr = fun_address.GetCallableLoadAddress(target, 
is_indirect_function);
 
-    ClangExpressionVariable 
*entity(ClangExpressionVariable::CreateVariableInList (m_found_entities,
-                                                                               
    m_parser_vars->m_exe_ctx.GetBestExecutionContextScope (),
-                                                                               
    m_parser_vars->m_target_info.byte_order,
-                                                                               
    m_parser_vars->m_target_info.address_byte_size));
-    assert (entity);
+    ClangExpressionVariable *entity(new ClangExpressionVariable 
(m_parser_vars->m_exe_ctx.GetBestExecutionContextScope (),
+                                                                 
m_parser_vars->m_target_info.byte_order,
+                                                                 
m_parser_vars->m_target_info.address_byte_size));
+    m_found_entities.AddNewlyConstructedVariable(entity);
 
     std::string decl_name(context.m_decl_name.getAsString());
     entity->SetName(ConstString(decl_name.c_str()));

Modified: 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp 
(original)
+++ 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp 
Thu Oct  1 18:07:06 2015
@@ -53,6 +53,21 @@ ClangExpressionVariable::ClangExpression
     m_frozen_sp = valobj_sp;
 }
 
+ClangExpressionVariable::ClangExpressionVariable(ExecutionContextScope 
*exe_scope,
+                                                 const ConstString &name,
+                                                 const TypeFromUser& user_type,
+                                                 lldb::ByteOrder byte_order,
+                                                 uint32_t addr_byte_size) :
+    ExpressionVariable(LLVMCastKind::eKindClang),
+    m_parser_vars(),
+    m_jit_vars()
+{
+    m_flags = EVNone;
+    m_frozen_sp = ValueObjectConstResult::Create (exe_scope, byte_order, 
addr_byte_size);
+    SetName (name);
+    SetCompilerType (user_type);
+}
+
 TypeFromUser
 ClangExpressionVariable::GetTypeFromUser()
 {

Modified: 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h 
(original)
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h 
Thu Oct  1 18:07:06 2015
@@ -73,6 +73,12 @@ public:
                              uint16_t flags = EVNone);
     
     ClangExpressionVariable(const lldb::ValueObjectSP &valobj_sp);
+    
+    ClangExpressionVariable(ExecutionContextScope *exe_scope,
+                            const ConstString &name,
+                            const TypeFromUser& user_type,
+                            lldb::ByteOrder byte_order,
+                            uint32_t addr_byte_size);
         
     //----------------------------------------------------------------------
     /// Utility functions for dealing with ExpressionVariableLists in 
Clang-specific ways
@@ -105,40 +111,6 @@ public:
         }
         return nullptr;
     }
-    
-    static ClangExpressionVariable *
-    CreateVariableInList (ExpressionVariableList &list, ExecutionContextScope 
*exe_scope, lldb::ByteOrder byte_order, uint32_t addr_byte_size)
-    {
-        ClangExpressionVariable *clang_var = new 
ClangExpressionVariable(exe_scope, byte_order, addr_byte_size);
-        lldb::ExpressionVariableSP var_sp(clang_var);
-        list.AddVariable(var_sp);
-        return clang_var;
-    }
-    
-    static ClangExpressionVariable *
-    CreateVariableInList (ExpressionVariableList &list, const 
lldb::ValueObjectSP &valobj_sp)
-    {
-        ClangExpressionVariable *clang_var = new 
ClangExpressionVariable(valobj_sp);
-        lldb::ExpressionVariableSP var_sp(clang_var);
-        list.AddVariable(var_sp);
-        return clang_var;
-    }
-    
-    static ClangExpressionVariable *
-    CreateVariableInList (ExpressionVariableList &list,
-                          ExecutionContextScope *exe_scope,
-                          const ConstString &name,
-                          const TypeFromUser& user_type,
-                          lldb::ByteOrder byte_order,
-                          uint32_t addr_byte_size)
-    {
-        ClangExpressionVariable *clang_var = new 
ClangExpressionVariable(exe_scope, byte_order, addr_byte_size);
-        lldb::ExpressionVariableSP var_sp(clang_var);
-        clang_var->SetName (name);
-        clang_var->SetCompilerType (user_type);
-        list.AddVariable(var_sp);
-        return clang_var;
-    }
 
     //----------------------------------------------------------------------
     /// If the variable contains its own data, make a Value point at it.

Modified: 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp 
(original)
+++ 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp 
Thu Oct  1 18:07:06 2015
@@ -28,17 +28,17 @@ ClangPersistentVariables::ClangPersisten
 ExpressionVariableSP
 ClangPersistentVariables::CreatePersistentVariable (const lldb::ValueObjectSP 
&valobj_sp)
 {
-    return ClangExpressionVariable::CreateVariableInList(*this, 
valobj_sp)->shared_from_this();
+    return AddNewlyConstructedVariable(new ClangExpressionVariable(valobj_sp));
 }
 
-ClangExpressionVariable *
+ExpressionVariableSP
 ClangPersistentVariables::CreatePersistentVariable (ExecutionContextScope 
*exe_scope, 
                                                     const ConstString &name, 
-                                                    const TypeFromUser& 
user_type, 
+                                                    const CompilerType& 
compiler_type,
                                                     lldb::ByteOrder 
byte_order, 
                                                     uint32_t addr_byte_size)
 {
-    return ClangExpressionVariable::CreateVariableInList(*this, exe_scope, 
name, user_type, byte_order, addr_byte_size);
+    return AddNewlyConstructedVariable(new ClangExpressionVariable(exe_scope, 
name, compiler_type, byte_order, addr_byte_size));
 }
 
 void

Modified: 
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h 
(original)
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h 
Thu Oct  1 18:07:06 2015
@@ -48,14 +48,14 @@ public:
     }
 
     lldb::ExpressionVariableSP
-    CreatePersistentVariable (const lldb::ValueObjectSP &valobj_sp);
+    CreatePersistentVariable (const lldb::ValueObjectSP &valobj_sp) override;
 
-    ClangExpressionVariable *
+    lldb::ExpressionVariableSP
     CreatePersistentVariable (ExecutionContextScope *exe_scope,
                               const ConstString &name, 
-                              const TypeFromUser& user_type, 
+                              const CompilerType& compiler_type, 
                               lldb::ByteOrder byte_order, 
-                              uint32_t addr_byte_size);
+                              uint32_t addr_byte_size) override;
 
     //----------------------------------------------------------------------
     /// Return the next entry in the sequence of strings "$0", "$1", ... for

Modified: lldb/trunk/source/Target/ABI.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ABI.cpp?rev=249095&r1=249094&r2=249095&view=diff
==============================================================================
--- lldb/trunk/source/Target/ABI.cpp (original)
+++ lldb/trunk/source/Target/ABI.cpp Thu Oct  1 18:07:06 2015
@@ -146,7 +146,7 @@ ABI::GetReturnValueObject (Thread &threa
         
         return_valobj_sp = const_valobj_sp;
 
-        ExpressionVariableSP 
clang_expr_variable_sp(ClangExpressionVariable::CreateVariableInList(*persistent_expression_state,
 return_valobj_sp)->shared_from_this());
+        ExpressionVariableSP 
clang_expr_variable_sp(persistent_expression_state->CreatePersistentVariable(return_valobj_sp));
                
         assert (clang_expr_variable_sp.get());
         


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to