Add "-o" option to "expression" which prints the object description if available.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@115115 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/ClangExpressionVariable.cpp b/source/Expression/ClangExpressionVariable.cpp
index 37fc6c2..f406583 100644
--- a/source/Expression/ClangExpressionVariable.cpp
+++ b/source/Expression/ClangExpressionVariable.cpp
@@ -50,23 +50,14 @@
{
Error err;
- if (!m_data_vars.get() || !m_data_vars->m_data)
+ Value val;
+ if (!PointValueAtData (val, &exe_ctx))
{
err.SetErrorToGenericError();
err.SetErrorStringWithFormat("Variable doesn't contain a value");
return err;
}
- Value val;
-
- clang::ASTContext *ast_context = m_user_type.GetASTContext();
-
- val.SetContext (Value::eContextTypeOpaqueClangQualType, m_user_type.GetOpaqueQualType ());
- val.SetValueType (Value::eValueTypeHostAddress);
- val.GetScalar() = (uint64_t)m_data_vars->m_data->GetBytes ();
-
- val.ResolveValue (&exe_ctx, ast_context);
-
if (val.GetContextType () == Value::eContextTypeInvalid &&
val.GetValueType () == Value::eValueTypeScalar &&
format == lldb::eFormatDefault)
@@ -77,6 +68,8 @@
return err;
}
+ clang::ASTContext *ast_context = m_user_type.GetASTContext();
+
// The expression result is more complex and requires special handling
DataExtractor data;
Error expr_error = val.GetValueAsData (&exe_ctx, ast_context, data, 0);
@@ -165,14 +158,18 @@
}
bool
-ClangExpressionVariable::PointValueAtData(Value &value)
+ClangExpressionVariable::PointValueAtData(Value &value, ExecutionContext *exe_ctx)
{
- if (!m_data_vars.get())
+ if (!m_data_vars.get() || !m_data_vars->m_data)
return false;
value.SetContext(Value::eContextTypeOpaqueClangQualType, m_user_type.GetOpaqueQualType());
value.SetValueType(Value::eValueTypeHostAddress);
value.GetScalar() = (uint64_t)m_data_vars->m_data->GetBytes();
+ clang::ASTContext *ast_context = m_user_type.GetASTContext();
+
+ if (exe_ctx)
+ value.ResolveValue (exe_ctx, ast_context);
return true;
}