summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/ClangExpressionVariable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Expression/ClangExpressionVariable.cpp')
-rw-r--r--lldb/source/Expression/ClangExpressionVariable.cpp169
1 files changed, 81 insertions, 88 deletions
diff --git a/lldb/source/Expression/ClangExpressionVariable.cpp b/lldb/source/Expression/ClangExpressionVariable.cpp
index a85bc249879..79a7e4f2fb9 100644
--- a/lldb/source/Expression/ClangExpressionVariable.cpp
+++ b/lldb/source/Expression/ClangExpressionVariable.cpp
@@ -25,116 +25,109 @@
using namespace lldb_private;
using namespace clang;
-ClangExpressionVariable::ClangExpressionVariable() :
- m_name(),
- m_user_type (TypeFromUser(NULL, NULL)),
- m_store (NULL),
- m_register_info (NULL),
- m_index (0),
+ClangExpressionVariable::ClangExpressionVariable(lldb::ByteOrder byte_order, uint32_t addr_byte_size) :
m_parser_vars(),
m_jit_vars (),
- m_data_sp ()
+ m_valojb_sp (new ValueObjectConstResult(byte_order, addr_byte_size))
{
}
-void
-ClangExpressionVariable::DisableDataVars()
+ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) :
+ m_parser_vars(),
+ m_jit_vars (),
+ m_valojb_sp (valobj_sp)
{
- m_data_sp.reset();
}
+//----------------------------------------------------------------------
+/// Return the variable's size in bytes
+//----------------------------------------------------------------------
+size_t
+ClangExpressionVariable::GetByteSize ()
+{
+ return m_valojb_sp->GetByteSize();
+}
-ClangExpressionVariable::ClangExpressionVariable(const ClangExpressionVariable &rhs) :
- m_name(rhs.m_name),
- m_user_type(rhs.m_user_type),
- m_store(rhs.m_store),
- m_register_info(rhs.m_register_info),
- m_index(rhs.m_index)
+const ConstString &
+ClangExpressionVariable::GetName ()
{
- if (rhs.m_parser_vars.get())
- {
- // TODO: Sean, can m_parser_vars be a shared pointer??? We are copy
- // constructing it here. That is ok if we need to, but do we really
- // need to?
- m_parser_vars.reset(new struct ParserVars);
- *m_parser_vars.get() = *rhs.m_parser_vars.get();
- }
-
- if (rhs.m_jit_vars.get())
- {
- // TODO: Sean, can m_jit_vars be a shared pointer??? We are copy
- // constructing it here. That is ok if we need to, but do we really
- // need to?
- m_jit_vars.reset(new struct JITVars);
- *m_jit_vars.get() = *rhs.m_jit_vars.get();
- }
-
- if (rhs.m_data_sp)
- {
- // TODO: Sean, does m_data_sp need to be copy constructed? Or can it
- // shared the data?
-
- m_data_sp.reset(new DataBufferHeap (rhs.m_data_sp->GetBytes(),
- rhs.m_data_sp->GetByteSize()));
- }
+ return m_valojb_sp->GetName();
+}
+
+lldb::ValueObjectSP
+ClangExpressionVariable::GetValueObject()
+{
+ return m_valojb_sp;
}
-bool
-ClangExpressionVariable::PointValueAtData(Value &value, ExecutionContext *exe_ctx)
+lldb::RegisterInfo *
+ClangExpressionVariable::GetRegisterInfo()
{
- if (m_data_sp.get() == NULL)
- return false;
-
- value.SetContext(Value::eContextTypeClangType, m_user_type.GetOpaqueQualType());
- value.SetValueType(Value::eValueTypeHostAddress);
- value.GetScalar() = (uintptr_t)m_data_sp->GetBytes();
- clang::ASTContext *ast_context = m_user_type.GetASTContext();
-
- if (exe_ctx)
- value.ResolveValue (exe_ctx, ast_context);
-
- return true;
+ return m_valojb_sp->GetValue().GetRegisterInfo();
}
-void
-ClangExpressionVariable::EnableDataVars()
+void
+ClangExpressionVariable::SetRegisterInfo (const lldb::RegisterInfo *reg_info)
{
- if (!m_data_sp.get())
- m_data_sp.reset(new DataBufferHeap);
+ return m_valojb_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<lldb::RegisterInfo *>(reg_info));
}
-lldb::ValueObjectSP
-ClangExpressionVariable::GetExpressionResult (ExecutionContext *exe_ctx)
+lldb::clang_type_t
+ClangExpressionVariable::GetClangType()
+{
+ return m_valojb_sp->GetClangType();
+}
+
+void
+ClangExpressionVariable::SetClangType(lldb::clang_type_t clang_type)
+{
+ m_valojb_sp->GetValue().SetContext(Value::eContextTypeClangType, clang_type);
+}
+
+clang::ASTContext *
+ClangExpressionVariable::GetClangAST()
+{
+ return m_valojb_sp->GetClangAST();
+}
+
+void
+ClangExpressionVariable::SetClangAST (clang::ASTContext *ast)
+{
+ m_valojb_sp->SetClangAST (ast);
+}
+
+TypeFromUser
+ClangExpressionVariable::GetTypeFromUser()
+{
+ TypeFromUser tfu (m_valojb_sp->GetClangType(), m_valojb_sp->GetClangAST());
+ return tfu;
+}
+
+uint8_t *
+ClangExpressionVariable::GetValueBytes()
{
- lldb::ValueObjectSP result_sp;
- if (m_data_sp)
+ const size_t byte_size = m_valojb_sp->GetByteSize();
+ if (byte_size > 0)
{
- Target * target = NULL;
- Process *process = NULL;
- if (exe_ctx)
+ if (m_valojb_sp->GetDataExtractor().GetByteSize() < byte_size)
{
- target = exe_ctx->target;
- process = exe_ctx->process;
- }
-
- Value value;
- if (PointValueAtData(value, exe_ctx))
- {
- lldb::ByteOrder byte_order = lldb::eByteOrderHost;
- uint32_t addr_byte_size = 4;
- if (process)
- {
- byte_order = process->GetByteOrder();
- addr_byte_size = process->GetAddressByteSize();
- }
- result_sp.reset (new ValueObjectConstResult (m_user_type.GetASTContext(),
- m_user_type.GetOpaqueQualType(),
- m_name,
- m_data_sp,// TODO: sean can you get this to be valid?
- byte_order,
- addr_byte_size));
+ m_valojb_sp->GetValue().ResizeData(byte_size);
+ m_valojb_sp->GetValue().GetData (m_valojb_sp->GetDataExtractor());
}
+ return const_cast<uint8_t *>(m_valojb_sp->GetDataExtractor().GetDataStart());
}
- return result_sp;
+ return NULL;
+}
+
+void
+ClangExpressionVariable::SetName (const ConstString &name)
+{
+ m_valojb_sp->SetName (name);
+}
+
+void
+ClangExpressionVariable::ValueUpdated ()
+{
+ m_valojb_sp->ValueUpdated ();
}
OpenPOWER on IntegriCloud