summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2015-10-01 23:07:06 +0000
committerSean Callanan <scallanan@apple.com>2015-10-01 23:07:06 +0000
commit9301ec11910dbb7fd13becd0e77b0a1faeff5915 (patch)
tree573c59b37f44c0c36df9b9ccbcf17c6b890c2dc5 /lldb/source
parentb660b619544d110808a93e4bb069a630c8a20900 (diff)
downloadbcm5719-llvm-9301ec11910dbb7fd13becd0e77b0a1faeff5915.tar.gz
bcm5719-llvm-9301ec11910dbb7fd13becd0e77b0a1faeff5915.zip
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. llvm-svn: 249095
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Core/ValueObject.cpp12
-rw-r--r--lldb/source/Expression/Materializer.cpp13
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp62
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.cpp15
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionVariable.h40
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp8
-rw-r--r--lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h8
-rw-r--r--lldb/source/Target/ABI.cpp2
8 files changed, 70 insertions, 90 deletions
diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp
index 3b028786b5b..98c05c32744 100644
--- a/lldb/source/Core/ValueObject.cpp
+++ b/lldb/source/Core/ValueObject.cpp
@@ -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();
}
diff --git a/lldb/source/Expression/Materializer.cpp b/lldb/source/Expression/Materializer.cpp
index ebdad184e55..05ae34a9560 100644
--- a/lldb/source/Expression/Materializer.cpp
+++ b/lldb/source/Expression/Materializer.cpp
@@ -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)
{
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
diff --git a/lldb/source/Target/ABI.cpp b/lldb/source/Target/ABI.cpp
index b2334d6abb8..4d67cb46abe 100644
--- a/lldb/source/Target/ABI.cpp
+++ b/lldb/source/Target/ABI.cpp
@@ -146,7 +146,7 @@ ABI::GetReturnValueObject (Thread &thread,
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());
OpenPOWER on IntegriCloud