blob: c5bc5c48ef691b0e970e4c7b173a3022f523bbb4 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- ClangExpressionVariable.cpp -----------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Expression/ClangExpressionVariable.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16#include "clang/AST/ASTContext.h"
Sean Callanana6223432010-08-20 01:02:30 +000017#include "lldb/Core/ConstString.h"
18#include "lldb/Core/DataExtractor.h"
19#include "lldb/Core/Stream.h"
20#include "lldb/Core/Value.h"
Greg Clayton66ed2fb2010-10-05 00:00:42 +000021#include "lldb/Core/ValueObjectConstResult.h"
Sean Callanane8a59a82010-09-13 21:34:21 +000022#include "lldb/Target/ExecutionContext.h"
23#include "lldb/Target/Process.h"
Chris Lattner24943d22010-06-08 16:52:24 +000024
25using namespace lldb_private;
26using namespace clang;
27
Greg Clayton427f2902010-12-14 02:59:59 +000028ClangExpressionVariable::ClangExpressionVariable(lldb::ByteOrder byte_order, uint32_t addr_byte_size) :
Greg Clayton66ed2fb2010-10-05 00:00:42 +000029 m_parser_vars(),
30 m_jit_vars (),
Sean Callanan6a925532011-01-13 08:53:35 +000031 m_frozen_sp (new ValueObjectConstResult(byte_order, addr_byte_size)),
32 m_flags (EVNone)
Chris Lattner24943d22010-06-08 16:52:24 +000033{
34}
35
Greg Clayton427f2902010-12-14 02:59:59 +000036ClangExpressionVariable::ClangExpressionVariable (const lldb::ValueObjectSP &valobj_sp) :
37 m_parser_vars(),
38 m_jit_vars (),
Sean Callanan6a925532011-01-13 08:53:35 +000039 m_frozen_sp (valobj_sp),
40 m_flags (EVNone)
Chris Lattner24943d22010-06-08 16:52:24 +000041{
Chris Lattner24943d22010-06-08 16:52:24 +000042}
43
Greg Clayton427f2902010-12-14 02:59:59 +000044//----------------------------------------------------------------------
45/// Return the variable's size in bytes
46//----------------------------------------------------------------------
47size_t
48ClangExpressionVariable::GetByteSize ()
Chris Lattner24943d22010-06-08 16:52:24 +000049{
Sean Callanan6a925532011-01-13 08:53:35 +000050 return m_frozen_sp->GetByteSize();
Greg Clayton427f2902010-12-14 02:59:59 +000051}
Sean Callanana6223432010-08-20 01:02:30 +000052
Greg Clayton427f2902010-12-14 02:59:59 +000053const ConstString &
54ClangExpressionVariable::GetName ()
Sean Callanana6223432010-08-20 01:02:30 +000055{
Sean Callanan6a925532011-01-13 08:53:35 +000056 return m_frozen_sp->GetName();
Greg Clayton427f2902010-12-14 02:59:59 +000057}
Greg Clayton66ed2fb2010-10-05 00:00:42 +000058
59lldb::ValueObjectSP
Greg Clayton427f2902010-12-14 02:59:59 +000060ClangExpressionVariable::GetValueObject()
Greg Clayton66ed2fb2010-10-05 00:00:42 +000061{
Sean Callanan6a925532011-01-13 08:53:35 +000062 return m_frozen_sp;
Greg Clayton427f2902010-12-14 02:59:59 +000063}
64
Greg Claytonb3448432011-03-24 21:19:54 +000065RegisterInfo *
Greg Clayton427f2902010-12-14 02:59:59 +000066ClangExpressionVariable::GetRegisterInfo()
67{
Sean Callanan6a925532011-01-13 08:53:35 +000068 return m_frozen_sp->GetValue().GetRegisterInfo();
Greg Clayton427f2902010-12-14 02:59:59 +000069}
70
71void
Greg Claytonb3448432011-03-24 21:19:54 +000072ClangExpressionVariable::SetRegisterInfo (const RegisterInfo *reg_info)
Greg Clayton427f2902010-12-14 02:59:59 +000073{
Greg Claytonb3448432011-03-24 21:19:54 +000074 return m_frozen_sp->GetValue().SetContext (Value::eContextTypeRegisterInfo, const_cast<RegisterInfo *>(reg_info));
Greg Clayton427f2902010-12-14 02:59:59 +000075}
76
77lldb::clang_type_t
78ClangExpressionVariable::GetClangType()
79{
Sean Callanan6a925532011-01-13 08:53:35 +000080 return m_frozen_sp->GetClangType();
Greg Clayton427f2902010-12-14 02:59:59 +000081}
82
83void
84ClangExpressionVariable::SetClangType(lldb::clang_type_t clang_type)
85{
Sean Callanan6a925532011-01-13 08:53:35 +000086 m_frozen_sp->GetValue().SetContext(Value::eContextTypeClangType, clang_type);
Greg Clayton427f2902010-12-14 02:59:59 +000087}
88
89clang::ASTContext *
90ClangExpressionVariable::GetClangAST()
91{
Sean Callanan6a925532011-01-13 08:53:35 +000092 return m_frozen_sp->GetClangAST();
Greg Clayton427f2902010-12-14 02:59:59 +000093}
94
95void
96ClangExpressionVariable::SetClangAST (clang::ASTContext *ast)
97{
Sean Callanan6a925532011-01-13 08:53:35 +000098 m_frozen_sp->SetClangAST (ast);
Greg Clayton427f2902010-12-14 02:59:59 +000099}
100
101TypeFromUser
102ClangExpressionVariable::GetTypeFromUser()
103{
Sean Callanan6a925532011-01-13 08:53:35 +0000104 TypeFromUser tfu (m_frozen_sp->GetClangType(), m_frozen_sp->GetClangAST());
Greg Clayton427f2902010-12-14 02:59:59 +0000105 return tfu;
106}
107
108uint8_t *
109ClangExpressionVariable::GetValueBytes()
110{
Sean Callanan6a925532011-01-13 08:53:35 +0000111 const size_t byte_size = m_frozen_sp->GetByteSize();
Greg Clayton427f2902010-12-14 02:59:59 +0000112 if (byte_size > 0)
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000113 {
Sean Callanan6a925532011-01-13 08:53:35 +0000114 if (m_frozen_sp->GetDataExtractor().GetByteSize() < byte_size)
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000115 {
Sean Callanan6a925532011-01-13 08:53:35 +0000116 m_frozen_sp->GetValue().ResizeData(byte_size);
117 m_frozen_sp->GetValue().GetData (m_frozen_sp->GetDataExtractor());
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000118 }
Sean Callanan6a925532011-01-13 08:53:35 +0000119 return const_cast<uint8_t *>(m_frozen_sp->GetDataExtractor().GetDataStart());
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000120 }
Greg Clayton427f2902010-12-14 02:59:59 +0000121 return NULL;
122}
123
124void
125ClangExpressionVariable::SetName (const ConstString &name)
126{
Sean Callanan6a925532011-01-13 08:53:35 +0000127 m_frozen_sp->SetName (name);
Greg Clayton427f2902010-12-14 02:59:59 +0000128}
129
130void
131ClangExpressionVariable::ValueUpdated ()
132{
Sean Callanan6a925532011-01-13 08:53:35 +0000133 m_frozen_sp->ValueUpdated ();
Greg Clayton66ed2fb2010-10-05 00:00:42 +0000134}
135