diff options
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser')
5 files changed, 58 insertions, 75 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp index 4356297acd9..3f0517f3c47 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp @@ -219,16 +219,14 @@ ClangExpressionDeclMap::AddPersistentVariable 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::AddPersistentVariable 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 (NameSearchContext &context, VariableSP v 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::AddOneGenericVariable(NameSearchContext &context, 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 (NameSearchContext &context, 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 (NameSearchContext &context, 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())); diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp index f78ee3a8f62..908546b3ecd 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp @@ -53,6 +53,21 @@ ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &val 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() { diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h index c38e6c040a7..a4596148f6c 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h @@ -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. diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp index cadccecffeb..9bf9d435d7e 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp @@ -28,17 +28,17 @@ ClangPersistentVariables::ClangPersistentVariables () : 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 diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h index 1a486aeb77b..daee1b86c30 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h @@ -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 |

