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