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.cpp23
1 files changed, 10 insertions, 13 deletions
diff --git a/lldb/source/Expression/ClangExpressionVariable.cpp b/lldb/source/Expression/ClangExpressionVariable.cpp
index 37fc6c2354b..f406583dd72 100644
--- a/lldb/source/Expression/ClangExpressionVariable.cpp
+++ b/lldb/source/Expression/ClangExpressionVariable.cpp
@@ -50,23 +50,14 @@ ClangExpressionVariable::Print (Stream &output_stream,
{
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 @@ ClangExpressionVariable::Print (Stream &output_stream,
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 @@ ClangExpressionVariable::ClangExpressionVariable(const ClangExpressionVariable &
}
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;
}
OpenPOWER on IntegriCloud